#ifndef EQUATION_H #define EQUATION_H #include "Variable.h" #include "Expression.h" #include #include template struct Equation { Equation(const Variable& var, Expression* value) : _var(var), _value(value) { } Variable var() const { return _var; } Variable var(const Variable& var) { Variable old_var = _var; _var = var; return _var; } Expression* value() const { return _value; } Expression* value(const Expression* value) { Expression* old_value = _value; _value = value; return old_value; } std::map solve(const std::map& curr) { std::map result = curr; T last; do { last = result[_var.name()]; result[_var.name()] = _value->eval(result); } while (last != result[_var.name()]); return result; } private: Variable _var; Expression* _value; }; #endif