summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au>2012-11-26 14:00:10 +1100
committerCarlo Zancanaro <carlo@pc-4w14-0.cs.usyd.edu.au>2012-11-26 14:00:10 +1100
commit7ad1aed1a3ba88e2c40c82da05b9bf35eedc4096 (patch)
treec85fd1eac0a0be0b10a7892a1ec81fe8d07f6c56
parentf823ccc928ae09a63ffef5b6cfe47966e2da1890 (diff)
parent7210673084d691b0c125a5bda3c868438c19eff1 (diff)
Merge branch 'master' of ssh://bitbucket.org/czan/honours
-rw-r--r--clang/include/clang/Analysis/Analyses/IntervalSolver/Operator.hpp41
-rw-r--r--impl/VariableAssignment.hpp20
2 files changed, 20 insertions, 41 deletions
diff --git a/clang/include/clang/Analysis/Analyses/IntervalSolver/Operator.hpp b/clang/include/clang/Analysis/Analyses/IntervalSolver/Operator.hpp
index 0b08866..8dbdc39 100644
--- a/clang/include/clang/Analysis/Analyses/IntervalSolver/Operator.hpp
+++ b/clang/include/clang/Analysis/Analyses/IntervalSolver/Operator.hpp
@@ -171,14 +171,19 @@ struct MinCostFlow : public Operator<Domain> {
_solver.ChgCost(i, costs[i].template as<MCFClass::CNumber>());
}
_solver.SolveMCF();
- if (_solver.MCFGetStatus() == MCFClass::kUnfeasible){
+ if (_solver.MCFGetStatus() != MCFClass::kOK) {
return -infinity<Domain>();
- } else if (_solver.MCFGetFO() == MCFClass::Inf<MCFClass::FONumber>()) {
- return infinity<Domain>();
- } else if (_solver.MCFGetFO() == -MCFClass::Inf<MCFClass::FONumber>()) {
- return -infinity<Domain>();
} else {
- return _solver.MCFGetFO();
+ MCFClass::FONumber num = _solver.MCFGetFO();
+ if (num == MCFClass::Inf<MCFClass::FONumber>()) {
+ return infinity<Domain>();
+ } else if (num == -MCFClass::Inf<MCFClass::FONumber>()) {
+ return -infinity<Domain>();
+ } else {
+ if (((int)num) == -2147483648)
+ return -infinity<Domain>();
+ return num;
+ }
}
}
void print(std::ostream& cout) const {
@@ -217,30 +222,6 @@ private:
mutable MCFSimplex _solver;
};
-/*#include "TemplateConstraintMatrix.hpp"
-
-template<typename Domain>
-struct MinimumCostFlow : public Operator<Domain> {
- MinimumCostFlow() {
- }
- Domain solve(const Domain& d) const {
-
- }
- virtual Domain eval(const std::vector<Domain>& arguments) const {
- if (arguments.size() != 1)
- throw "Incorrect number of arguments.";
- return solve(arguments[0]);
- }
- void print(std::ostream& cout) const {
- cout << "minCostFlow";
- }
-private:
- TemplateConstraintMatrix& constraint; // T
- std::vector<Domain> guard; // c
- std::vector<std::vector<Domain>> multiplication; //A
- unsigned int row;
-};*/
-
template<typename T>
std::ostream& operator<<(std::ostream& cout, const Operator<T>& op) {
op.print(cout);
diff --git a/impl/VariableAssignment.hpp b/impl/VariableAssignment.hpp
index 67896ef..2967fb6 100644
--- a/impl/VariableAssignment.hpp
+++ b/impl/VariableAssignment.hpp
@@ -60,17 +60,15 @@ struct DynamicVariableAssignment : public VariableAssignment<Domain> {
IdSet<Variable<Domain> > get_changed() {
IdSet<Variable<Domain> > changed;
- if (_touched.size() > 0) {
- for (typename IdSet<Variable<Domain> >::iterator
- it = _touched.begin(),
- ei = _touched.end();
- it != ei;
- ++it) {
- Variable<Domain>& var = _system.variable(*it);
- if (!_unstable.contains(var) && _old_values[var] != _values[var]) {
- changed.insert(var);
- _touched.remove(var);
- }
+ for (typename IdSet<Variable<Domain> >::iterator
+ it = _touched.begin(),
+ ei = _touched.end();
+ it != ei;
+ ++it) {
+ Variable<Domain>& var = _system.variable(*it);
+ if (!_unstable.contains(var) && _old_values[var] != _values[var]) {
+ changed.insert(var);
+ _touched.remove(var);
}
}
//_touched.clear();