#ifndef EXPR_EVAL_H #define EXPR_EVAL_H #include #include #include "arch_error.h" /**** Structs ****/ class t_formula_data { public: void set_var_value(std::string var, int value) { vars_[var] = value; } int get_var_value(std::string var) const { auto iter = vars_.find(var); if (iter == vars_.end()) { archfpga_throw(__FILE__, __LINE__, "No value found for variable '%s' from expression\n", var.c_str()); } return iter->second; } private: std::map vars_; }; /* returns integer result according to specified formula and data */ int parse_formula(std::string formula, const t_formula_data& mydata); /* returns integer result according to specified piece-wise formula and data */ int parse_piecewise_formula(const char* formula, const t_formula_data& mydata); /* checks if the specified formula is piece-wise defined */ bool is_piecewise_formula(const char* formula); #endif