1 /* C wrapper code for precosat */
3 #include "precosat_wrap.h"
8 struct precosat_solver
{
9 PrecoSat::Solver
* solver
;
13 init_precosat_solver(struct precosat_solver
*s
)
15 /* default initialization, similar to what precosatmain.cc does */
16 /* s->solver->set("verbose", 2); */
17 /* s->solver->set("print", 1); */
21 struct precosat_solver
*
22 alloc_precosat_solver(int numvars
)
24 struct precosat_solver
*res
= (struct precosat_solver
*) malloc(sizeof(struct precosat_solver
));
26 res
->solver
=new PrecoSat::Solver();
27 res
->solver
->init(numvars
);
28 init_precosat_solver(res
);
34 free_precosat_solver(struct precosat_solver
*s
)
36 s
->solver
->reset(); /* de-allocation not done in destructor...*/
43 precosat_set_option(struct precosat_solver
*s
, const char* optionname
, int val
)
45 return s
->solver
->set(optionname
,val
);
49 precosat_solve(struct precosat_solver
*s
)
54 res
=s
->solver
->solve(INT_MAX
);
56 if(res
>0 && s
->solver
->satisfied())
59 return PRECOSAT_UNSAT
;
61 return PRECOSAT_ERROR
;
65 precosat_sol_val(struct precosat_solver
*s
, int varidx
)
67 return s
->solver
->val(varidx
);
71 precosat_add_var_to_clause(struct precosat_solver
*s
, int varid
)
73 s
->solver
->add(varid
);
77 precosat_set_numvars(struct precosat_solver
*s
, int numvars
)
79 while (numvars
> s
->solver
->getMaxVar())