bool CNF::redundant(const Watched& ws) const { return ( (ws.isBinary() && ws.red()) || (ws.isTri() && ws.red()) || (ws.isClause() && clAllocator.getPointer(ws.getOffset())->red() ) ); }
bool CNF::redundant_or_removed(const Watched& ws) const { if (ws.isBinary() || ws.isTri()) { return ws.red(); } assert(ws.isClause()); const Clause* cl = clAllocator.getPointer(ws.getOffset()); return cl->red() || cl->getRemoved(); }
string CNF::watched_to_string(Lit otherLit, const Watched& ws) const { std::stringstream ss; switch(ws.getType()) { case watch_binary_t: ss << otherLit << ", " << ws.lit2(); if (ws.red()) { ss << "(red)"; } break; case CMSat::watch_tertiary_t: ss << otherLit << ", " << ws.lit2() << ", " << ws.lit3(); if (ws.red()) { ss << "(red)"; } break; case watch_clause_t: { const Clause* cl = clAllocator.getPointer(ws.getOffset()); for(size_t i = 0; i < cl->size(); i++) { ss << (*cl)[i]; if (i + 1 < cl->size()) ss << ", "; } if (cl->red()) { ss << "(red)"; } break; } default: assert(false); break; } return ss.str(); }
size_t CNF::cl_size(const Watched& ws) const { switch(ws.getType()) { case watch_binary_t: return 2; break; case CMSat::watch_tertiary_t: return 3; break; case watch_clause_t: { const Clause* cl = clAllocator.getPointer(ws.getOffset()); return cl->size(); break; } default: assert(false); return 0; break; } }