this repo has no description

Squashed 'software/mza/' changes from 15b5b1ca03..b74e0a6989

b74e0a6989 Use correct bounds when only infinite on one side
4b12442928 Use Val comparison for infinity check
5a4119666a Add untrailing for constraint removal
b44ed554c6 FIXME: do not clear global registers. This does not work in the incremental case
4fce29b144 Ensure trailing of aliases happens after actual aliasing operations

git-subtree-dir: software/mza
git-subtree-split: b74e0a698981985cdf4979c6e533ded5d2adc349

+1 -1
lib/interpreter.cpp
···
assert(var->definitions().back() == con);
var->_definitions.pop_back();
} else {
-
assert(false);
}
def_trail.pop_back();
}
···
assert(var->definitions().back() == con);
var->_definitions.pop_back();
} else {
+
var->_definitions.push_back(con);
}
def_trail.pop_back();
}
+1 -1
lib/interpreter/variable.cpp
···
_subscriptions.clear();
// Set Alias
-
interpreter->trail.trail_alias(interpreter, this);
_aliased = true;
_domain = v;
v.addRef(interpreter);
}
void Variable::unalias(Interpreter* interpreter, Val dom) {
···
_subscriptions.clear();
// Set Alias
_aliased = true;
_domain = v;
v.addRef(interpreter);
+
interpreter->trail.trail_alias(interpreter, this);
}
void Variable::unalias(Interpreter* interpreter, Val dom) {
+1 -1
lib/solver.cpp
···
}
flatten_time = tm01.s();
// FIXME: Global registers should not be removed, merely hidden
-
interpreter->clear_globals();
if (verbose) {
std::cerr << "Status: " << Interpreter::status_to_string[interpreter->status()] << std::endl;
if (interpreter->status() == Interpreter::ROGER) {
···
}
flatten_time = tm01.s();
// FIXME: Global registers should not be removed, merely hidden
+
// interpreter->clear_globals();
if (verbose) {
std::cerr << "Status: " << Interpreter::status_to_string[interpreter->status()] << std::endl;
if (interpreter->status() == Interpreter::ROGER) {
+3 -1
solvers/gecode/gecode_constraints.cpp
···
gi._current_space->iv_defined.push_back(!var->definitions().empty());
}
} else {
-
IntVar intVar(*gi._current_space, Gecode::Int::Limits::min, Gecode::Int::Limits::max);
gi._current_space->iv.push_back(intVar);
gi.insertVar(var, GecodeVariable(GecodeVariable::INT_TYPE, gi._current_space->iv.size() - 1));
std::cerr << "% GecodeSolverInstance::processFlatZinc: Warning: Unbounded variable "
···
gi._current_space->iv_defined.push_back(!var->definitions().empty());
}
} else {
+
IntVar intVar(*gi._current_space,
+
var->lb().isFinite() ? var->lb().toInt() : Gecode::Int::Limits::min,
+
var->ub().isFinite() ? var->ub().toInt() : Gecode::Int::Limits::max);
gi._current_space->iv.push_back(intVar);
gi.insertVar(var, GecodeVariable(GecodeVariable::INT_TYPE, gi._current_space->iv.size() - 1));
std::cerr << "% GecodeSolverInstance::processFlatZinc: Warning: Unbounded variable "
+1 -1
solvers/gecode/gecode_solverinstance.cpp
···
if (val.isInt() && val >= 0 && val <= 1) {
continue;
} else if (val.isVar()) {
-
if (val.lb().toInt() >= 0 && val.ub().toInt() <= 1) {
continue;
}
return false;
···
if (val.isInt() && val >= 0 && val <= 1) {
continue;
} else if (val.isVar()) {
+
if (val.lb() >= Val(int(0)) && val.ub() <= Val(int(1))) {
continue;
}
return false;