|
Jerry James |
1232bba |
--- ./pico_ml_wrapper/src/camlpico.c.orig 2008-07-08 22:38:01.000000000 -0600
|
|
Jerry James |
1232bba |
+++ ./pico_ml_wrapper/src/camlpico.c 2013-07-31 16:11:40.000000000 -0600
|
|
Jerry James |
1232bba |
@@ -26,6 +26,8 @@
|
|
Jerry James |
1232bba |
#include <caml/memory.h>
|
|
Jerry James |
1232bba |
#include <picosat.h>
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
+static PicoSAT *my_picosat;
|
|
Jerry James |
1232bba |
+
|
|
Jerry James |
1232bba |
/* the methods comment were directly taken from 'picosat.h' */
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
CAMLprim value unknown(){ return Val_int(PICOSAT_UNKNOWN);}
|
|
Jerry James |
1232bba |
@@ -35,13 +37,14 @@ CAMLprim value unsatisfiable(){ return V
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
CAMLprim value init(value unit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- picosat_init();
|
|
Jerry James |
1232bba |
+ my_picosat = picosat_init();
|
|
Jerry James |
1232bba |
return Val_unit;
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
CAMLprim value reset(value unit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- picosat_reset();
|
|
Jerry James |
1232bba |
+ picosat_reset(my_picosat);
|
|
Jerry James |
1232bba |
+ my_picosat = NULL;
|
|
Jerry James |
1232bba |
return Val_unit;
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
@@ -55,7 +58,7 @@ CAMLprim value reset(value unit)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value set_seed(value seed)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- picosat_set_seed(Unsigned_int_val(seed));
|
|
Jerry James |
1232bba |
+ picosat_set_seed(my_picosat, Unsigned_int_val(seed));
|
|
Jerry James |
1232bba |
return Val_unit;
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
@@ -65,7 +68,7 @@ CAMLprim value set_seed(value seed)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value enable_trace(value unit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- picosat_enable_trace_generation();
|
|
Jerry James |
1232bba |
+ picosat_enable_trace_generation(my_picosat);
|
|
Jerry James |
1232bba |
return Val_unit;
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
@@ -76,7 +79,7 @@ CAMLprim value enable_trace(value unit)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value adjust(value n)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- picosat_adjust(Int_val(n));
|
|
Jerry James |
1232bba |
+ picosat_adjust(my_picosat, Int_val(n));
|
|
Jerry James |
1232bba |
return Val_unit;
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
@@ -85,7 +88,7 @@ CAMLprim value adjust(value n)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value second(value unit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- return caml_copy_double(picosat_seconds());
|
|
Jerry James |
1232bba |
+ return caml_copy_double(picosat_seconds(my_picosat));
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
/*------------------------------------------------------------------------*/
|
|
Jerry James |
1232bba |
@@ -95,7 +98,7 @@ CAMLprim value second(value unit)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value add(value i)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- picosat_add(Int_val(i));
|
|
Jerry James |
1232bba |
+ picosat_add(my_picosat, Int_val(i));
|
|
Jerry James |
1232bba |
return Val_unit;
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
@@ -106,7 +109,7 @@ CAMLprim value add(value i)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value assume(value i)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- picosat_assume(Int_val(i));
|
|
Jerry James |
1232bba |
+ picosat_assume(my_picosat, Int_val(i));
|
|
Jerry James |
1232bba |
return Val_unit;
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
@@ -117,7 +120,7 @@ CAMLprim value assume(value i)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value sat(value limit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- return Val_int(picosat_sat(Int_val(limit)));
|
|
Jerry James |
1232bba |
+ return Val_int(picosat_sat(my_picosat, Int_val(limit)));
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
/* After 'picosat_sat' was called and returned 'PICOSAT_SATISFIABLE', then
|
|
Jerry James |
1232bba |
@@ -127,7 +130,7 @@ CAMLprim value sat(value limit)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value deref(value lit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- return Val_int(picosat_deref(Int_val(lit)));
|
|
Jerry James |
1232bba |
+ return Val_int(picosat_deref(my_picosat, Int_val(lit)));
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
/* A cheap way of determining an over-approximation of a variable core is to
|
|
Jerry James |
1232bba |
@@ -138,7 +141,7 @@ CAMLprim value deref(value lit)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value usedlit(value lit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- return Val_int(picosat_usedlit(Int_val(lit)));
|
|
Jerry James |
1232bba |
+ return Val_int(picosat_usedlit(my_picosat, Int_val(lit)));
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
/*------------------------------------------------------------------------*/
|
|
Jerry James |
1232bba |
@@ -155,7 +158,7 @@ CAMLprim value usedlit(value lit)
|
|
Jerry James |
1232bba |
*/
|
|
Jerry James |
1232bba |
CAMLprim value corelit(value lit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
- return Val_int(picosat_corelit(Int_val(lit)));
|
|
Jerry James |
1232bba |
+ return Val_int(picosat_corelit(my_picosat, Int_val(lit)));
|
|
Jerry James |
1232bba |
}
|
|
Jerry James |
1232bba |
|
|
Jerry James |
1232bba |
//#include <stdio.h>
|
|
Jerry James |
1232bba |
@@ -165,7 +168,7 @@ value get_proof(value unit)
|
|
Jerry James |
1232bba |
{
|
|
Jerry James |
1232bba |
CAMLparam0();
|
|
Jerry James |
1232bba |
CAMLlocal1 (array);
|
|
Jerry James |
1232bba |
- int* proof = picosat_get_proof();
|
|
Jerry James |
1232bba |
+ int* proof = picosat_get_proof(my_picosat);
|
|
Jerry James |
1232bba |
int size = 0;
|
|
Jerry James |
1232bba |
while(proof[size] != EOP){
|
|
Jerry James |
1232bba |
size++;
|