Blame csisat-picosat.patch

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++;