SATEncoder::SATEncoder(CSolver *_solver) :
cnf(createCNF()),
solver(_solver),
- vector(allocDefVectorEdge()) {
+ vector(allocDefVectorEdge()) {
}
SATEncoder::~SATEncoder() {
booledgeMap.reset();
}
-int SATEncoder::solve() {
+int SATEncoder::solve(long timeout) {
+ cnf->solver->timeout = timeout;
+ long long startTime = getTimeNano();
+ finishedClauses(cnf->solver);
+ cnf->encodeTime = getTimeNano() - startTime;
+ if(solver->isIncrementalMode()){
+ solver->freezeElementsVariables();
+ }
return solveCNF(cnf);
}
void SATEncoder::encodeAllSATEncoder(CSolver *csolver) {
+ if (csolver->isUnSAT()) {
+ return;
+ }
SetIteratorBooleanEdge *iterator = csolver->getConstraints();
while (iterator->hasNext()) {
BooleanEdge constraint = iterator->next();
- Edge c = encodeConstraintSATEncoder(constraint);
- addConstraintCNF(cnf, c);
+ if(!csolver->isConstraintEncoded(constraint)){
+ Edge c = encodeConstraintSATEncoder(constraint);
+ addConstraintCNF(cnf, c);
+ csolver->addEncodedConstraint(constraint);
+ }
}
delete iterator;
}