diff options
Diffstat (limited to 'impl/VariableAssignment.hpp')
-rw-r--r-- | impl/VariableAssignment.hpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/impl/VariableAssignment.hpp b/impl/VariableAssignment.hpp index 2a63756..cfce925 100644 --- a/impl/VariableAssignment.hpp +++ b/impl/VariableAssignment.hpp @@ -26,7 +26,7 @@ struct DynamicVariableAssignment : public VariableAssignment<Domain> { const Domain& value=infinity<Domain>() ) : _system(system), _strategy(strat), - _values(system.variableCount(), value), + _values(system.variableCount(), unknown(infinity<Domain>())), _stable(system.variableCount()), _influence(system.variableCount(), IdSet<Variable<Domain> >(system.variableCount())), @@ -59,17 +59,20 @@ struct DynamicVariableAssignment : public VariableAssignment<Domain> { log::fixpoint << indent() << "Invalidating " << x << std::endl; if (_stable.contains(x)) { _stable.remove(x); - _values[x] = infinity<Domain>(); - + _values[x] = unknown(infinity<Domain>()); + + solve(x); + /* IdSet<Variable<Domain> > infl = _influence[x]; _influence[x].clear(); for (typename IdSet<Variable<Domain> >::iterator - it = infl.begin(), - ei = infl.end(); - it != ei; - ++it) { - invalidate(_system.variable(*it)); + it = infl.begin(), + ei = infl.end(); + it != ei; + ++it) { + invalidate(_system.variable(*it)); } + */ } } @@ -125,11 +128,12 @@ private: }; const EquationSystem<Domain>& _system; - DynamicMaxStrategy<Domain>& _strategy; - IdMap<Variable<Domain>, Domain> _values; - IdSet<Variable<Domain> > _stable; - IdMap<Variable<Domain>,IdSet<Variable<Domain> > > _influence; - bool _frozen; + const DynamicMaxStrategy<Domain>& _strategy; + mutable IdMap<Variable<Domain>, Domain> _values; +public: + mutable IdSet<Variable<Domain> > _stable; +private: + mutable IdMap<Variable<Domain>,IdSet<Variable<Domain> > > _influence; }; #endif |