ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
cadical_ccadical.cpp
Go to the documentation of this file.
1#include "global.h"
2
3#include "cadical.hpp"
4
5#include <cstdlib>
6#include <cstring>
7
9
10namespace CaDiCaL {
11
13
15 struct {
16 void *state;
17 int (*function) (void *);
19
20 struct {
21 void *state;
24 void (*function) (void *, int *);
26
27 bool terminate () {
28 if (!terminator.function)
29 return false;
30 return terminator.function (terminator.state);
31 }
32
33 bool learning (int size) {
34 if (!learner.function)
35 return false;
36 return size <= learner.max_length;
37 }
38
39 void learn (int lit) {
40 if (learner.end_clause == learner.capacity_clause) {
41 size_t count = learner.end_clause - learner.begin_clause;
42 size_t size = count ? 2 * count : 1;
43 learner.begin_clause =
44 (int *) realloc (learner.begin_clause, size * sizeof (int));
45 learner.end_clause = learner.begin_clause + count;
46 learner.capacity_clause = learner.begin_clause + size;
47 }
48 *learner.end_clause++ = lit;
49 if (lit)
50 return;
51 learner.function (learner.state, learner.begin_clause);
52 learner.end_clause = learner.begin_clause;
53 }
54
55 Wrapper () : solver (new Solver ()) {
56 memset (&terminator, 0, sizeof terminator);
57 memset (&learner, 0, sizeof learner);
58 }
59
61 terminator.function = 0;
62 if (learner.begin_clause)
63 free (learner.begin_clause);
64 delete solver;
65 }
66};
67
68} // namespace CaDiCaL
69
71
72#include "ccadical.h"
73
75
76using namespace CaDiCaL;
77
78const char *ccadical_signature (void) { return Solver::signature (); }
79
80CCaDiCaL *ccadical_init (void) { return (CCaDiCaL *) new Wrapper (); }
81
82void ccadical_release (CCaDiCaL *wrapper) { delete (Wrapper *) wrapper; }
83
84void ccadical_constrain (CCaDiCaL *wrapper, int lit) {
85 ((Wrapper *) wrapper)->solver->constrain (lit);
86}
87
89 return ((Wrapper *) wrapper)->solver->constraint_failed ();
90}
91
92void ccadical_set_option (CCaDiCaL *wrapper, const char *name, int val) {
93 ((Wrapper *) wrapper)->solver->set (name, val);
94}
95
96void ccadical_limit (CCaDiCaL *wrapper, const char *name, int val) {
97 ((Wrapper *) wrapper)->solver->limit (name, val);
98}
99
100int ccadical_get_option (CCaDiCaL *wrapper, const char *name) {
101 return ((Wrapper *) wrapper)->solver->get (name);
102}
103
104void ccadical_add (CCaDiCaL *wrapper, int lit) {
105 ((Wrapper *) wrapper)->solver->add (lit);
106}
107
108void ccadical_assume (CCaDiCaL *wrapper, int lit) {
109 ((Wrapper *) wrapper)->solver->assume (lit);
110}
111
112int ccadical_solve (CCaDiCaL *wrapper) {
113 return ((Wrapper *) wrapper)->solver->solve ();
114}
115
117 return ((Wrapper *) wrapper)->solver->simplify ();
118}
119
120int ccadical_val (CCaDiCaL *wrapper, int lit) {
121 return ((Wrapper *) wrapper)->solver->val (lit);
122}
123
124int ccadical_failed (CCaDiCaL *wrapper, int lit) {
125 return ((Wrapper *) wrapper)->solver->failed (lit);
126}
127
129 ((Wrapper *) wrapper)->solver->statistics ();
130}
131
133 ((Wrapper *) wrapper)->solver->terminate ();
134}
135
136int64_t ccadical_active (CCaDiCaL *wrapper) {
137 return ((Wrapper *) wrapper)->solver->active ();
138}
139
140int64_t ccadical_irredundant (CCaDiCaL *wrapper) {
141 return ((Wrapper *) wrapper)->solver->irredundant ();
142}
143
144int ccadical_fixed (CCaDiCaL *wrapper, int lit) {
145 return ((Wrapper *) wrapper)->solver->fixed (lit);
146}
147
148void ccadical_set_terminate (CCaDiCaL *ptr, void *state,
149 int (*terminate) (void *)) {
150 Wrapper *wrapper = (Wrapper *) ptr;
151 wrapper->terminator.state = state;
152 wrapper->terminator.function = terminate;
153 if (terminate)
154 wrapper->solver->connect_terminator (wrapper);
155 else
156 wrapper->solver->disconnect_terminator ();
157}
158
159void ccadical_set_learn (CCaDiCaL *ptr, void *state, int max_length,
160 void (*learn) (void *state, int *clause)) {
161 Wrapper *wrapper = (Wrapper *) ptr;
162 wrapper->learner.state = state;
163 wrapper->learner.max_length = max_length;
164 wrapper->learner.function = learn;
165 if (learn)
166 wrapper->solver->connect_learner (wrapper);
167 else
168 wrapper->solver->disconnect_learner ();
169}
170
171void ccadical_freeze (CCaDiCaL *ptr, int lit) {
172 ((Wrapper *) ptr)->solver->freeze (lit);
173}
174
175void ccadical_melt (CCaDiCaL *ptr, int lit) {
176 ((Wrapper *) ptr)->solver->melt (lit);
177}
178
179int ccadical_frozen (CCaDiCaL *ptr, int lit) {
180 return ((Wrapper *) ptr)->solver->frozen (lit);
181}
182
183int ccadical_trace_proof (CCaDiCaL *ptr, FILE *file, const char *path) {
184 return ((Wrapper *) ptr)->solver->trace_proof (file, path);
185}
186
188 ((Wrapper *) ptr)->solver->close_proof_trace ();
189}
190
192 ((Wrapper *) ptr)->solver->conclude ();
193}
194
196 return ((Wrapper *) ptr)->solver->vars ();
197}
198
199int ccadical_reserve_difference (CCaDiCaL *ptr, int number_of_vars) {
200 return ((Wrapper *) ptr)->solver->reserve_difference (number_of_vars);
201}
202
203void ccadical_reserve(CCaDiCaL *ptr, int min_max_var) {
204 ((Wrapper *) ptr)->solver->reserve(min_max_var);
205}
206
208 return ((Wrapper *) ptr)->solver->inconsistent ();
209}
210
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
void ccadical_set_terminate(CCaDiCaL *ptr, void *state, int(*terminate)(void *))
int ccadical_constraint_failed(CCaDiCaL *wrapper)
void ccadical_terminate(CCaDiCaL *wrapper)
int ccadical_trace_proof(CCaDiCaL *ptr, FILE *file, const char *path)
void ccadical_close_proof(CCaDiCaL *ptr)
void ccadical_assume(CCaDiCaL *wrapper, int lit)
void ccadical_set_learn(CCaDiCaL *ptr, void *state, int max_length, void(*learn)(void *state, int *clause))
int ccadical_solve(CCaDiCaL *wrapper)
void ccadical_constrain(CCaDiCaL *wrapper, int lit)
void ccadical_reserve(CCaDiCaL *ptr, int min_max_var)
int ccadical_frozen(CCaDiCaL *ptr, int lit)
int ccadical_reserve_difference(CCaDiCaL *ptr, int number_of_vars)
void ccadical_print_statistics(CCaDiCaL *wrapper)
int ccadical_get_option(CCaDiCaL *wrapper, const char *name)
void ccadical_release(CCaDiCaL *wrapper)
int ccadical_fixed(CCaDiCaL *wrapper, int lit)
int ccadical_is_inconsistent(CCaDiCaL *ptr)
int64_t ccadical_irredundant(CCaDiCaL *wrapper)
int64_t ccadical_active(CCaDiCaL *wrapper)
int ccadical_vars(CCaDiCaL *ptr)
void ccadical_conclude(CCaDiCaL *ptr)
int ccadical_val(CCaDiCaL *wrapper, int lit)
void ccadical_freeze(CCaDiCaL *ptr, int lit)
void ccadical_add(CCaDiCaL *wrapper, int lit)
int ccadical_simplify(CCaDiCaL *wrapper)
const char * ccadical_signature(void)
void ccadical_limit(CCaDiCaL *wrapper, const char *name, int val)
void ccadical_melt(CCaDiCaL *ptr, int lit)
CCaDiCaL * ccadical_init(void)
void ccadical_set_option(CCaDiCaL *wrapper, const char *name, int val)
int ccadical_failed(CCaDiCaL *wrapper, int lit)
typedefABC_NAMESPACE_HEADER_START struct CCaDiCaL CCaDiCaL
Definition ccadical.h:15
void connect_learner(Learner *learner)
static const char * signature()
void connect_terminator(Terminator *terminator)
char * name
Definition main.h:24
int lit
Definition satVec.h:130
bool learning(int size)
int(* function)(void *)
struct CaDiCaL::Wrapper::@141235032232154027043210372131361323260375365300 learner
struct CaDiCaL::Wrapper::@153037360162222217302235253026335132324125226210 terminator
Definition file.h:23
char * memset()
VOID_HACK free()
char * realloc()