summaryrefslogtreecommitdiff
path: root/impl/MaxStrategy.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'impl/MaxStrategy.hpp')
-rw-r--r--impl/MaxStrategy.hpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/impl/MaxStrategy.hpp b/impl/MaxStrategy.hpp
index d15884c..f330f3b 100644
--- a/impl/MaxStrategy.hpp
+++ b/impl/MaxStrategy.hpp
@@ -36,9 +36,9 @@ struct DynamicMaxStrategy : public MaxStrategy<Domain> {
_values(system.maxExpressionCount(), 0),
_stable(system.maxExpressionCount()),
_influence(system.maxExpressionCount(),
- IdSet<MaxExpression<Domain>>(system.maxExpressionCount())),
+ IdSet<MaxExpression<Domain> >(system.maxExpressionCount())),
_var_influence(system.variableCount(),
- IdSet<MaxExpression<Domain>>(system.maxExpressionCount()))
+ IdSet<MaxExpression<Domain> >(system.maxExpressionCount()))
{}
void setRho(DynamicVariableAssignment<Domain>& rho) {
@@ -54,11 +54,14 @@ struct DynamicMaxStrategy : public MaxStrategy<Domain> {
log::strategy << indent() << "Invalidating " << v << " - " << *_system[v] << std::endl;
_stable.filter(_var_influence[v]);
- for (auto it = _var_influence[v].begin();
- it != _var_influence[v].end();
+ for (typename IdSet<MaxExpression<Domain> >::iterator
+ it = _var_influence[v].begin(),
+ end = _var_influence[v].end();
+ it != end;
++it) {
solve(_system.maxExpression(*it));
}
+ _var_influence[v].clear();
}
private:
@@ -75,7 +78,7 @@ private:
if (val != _values[x]) {
log::strategy << x << " => " << *x.arguments()[val] << std::endl;
- auto oldInfluence = _influence[x];
+ IdSet<MaxExpression<Domain> > oldInfluence = _influence[x];
_influence[x].clear();
_values[x] = val;
@@ -83,16 +86,20 @@ private:
_stable.filter(oldInfluence);
- for (auto it = oldInfluence.begin();
- it != oldInfluence.end();
+ for (typename IdSet<MaxExpression<Domain> >::iterator
+ it = oldInfluence.begin(),
+ end = oldInfluence.end();
+ it != end;
++it) {
solve(_system.maxExpression(*it));
}
} else {
- log::strategy << indent() << x << " did not change" << std::endl;
+ log::strategy << indent() << x << " did not change: "
+ << x << " => " << *x.arguments()[val] << std::endl;
}
} else {
- log::strategy << indent() << x << " is stable" << std::endl;
+ log::strategy << indent() << x << " is stable: "
+ << x << " => " << *x.arguments()[_values[x]] << std::endl;
}
}
@@ -135,9 +142,9 @@ private:
const EquationSystem<Domain>& _system;
mutable DynamicVariableAssignment<Domain>* _rho;
mutable IdMap<MaxExpression<Domain>,unsigned int> _values;
- mutable IdSet<MaxExpression<Domain>> _stable;
- mutable IdMap<MaxExpression<Domain>,IdSet<MaxExpression<Domain>>> _influence;
- mutable IdMap<Variable<Domain>,IdSet<MaxExpression<Domain>>> _var_influence;
+ mutable IdSet<MaxExpression<Domain> > _stable;
+ mutable IdMap<MaxExpression<Domain>,IdSet<MaxExpression<Domain> > > _influence;
+ mutable IdMap<Variable<Domain>,IdSet<MaxExpression<Domain> > > _var_influence;
};
/*template<typename Domain>