diff options
author | Carlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au> | 2012-11-02 16:11:39 +1100 |
---|---|---|
committer | Carlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au> | 2012-11-02 16:11:39 +1100 |
commit | 8c7de1fc64e2ef1994b558f223e0e77fb1395539 (patch) | |
tree | 881e3686e3670a7c090c90c134936eb4853d9222 /impl/MaxStrategy.hpp | |
parent | ea660a9528cea35b7971dfc405e464cbddb2d1d0 (diff) |
Change to using "touched" sets, and some writing.
Diffstat (limited to 'impl/MaxStrategy.hpp')
-rw-r--r-- | impl/MaxStrategy.hpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/impl/MaxStrategy.hpp b/impl/MaxStrategy.hpp index 6fee921..1b471e0 100644 --- a/impl/MaxStrategy.hpp +++ b/impl/MaxStrategy.hpp @@ -132,7 +132,7 @@ private: struct DependencyAssignment : public VariableAssignment<Domain>{ DependencyAssignment(DynamicMaxStrategy& strat, - VariableAssignment<Domain>& rho, + DynamicVariableAssignment<Domain>& rho, const MaxExpression<Domain>& expr) : _strat(strat), _rho(rho), @@ -144,11 +144,23 @@ private: // recursive magic! _strat.solve(*_strat._system[var]); _strat._influence[*_strat._system[var]].insert(_expr); - return _rho[var]; + + // force evaluation to get touched variables + Domain value = _rho[var]; + // invalidate touched variables + IdSet<Variable<Domain> > changed = _rho.get_changed(); + for (typename IdSet<Variable<Domain> >::iterator + it = changed.begin(), + ei = changed.end(); + it != ei; + ++it) { + _strat.invalidate(_strat._system.variable(*it)); + } + return value; } private: DynamicMaxStrategy& _strat; - VariableAssignment<Domain>& _rho; + DynamicVariableAssignment<Domain>& _rho; const MaxExpression<Domain>& _expr; IdSet<Variable<Domain> > _current; }; |