static void track_clause(sat::solver& dst, sat::literal_vector& lits, sat::literal_vector& assumptions, vector<sat::literal_vector>& tracking_clauses) { sat::literal lit = sat::literal(dst.mk_var(true, false), false); tracking_clauses.set(lit.var(), lits); lits.push_back(~lit); dst.mk_clause(lits.size(), lits.c_ptr()); assumptions.push_back(lit); }
bool parse_dimacs_core(Buffer & in, std::ostream& err, sat::solver & solver) { sat::literal_vector lits; try { while (true) { skip_whitespace(in); if (*in == EOF) { break; } else if (*in == 'c' || *in == 'p') { skip_line(in); } else { read_clause(in, err, solver, lits); solver.mk_clause(lits.size(), lits.c_ptr()); } } } catch (lex_error) { return false; } return true; }