diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2017-02-11 17:28:37 -0800 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2017-02-11 17:28:37 -0800 |
commit | 2a5fa67d36393ab3ddb14e5bf542b0f29c8634e1 (patch) | |
tree | 82554b6141c65a7c954c6017af8700a0ac348dbe /src/sat/satoko/solver.c | |
parent | 7b7ebf91e458271b5979a3464b25faae5a5e4a6a (diff) | |
download | abc-2a5fa67d36393ab3ddb14e5bf542b0f29c8634e1.tar.gz abc-2a5fa67d36393ab3ddb14e5bf542b0f29c8634e1.tar.bz2 abc-2a5fa67d36393ab3ddb14e5bf542b0f29c8634e1.zip |
Adding APIs to mark cones. Creating test-bench for incremental solving &satoko -i.
Diffstat (limited to 'src/sat/satoko/solver.c')
-rw-r--r-- | src/sat/satoko/solver.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/sat/satoko/solver.c b/src/sat/satoko/solver.c index cdd3141e..2abc9833 100644 --- a/src/sat/satoko/solver.c +++ b/src/sat/satoko/solver.c @@ -190,14 +190,18 @@ static inline unsigned solver_decide(solver_t *s) if (heap_size(s->var_order) == 0) { next_var = UNDEF; return UNDEF; - } else - next_var = heap_remove_min(s->var_order); + } + next_var = heap_remove_min(s->var_order); + if (solver_has_marks(s) && !var_mark(s, next_var)) + next_var = UNDEF; } return var2lit(next_var, vec_char_at(s->polarity, next_var)); } static inline void solver_new_decision(solver_t *s, unsigned lit) { + if (solver_has_marks(s) && !var_mark(s, lit2var(lit))) + return; assert(var_value(s, lit2var(lit)) == VAR_UNASSING); vec_uint_push_back(s->trail_lim, vec_uint_size(s->trail)); solver_enqueue(s, lit, UNDEF); @@ -538,6 +542,8 @@ unsigned solver_propagate(solver_t *s) n_propagations++; watch_list_foreach(s->bin_watches, i, p) { + if (solver_has_marks(s) && !var_mark(s, lit2var(i->blocker))) + continue; if (var_value(s, lit2var(i->blocker)) == VAR_UNASSING) solver_enqueue(s, i->blocker, i->cref); else if (lit_value(s, i->blocker) == LIT_FALSE) @@ -551,6 +557,12 @@ unsigned solver_propagate(solver_t *s) struct clause *clause; struct watcher w; + if (solver_has_marks(s) && !var_mark(s, lit2var(i->blocker))) + { + *j++ = *i++; + continue; + } + if (lit_value(s, i->blocker) == LIT_TRUE) { *j++ = *i++; continue; |