9#ifndef satoko__solver_h
10#define satoko__solver_h
35#define UNDEF 0xFFFFFFFF
127static inline unsigned var2lit(
unsigned var,
char polarity)
129 return var + var + ((unsigned) polarity != 0);
132static inline unsigned lit2var(
unsigned lit)
139static inline char var_value(
solver_t *s,
unsigned var)
141 return vec_char_at(s->
assigns, var);
144static inline unsigned var_dlevel(
solver_t *s,
unsigned var)
146 return vec_uint_at(s->
levels, var);
149static inline unsigned var_reason(
solver_t *s,
unsigned var)
151 return vec_uint_at(s->
reasons, var);
153static inline int var_mark(
solver_t *s,
unsigned var)
155 return (
int)vec_char_at(s->
marks, var);
157static inline void var_set_mark(
solver_t *s,
unsigned var)
159 vec_char_assign(s->
marks, var, 1);
161static inline void var_clean_mark(
solver_t *s,
unsigned var)
163 vec_char_assign(s->
marks, var, 0);
168static inline unsigned lit_compl(
unsigned lit)
173static inline char lit_polarity(
unsigned lit)
175 return (
char)(
lit & 1);
178static inline char lit_value(
solver_t *s,
unsigned lit)
180 return lit_polarity(
lit) ^ vec_char_at(s->
assigns, lit2var(
lit));
183static inline unsigned lit_dlevel(
solver_t *s,
unsigned lit)
185 return vec_uint_at(s->
levels, lit2var(
lit));
188static inline unsigned lit_reason(
solver_t *s,
unsigned lit)
195static inline unsigned solver_check_limits(
solver_t *s)
202static inline unsigned solver_dlevel(
solver_t *s)
207static inline int solver_enqueue(
solver_t *s,
unsigned lit,
unsigned reason)
209 unsigned var = lit2var(
lit);
211 vec_char_assign(s->
assigns, var, lit_polarity(
lit));
212 vec_char_assign(s->
polarity, var, lit_polarity(
lit));
213 vec_uint_assign(s->
levels, var, solver_dlevel(s));
214 vec_uint_assign(s->
reasons, var, reason);
219static inline int solver_has_marks(
satoko_t *s)
221 return (
int)(s->
marks != NULL);
224static inline int solver_stop(
satoko_t *s)
232static inline struct clause *clause_fetch(
solver_t *s,
unsigned cref)
237static inline void clause_watch(
solver_t *s,
unsigned cref)
251static inline void clause_unwatch(
solver_t *s,
unsigned cref)
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_HEADER_START struct b_queue_t_ b_queue_t
char solver_search(solver_t *)
struct solver_t_ solver_t
unsigned solver_clause_create(solver_t *, vec_uint_t *, unsigned)
void solver_debug_check_clauses(solver_t *)
void solver_cancel_until(solver_t *, unsigned)
unsigned solver_propagate(solver_t *)
void solver_debug_check_trail(solver_t *)
void solver_debug_check(solver_t *, int)
typedefABC_NAMESPACE_HEADER_START struct heap_t_ heap_t
struct solver_t_ satoko_t
union clause::@075032140136325172206014200035176200302203305006 data[0]
vec_uint_t * final_conflict
unsigned n_assigns_simplify
clause_act_t clause_act_inc
struct satoko_stats stats
typedefABC_NAMESPACE_HEADER_START struct vec_char_t_ vec_char_t
typedefABC_NAMESPACE_HEADER_START struct vec_uint_t_ vec_uint_t
struct vec_wl_t_ vec_wl_t