Example #1
0
Constraint::PropResult ModelEnumerator::BacktrackFinder::propagate(Solver& s, Literal, uint32& pos) {
	assert(pos < nogoods.size() && nogoods[pos] != 0);
	ClauseHead* c = static_cast<ClauseHead*>(nogoods[pos]);
	if (!c->locked(s)) {
		c->destroy(&s, true);
		nogoods[pos] = (c = 0);
		while (!nogoods.empty() && !nogoods.back()) {
			nogoods.pop_back();
		}
	}
	return PropResult(true, c != 0);
}
Example #2
0
void CBConsequences::LocalConstraint::add(Solver& s, Constraint* c) {
	if (!locked.empty()) {
		static_cast<ClauseHead*>(locked.back())->detach(s);
		ConstraintDB::size_type j = 0; 
		for (ConstraintDB::size_type i = 0; i != locked.size(); ++i) {
			ClauseHead* h = (ClauseHead*)locked[i];
			if (h->locked(s)) locked[j++] = h;
			else h->destroy(&s, false);
		}
		locked.erase(locked.begin()+j, locked.end());
	}
	locked.push_back(c);
}