#ifndef EXPR_EVAL_H
#define EXPR_EVAL_H
#include <map>
#include <string>
#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<std::string,int> 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
