diff options
Diffstat (limited to 'impl/EquationSystem.hpp')
-rw-r--r-- | impl/EquationSystem.hpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/impl/EquationSystem.hpp b/impl/EquationSystem.hpp index 5549674..d09bef2 100644 --- a/impl/EquationSystem.hpp +++ b/impl/EquationSystem.hpp @@ -9,23 +9,11 @@ #include "VariableAssignment.hpp" template<typename Domain> -struct EquationSystem { - virtual ~EquationSystem() { } - virtual const Expression<Domain>* operator[](const Variable<Domain>&) const = 0; - virtual VariableAssignment<Domain>* eval(const VariableAssignment<Domain>& rho) const = 0; - - virtual unsigned int variableCount() const = 0; - virtual Variable<Domain>& variable(unsigned int) const = 0; - - virtual StableVariableAssignment<Domain>* assignment(const Domain& value) const = 0; - virtual Variable<Domain>* varFromExpr(const Expression<Domain>& expr) const = 0; - virtual bool equalAssignments(const VariableAssignment<Domain>&, const VariableAssignment<Domain>&) const = 0; - virtual void print(std::ostream& cout) const = 0; -}; +struct MaxStrategy; template<typename Domain> -struct ConcreteEquationSystem : public EquationSystem<Domain> { - virtual ~ConcreteEquationSystem() { +struct EquationSystem { + virtual ~EquationSystem() { for (typename std::set<Expression<Domain>*>::iterator it = _expressions.begin(); it != _expressions.end(); ++it) { @@ -109,6 +97,17 @@ struct ConcreteEquationSystem : public EquationSystem<Domain> { } return result; } + VariableAssignment<Domain>* eval(const VariableAssignment<Domain>& rho, const MaxStrategy<Domain>& strat) const { + StableVariableAssignment<Domain>* result = this->assignment(-infinity<Domain>()); + for (unsigned int i = 0, length = _variables.size(); + i < length; + ++i) { + const Variable<Domain>& var = *_variables[i]; + const Expression<Domain>& expr = * (*this)[var]; + (*result)[var] = expr.eval(rho, strat); + } + return result; + } Variable<Domain>* varFromExpr(const Expression<Domain>& expr) const { for (unsigned int i = 0, length = _right_sides.size(); i < length; ++i) { @@ -152,4 +151,6 @@ std::ostream& operator<<(std::ostream& cout, const EquationSystem<T>& system) { return cout; } +#include "MaxStrategy.hpp" + #endif |