1static inline void kissat_watch_large_delayed (
kissat *
solver,
6 const unsigned *
const end_delayed =
END_STACK (*delayed);
8 while (d != end_delayed) {
9 const unsigned lit = *d++;
14 watches *
const lit_watches = all_watches +
lit;
20 kissat_push_blocking_watch (
solver, lit_watches, blocking, ref);
26kissat_delay_watching_large (
kissat *
solver, unsigneds *
const delayed,
28 const watch watch = kissat_blocking_watch (other);
36 const clause *
const ignore,
49 const unsigned not_lit =
NOT (
lit);
57 watch *q = begin_watches;
60 unsigneds *
const delayed = &
solver->delayed;
64 uint64_t ticks = 1 + kissat_cache_lines (size_watches,
sizeof (
watch));
65 const unsigned idx =
IDX (
lit);
67 const bool probing =
solver->probing;
71 while (
p != end_watches) {
72 const watch head = *q++ = *
p++;
75 const value blocking_value = values[blocking];
80 if (blocking_value > 0)
83 if (blocking_value < 0) {
84 res = kissat_binary_conflict (
solver, not_lit, blocking);
85#ifndef CONTINUE_PROPAGATING_AFTER_CONFLICT
104 const unsigned other = lits[0] ^ lits[1] ^ not_lit;
109 const value other_value = values[other];
110 if (other_value > 0) {
114 const unsigned *
const end_lits = lits + c->
size;
115 unsigned *
const searched = lits + c->
searched;
119 value replacement_value = -1;
120 for (r = searched; r != end_lits; r++) {
123 replacement_value = values[replacement];
124 if (replacement_value >= 0)
127 if (replacement_value < 0) {
128 for (r = lits + 2; r != searched; r++) {
131 replacement_value = values[replacement];
132 if (replacement_value >= 0)
137 if (replacement_value >= 0) {
143 lits[1] = replacement;
146 kissat_delay_watching_large (
solver, delayed, replacement, other,
149 }
else if (other_value) {
153#if defined(PROBING_PROPAGATION)
155 LOGREF (ref,
"conflicting but ignored");
159 LOGREF (ref,
"conflicting");
161#ifndef CONTINUE_PROPAGATING_AFTER_CONFLICT
166#if defined(PROBING_PROPAGATION)
172 kissat_fast_assign_reference (
solver, values,
assigned, other, ref,
180 while (
p != end_watches)
184 kissat_watch_large_delayed (
solver, all_watches, delayed);
189static inline void kissat_update_conflicts_and_trail (
kissat *
solver,
193#ifndef PROBING_PROPAGATION
198 solver->inconsistent =
true;
202 }
else if (flush && !
solver->level &&
solver->unflushed)
ABC_NAMESPACE_HEADER_START typedef word ward
ABC_NAMESPACE_IMPL_START typedef signed char value
#define CHECK_AND_ADD_EMPTY(...)
#define KISSAT_assert(ignore)
#define ADD_EMPTY_TO_PROOF(...)
#define PROPAGATE_LITERAL
#define PROBING_PROPAGATION
ABC_NAMESPACE_HEADER_START typedef unsigned reference
#define VALID_INTERNAL_LITERAL(LIT)
ABC_NAMESPACE_IMPL_START void kissat_flush_trail(kissat *solver)
#define BEGIN_WATCHES(WS)
#define SET_END_OF_WATCHES(WS, P)