summaryrefslogtreecommitdiffstats
path: root/src/sat/glucose2/SimpSolver.h
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2021-04-27 14:46:05 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2021-04-27 14:46:05 -0700
commit5f8a8a596a009046896acd8af6397acecc1e36a9 (patch)
tree111b1022a28a4ef86a12ed2252ada6e6874e4eda /src/sat/glucose2/SimpSolver.h
parentde71e5f61038748b59bcbb2bf6f0c8666b45190a (diff)
downloadabc-5f8a8a596a009046896acd8af6397acecc1e36a9.tar.gz
abc-5f8a8a596a009046896acd8af6397acecc1e36a9.tar.bz2
abc-5f8a8a596a009046896acd8af6397acecc1e36a9.zip
Upgrade to the circuit-based solver.
Diffstat (limited to 'src/sat/glucose2/SimpSolver.h')
-rw-r--r--src/sat/glucose2/SimpSolver.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/sat/glucose2/SimpSolver.h b/src/sat/glucose2/SimpSolver.h
index 00dbfa4c..36d625e9 100644
--- a/src/sat/glucose2/SimpSolver.h
+++ b/src/sat/glucose2/SimpSolver.h
@@ -61,12 +61,25 @@ class SimpSolver : public Solver {
//
bool solve (const vec<Lit>& assumps, bool do_simp = true, bool turn_off_simp = false);
lbool solveLimited(const vec<Lit>& assumps, bool do_simp = true, bool turn_off_simp = false);
+ int solveLimited(int * lit0, int nlits, bool do_simp = false, bool turn_off_simp = false);
bool solve ( bool do_simp = true, bool turn_off_simp = false);
bool solve (Lit p , bool do_simp = true, bool turn_off_simp = false);
bool solve (Lit p, Lit q, bool do_simp = true, bool turn_off_simp = false);
bool solve (Lit p, Lit q, Lit r, bool do_simp = true, bool turn_off_simp = false);
bool eliminate (bool turn_off_elim = false); // Perform variable elimination based simplification.
+ void prelocate(int base_var_num){
+ Solver::prelocate(base_var_num);
+ frozen .prelocate( base_var_num );
+ eliminated.prelocate( base_var_num );
+
+ if (use_simplification){
+ n_occ .prelocate( base_var_num << 1 );
+ occurs .prelocate( base_var_num );
+ touched .prelocate( base_var_num );
+ elim_heap .prelocate( base_var_num );
+ }
+ }
// Memory managment:
//
virtual void reset();
@@ -199,6 +212,14 @@ inline bool SimpSolver::solve (const vec<Lit>& assumps, bool do_simp, boo
inline lbool SimpSolver::solveLimited (const vec<Lit>& assumps, bool do_simp, bool turn_off_simp){
assumps.copyTo(assumptions); return solve_(do_simp, turn_off_simp); }
+inline int SimpSolver::solveLimited(int * lit0, int nlits, bool do_simp, bool turn_off_simp){
+ assumptions.clear();
+ for(int i = 0; i < nlits; i ++)
+ assumptions.push(toLit(lit0[i]));
+ lbool res = solve_(do_simp, turn_off_simp);
+ return res == l_True ? 1 : (res == l_False ? -1 : 0);
+}
+
inline void SimpSolver::addVar(Var v) { while (v >= nVars()) newVar(); }
//=================================================================================================