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