cout << "Executing addRemovedClauses" << endl;
#endif
- for(uint i = 0; i < calcAtFinish.size(); i++)
+ for(XorClause **it = calcAtFinish.getData(), **end = calcAtFinish.getDataEnd(); it != end; it++)
{
- XorClause& c = *calcAtFinish[i];
+ XorClause& c = **it;
#ifdef VERBOSE_DEBUG
cout << "readding already removed (conglomerated) clause: ";
c.plainPrint();
#endif
- for(Lit *l = c.getData(), *end = c.getDataEnd(); l != end ; l++)
+ for(Lit *l = c.getData(), *end2 = c.getDataEnd(); l != end2 ; l++)
*l = l->unsign();
- if (!solver.addXorClause(c, c.xor_clause_inverted(), c.getGroup()))
+ if (!solver.addXorClause(c, c.xor_clause_inverted(), c.getGroup())) {
+ for (;it != end; it++)
+ free(&c);
+ calcAtFinish.clear();
return false;
+ }
free(&c);
}
calcAtFinish.clear();
lbool Solver::solve(const vec<Lit>& assumps)
{
+#ifdef VERBOSE_DEBUG
+ std::cout << "Solver::solve() called" << std::endl;
+#endif
if (!ok) return l_False;
assert(qhead == trail.size());
delete gauss_matrixes[i];
gauss_matrixes.clear();
+#ifdef VERBOSE_DEBUG
+ if (status == l_True)
+ std::cout << "Solution is SAT" << std::endl;
+ else if (status == l_False)
+ std::cout << "Solution is UNSAT" << std::endl;
+ else
+ std::cout << "Solutions is UNKNOWN" << std::endl;
+#endif //VERBOSE_DEBUG
+
if (status == l_True) {
if (greedyUnbound) {
double time = cpuTime();
#endif
if (subsumer->getNumElimed() > 0 || conglomerate->needCalcAtFinish()) {
+#ifdef VERBOSE_DEBUG
+ std::cout << "Solution needs extension. Extending." << std::endl;
+#endif //VERBOSE_DEBUG
Solver s;
s.doSubsumption = false;
s.performReplace = false;
assert(status == l_True);
exit(-1);
}
+#ifdef VERBOSE_DEBUG
+ std::cout << "Solution extending finished." << std::endl;
+#endif
for (Var var = 0; var < nVars(); var++) {
if (assigns[var] == l_Undef && s.model[var] != l_Undef) uncheckedEnqueue(Lit(var, s.model[var] == l_False));
}
if (doPartHandler && status != l_False) partHandler->readdRemovedClauses();
restartTypeChooser->reset();
+#ifdef VERBOSE_DEBUG
+ std::cout << "Solver::solve() finished" << std::endl;
+#endif
return status;
}