///////////////////////////////////////////////////////////////////////////////
// //
// File: xchaff.cpp //
// Author: Clark Barrett //
// Created: Wed Oct 16 17:31:50 2002 //
// Description: Enhanced C++ API for Chaff //
// //
///////////////////////////////////////////////////////////////////////////////
#include "xchaff.h"
SatSolver *SatSolver::Create()
{
return new Xchaff();
}
SatSolver::Clause Xchaff::GetClause(int clauseIndex)
{
int i,j;
SatSolver::Clause c;
assert(clauseIndex >= 0 && clauseIndex < _solver->num_clauses());
if (clauseIndex >= _solver->init_num_clauses()) {
for (i = j = _solver->init_num_clauses()-1; j < clauseIndex;)
if (_solver->clause(++i).in_use()) j++;
c.id = j;
}
else c.id = clauseIndex;
return c;
}
void Xchaff::GetClauseLits(SatSolver::Clause clause, vector<Lit>* lits)
{
int i;
for (i = 0; i < _solver->clause(clause.id).num_lits(); ++i)
lits->push_back(mkLit(_solver->clause(clause.id).literal(i).s_var()));
}
SatSolver::SATStatus Xchaff::Satisfiable(bool allowNewClauses)
{
int status;
status = _solver->solve(allowNewClauses);
switch (status) {
case UNSATISFIABLE: return SatSolver::UNSATISFIABLE;
case SATISFIABLE: return SatSolver::SATISFIABLE;
case TIME_OUT: return SatSolver::BUDGET_EXCEEDED;
case MEM_OUT: return SatSolver::OUT_OF_MEMORY;
}
return SatSolver::UNKNOWN;
}
SatSolver::SATStatus Xchaff::Continue()
{
int status;
status = _solver->continueCheck();
switch (status) {
case UNSATISFIABLE: return SatSolver::UNSATISFIABLE;
case SATISFIABLE: return SatSolver::SATISFIABLE;
case TIME_OUT: return SatSolver::BUDGET_EXCEEDED;
case MEM_OUT: return SatSolver::OUT_OF_MEMORY;
}
return SatSolver::UNKNOWN;
}
syntax highlighted by Code2HTML, v. 0.9.1