Edits
[satune.git] / src / csolver.h
index 42a62160b8eaf59fd4e9c8df9cf82f1d932a2e87..2730a934164a7d267bdf26d47f78576671c8c52a 100644 (file)
@@ -5,6 +5,7 @@
 #include "corestructs.h"
 #include "asthash.h"
 #include "solver_interface.h"
+#include "common.h"
 
 class CSolver {
 public:
@@ -18,6 +19,8 @@ public:
 
        Set *createRangeSet(VarType type, uint64_t lowrange, uint64_t highrange);
 
+       VarType getSetVarType(Set *set);
+
        Element *createRangeVar(VarType type, uint64_t lowrange, uint64_t highrange);
 
        /** This function creates a mutable set. */
@@ -35,6 +38,11 @@ public:
 
        uint64_t createUniqueItem(MutableSet *set);
 
+       /**
+        * Freeze and finalize the mutableSet ...
+        */
+       void finalizeMutableSet(MutableSet *set);
+
        /** This function creates an element variable over a set. */
 
        Element *getElementVar(Set *set);
@@ -42,6 +50,8 @@ public:
        /** This function creates an element constrant. */
        Element *getElementConst(VarType type, uint64_t value);
 
+       Set *getElementRange (Element *element);
+
        BooleanEdge getBooleanTrue();
 
        BooleanEdge getBooleanFalse();
@@ -121,16 +131,18 @@ public:
        bool isTrue(BooleanEdge b);
        bool isFalse(BooleanEdge b);
 
-       void setUnSAT() { unsat = true; }
-
+       void setUnSAT() { model_print("Setting UNSAT %%%%%%\n"); unsat = true; }
        bool isUnSAT() { return unsat; }
 
+       void printConstraint(BooleanEdge boolean);
+       void printConstraints();
+
        Vector<Order *> *getOrders() { return &allOrders;}
-       HashsetOrder * getActiveOrders() { return &activeOrders;}
+       HashsetOrder *getActiveOrders() { return &activeOrders;}
 
        Tuner *getTuner() { return tuner; }
 
-       SetIteratorBooleanEdge * getConstraints() { return constraints.iterator(); }
+       SetIteratorBooleanEdge *getConstraints() { return constraints.iterator(); }
 
        SATEncoder *getSATEncoder() {return satEncoder;}
 
@@ -179,7 +191,7 @@ private:
        Vector<Order *> allOrders;
 
        HashsetOrder activeOrders;
-       
+
        /** This is a vector of all function structs that we have allocated. */
        Vector<Function *> allFunctions;