1#ifndef _watch_h_INCLUDED
2#define _watch_h_INCLUDED
22#ifdef KISSAT_IS_BIG_ENDIAN
32#ifdef KISSAT_IS_BIG_ENDIAN
72static inline litpair kissat_litpair (
unsigned lit,
unsigned other) {
79static inline watch kissat_binary_watch (
unsigned lit) {
95static inline watch kissat_blocking_watch (
unsigned lit) {
103#define EMPTY_WATCHES(W) kissat_empty_vector (&W)
104#define SIZE_WATCHES(W) kissat_size_vector (&W)
106#define PUSH_WATCHES(W, E) \
108 KISSAT_assert (sizeof (E) == sizeof (unsigned)); \
109 kissat_push_vectors (solver, &(W), (E).raw); \
112#define LAST_WATCH_POINTER(WS) \
113 (watch *) kissat_last_vector_pointer (solver, &WS)
115#define BEGIN_WATCHES(WS) \
116 ((union watch *) kissat_begin_vector (solver, &(WS)))
118#define END_WATCHES(WS) ((union watch *) kissat_end_vector (solver, &(WS)))
120#define BEGIN_CONST_WATCHES(WS) \
121 ((union watch *) kissat_begin_const_vector (solver, &(WS)))
123#define END_CONST_WATCHES(WS) \
124 ((union watch *) kissat_end_const_vector (solver, &(WS)))
126#define RELEASE_WATCHES(WS) kissat_release_vector (solver, &(WS))
128#define SET_END_OF_WATCHES(WS, P) \
130 size_t SIZE = (unsigned *) (P) - kissat_begin_vector (solver, &WS); \
131 kissat_resize_vector (solver, &WS, SIZE); \
134#define REMOVE_WATCHES(W, E) \
135 kissat_remove_from_vector (solver, &(W), (E).raw)
137#define WATCHES(LIT) (solver->watches[KISSAT_assert ((LIT) < LITS), (LIT)])
141#define all_binary_blocking_watch_ref(WATCH, REF, WATCHES) \
143 *WATCH##_PTR = (KISSAT_assert (solver->watching), BEGIN_WATCHES (WATCHES)), \
144 *const WATCH##_END = END_WATCHES (WATCHES); \
145 WATCH##_PTR != WATCH##_END && \
146 ((WATCH = *WATCH##_PTR), \
147 (REF = WATCH.type.binary ? INVALID_REF : WATCH##_PTR[1].large.ref), \
149 WATCH##_PTR += 1u + !WATCH.type.binary
151#define all_binary_blocking_watches(WATCH, WATCHES) \
153 *WATCH##_PTR = (KISSAT_assert (solver->watching), BEGIN_WATCHES (WATCHES)), \
154 *const WATCH##_END = END_WATCHES (WATCHES); \
155 WATCH##_PTR != WATCH##_END && ((WATCH = *WATCH##_PTR), true); \
156 WATCH##_PTR += 1u + !WATCH.type.binary
158#define all_binary_large_watches(WATCH, WATCHES) \
161 (KISSAT_assert (!solver->watching), BEGIN_WATCHES (WATCHES)), \
162 *const WATCH##_END = END_WATCHES (WATCHES); \
163 WATCH##_PTR != WATCH##_END && ((WATCH = *WATCH##_PTR), true); \
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
#define KISSAT_assert(ignore)
ABC_NAMESPACE_HEADER_START typedef unsigned reference
void kissat_watch_large_clauses(struct kissat *)
void kissat_flush_all_connected(struct kissat *)
void kissat_flush_large_watches(struct kissat *)
void kissat_flush_large_connected(struct kissat *)
void kissat_substitute_large_watch(struct kissat *, watches *, watch src, watch dst)
void kissat_connect_irredundant_large_clauses(struct kissat *)
void kissat_remove_binary_watch(struct kissat *, watches *, unsigned)
void kissat_remove_blocking_watch(struct kissat *, watches *, reference)
struct binary_tagged_literal watch_type
struct binary_tagged_reference large_watch
struct binary_tagged_literal binary_watch
struct binary_tagged_literal blocking_watch