Lit impliedLit;
};
-#pragma pack(push)
-#pragma pack(1)
class Watched {
public:
Watched(ClauseOffset _clause, Lit _blockedLit) : clause(_clause), blockedLit(_blockedLit) {};
ClauseOffset clause;
Lit blockedLit;
};
-#pragma pack(pop)
}; //NAMESPACE MINISAT
{
using namespace MINISAT;
+//#define DEBUG_CLAUSEALLOCATOR
+
ClauseAllocator::ClauseAllocator() :
clausePoolBin(sizeof(Clause) + 2*sizeof(Lit))
{}
}
if (!found) {
- //std::cout << "c New list in ClauseAllocator" << std::endl;
+ #ifdef DEBUG_CLAUSEALLOCATOR
+ std::cout << "c New list in ClauseAllocator" << std::endl;
+ #endif //DEBUG_CLAUSEALLOCATOR
+
uint32_t nextSize; //number of BYTES to allocate
if (maxSizes.size() != 0)
nextSize = maxSizes[maxSizes.size()-1]*3*sizeof(uint32_t);
currentlyUsedSize.push(0);
which = dataStarts.size()-1;
}
- /*std::cout
+ #ifdef DEBUG_CLAUSEALLOCATOR
+ std::cout
<< "selected list = " << which
<< " size = " << sizes[which]
<< " maxsize = " << maxSizes[which]
- << " diff = " << maxSizes[which] - sizes[which] << std::endl;*/
+ << " diff = " << maxSizes[which] - sizes[which] << std::endl;
+ #endif //DEBUG_CLAUSEALLOCATOR
assert(which != std::numeric_limits<uint32_t>::max());
Clause* pointer = (Clause*)(dataStarts[which] + sizes[which]);
sumAlloc += sizes[i];
}
- //std::cout << "c ratio:" << (double)sum/(double)sumAlloc << std::endl;
+ #ifdef DEBUG_CLAUSEALLOCATOR
+ std::cout << "c ratio:" << (double)sum/(double)sumAlloc << std::endl;
+ #endif //DEBUG_CLAUSEALLOCATOR
if ((double)sum/(double)sumAlloc > 0.7 /*&& sum > 10000000*/) {
if (solver->verbosity >= 2) {
}
c.shrink(i-j);
+ assert(c.size() != 1);
if (i != j) {
c.setStrenghtened();
if (c.size() == 2) {
solver.clauseAllocator.clauseFree(&c);
cc = c2;
solver.attachClause(*c2);
- /*} else if (c.size() == 3) {
- solver.detachModifiedClause(origLit1, origLit2, origSize, &c);
- Clause *c2 = Clause_new(c);
- clauseFree(&c);
- cc = c2;
- solver.attachClause(*c2);*/
} else {
if (c.learnt())
solver.learnts_literals -= i-j;
Solver::~Solver()
{
- for (uint32_t i = 0; i != learnts.size(); i++) clauseAllocator.clauseFree(learnts[i]);
- for (uint32_t i = 0; i != clauses.size(); i++) clauseAllocator.clauseFree(clauses[i]);
- for (uint32_t i = 0; i != binaryClauses.size(); i++) clauseAllocator.clauseFree(binaryClauses[i]);
- for (uint32_t i = 0; i != xorclauses.size(); i++) clauseAllocator.clauseFree(xorclauses[i]);
#ifdef USE_GAUSS
clearGaussMatrixes();
delete matrixFinder;
#endif
- //for (uint32_t i = 0; i != freeLater.size(); i++) clauseAllocator.clauseFree(freeLater[i]);
delete varReplacer;
delete clauseCleaner;
#ifdef HYPER_DEBUG2
uint32_t binaryLearntAdded = 0;
#endif
-
+
+ assert(solver.clauses.size() == 0);
for (uint32_t i = 0; i < clauses.size(); i++) {
if (clauses[i].clause != NULL) {
assert(clauses[i].clause->size() > 1);
{
#ifdef VERBOSE_DEBUG
std::cout << "subsWNonExistBins called with lit "; lit.print();
- std::cout << " startUp: " << startUp << std::endl;
+ std::cout << std::endl;
#endif //VERBOSE_DEBUG
toVisit.clear();
solver.newDecisionLevel();
#endif //VERBOSE_DEBUG
subsume0(ps2, calcAbstraction(ps2));
subsume1Partial(ps2);
+ if (!solver.ok) goto end;
}
} else {
subsume0BIN(~lit, toVisitAll);
}
+
+ end:
for (uint32_t i = 0; i < toVisit.size(); i++)
toVisitAll[toVisit[i].toInt()] = false;
- return true;
+ return solver.ok;
}
void Subsumer::clearAll()
//if (solver.xorclauses.size() < 30000 && solver.clauses.size() < MAX_CLAUSENUM_XORFIND/10) addAllXorAsNorm();
- solver.testAllClauseAttach();
if (solver.performReplace && !solver.varReplacer->performReplace(true))
return false;
fillCannotEliminate();
- solver.testAllClauseAttach();
uint32_t expected_size;
if (!alsoLearnt)
if (clauses.size() < 200000) fullSubsume = true;
else fullSubsume = false;
if (alsoLearnt) fullSubsume = true;
-
+
+ solver.clauseCleaner->cleanClauses(solver.learnts, ClauseCleaner::learnts);
+ addFromSolver<true>(solver.learnts, alsoLearnt);
solver.clauseCleaner->cleanClauses(solver.clauses, ClauseCleaner::clauses);
addFromSolver<true>(solver.clauses, alsoLearnt);
+
+ //It is IMPERATIVE to add binaryClauses last. The non-binary clauses can
+ //move to binaryClauses during cleaning!!!!
solver.clauseCleaner->removeSatisfied(solver.binaryClauses, ClauseCleaner::binaryClauses);
addFromSolver<true>(solver.binaryClauses, alsoLearnt);
CryptoMiniSat
-GIT revision: 819a9f4377ef8c9ed0f4b493517a84c853b30a98
+GIT revision: e540792aa3a01ec047b005b6351247fa87ae6eb6