From c065ae2bd1176b17d137e0f52df6ef1d9af9e757 Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Fri, 26 Oct 2012 16:29:52 +1100 Subject: Try to make the correct solver into a local solver As far as I can tell, it's worked! Hooray! --- impl/Expression.hpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'impl/Expression.hpp') diff --git a/impl/Expression.hpp b/impl/Expression.hpp index 9c4ac9f..c005fd6 100644 --- a/impl/Expression.hpp +++ b/impl/Expression.hpp @@ -31,9 +31,9 @@ struct Expression { return NULL; } - virtual Domain eval(const VariableAssignment&) const = 0; - virtual Domain eval(const VariableAssignment& rho, - const MaxStrategy&) const { + virtual Domain eval(VariableAssignment&) const = 0; + virtual Domain eval(VariableAssignment& rho, + MaxStrategy&) const { return eval(rho); } @@ -48,7 +48,7 @@ struct Constant : public Expression { Constant(const Domain& value) : _value(value) { } - virtual Domain eval(const VariableAssignment&) const { + virtual Domain eval(VariableAssignment&) const { return _value; } @@ -72,7 +72,7 @@ struct Variable : public Expression { return _name; } - virtual Domain eval(const VariableAssignment& rho) const { + virtual Domain eval(VariableAssignment& rho) const { return rho[*this]; } @@ -90,7 +90,7 @@ struct OperatorExpression : public Expression { OperatorExpression(const Operator& op, const std::vector*>& arguments) : _operator(op), _arguments(arguments) { } - virtual Domain eval(const VariableAssignment& rho) const { + virtual Domain eval(VariableAssignment& rho) const { std::vector argumentValues; for (typename std::vector*>::const_iterator it = _arguments.begin(); it != _arguments.end(); @@ -100,7 +100,7 @@ struct OperatorExpression : public Expression { return _operator.eval(argumentValues); } - virtual Domain eval(const VariableAssignment& rho, const MaxStrategy& strat) const { + virtual Domain eval(VariableAssignment& rho, MaxStrategy& strat) const { std::vector argumentValues; for (typename std::vector*>::const_iterator it = _arguments.begin(); it != _arguments.end(); @@ -161,11 +161,11 @@ struct MaxExpression : public OperatorExpression { return this; } - virtual Domain eval(const VariableAssignment& rho, const MaxStrategy& strat) const { + virtual Domain eval(VariableAssignment& rho, MaxStrategy& strat) const { return this->_arguments[strat.get(*this)]->eval(rho, strat); } - unsigned int bestStrategy(const VariableAssignment& rho, const MaxStrategy& strat) const { + unsigned int bestStrategy(VariableAssignment& rho, MaxStrategy& strat) const { Domain bestValue = this->eval(rho, strat); unsigned int bestIndex = strat.get(*this); -- cgit v1.2.3