X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcsolver.h;h=c5c3b8d6fff90869b2be6338a3c0bcd3c477bfb1;hb=f774755b299ad524986c4bf628dbbed47a572a65;hp=15d5b453c8b697505ac40e22b4efe7b65cd03996;hpb=cfbb106cf7c1281029b012c47580c9f14df1014b;p=satune.git diff --git a/src/csolver.h b/src/csolver.h index 15d5b45..c5c3b8d 100644 --- a/src/csolver.h +++ b/src/csolver.h @@ -11,19 +11,24 @@ class CSolver { public: CSolver(); ~CSolver(); - + void resetSolver(); /** This function creates a set containing the elements passed in the array. */ Set *createSet(VarType type, uint64_t *elements, uint num); /** This function creates a set from lowrange to highrange (inclusive). */ Set *createRangeSet(VarType type, uint64_t lowrange, uint64_t highrange); + + bool itemExistInSet(Set *set, uint64_t item); VarType getSetVarType(Set *set); Element *createRangeVar(VarType type, uint64_t lowrange, uint64_t highrange); - /** This function creates a mutable set. */ + /** This function creates a mutable set. + * Note: You should use addItem for adding new item to Mutable sets, and + * at the end, you should call finalizeMutableSet! + */ MutableSet *createMutableSet(VarType type); @@ -52,6 +57,8 @@ public: Set *getElementRange (Element *element); + void mustHaveValue(Element *element); + BooleanEdge getBooleanTrue(); BooleanEdge getBooleanFalse(); @@ -134,6 +141,7 @@ public: void setUnSAT() { model_print("Setting UNSAT %%%%%%\n"); unsat = true; } bool isUnSAT() { return unsat; } + void printConstraint(BooleanEdge boolean); void printConstraints(); Vector *getOrders() { return &allOrders;} @@ -147,11 +155,17 @@ public: void replaceBooleanWithTrue(BooleanEdge bexpr); void replaceBooleanWithTrueNoRemove(BooleanEdge bexpr); + void replaceBooleanWithFalseNoRemove(BooleanEdge bexpr); void replaceBooleanWithFalse(BooleanEdge bexpr); void replaceBooleanWithBoolean(BooleanEdge oldb, BooleanEdge newb); CSolver *clone(); +// Set* addItemsToRange(Element* element, uint num, ...); void serialize(); + static CSolver *deserialize(const char *file); void autoTune(uint budget); + void inferFixedOrders(); + void inferFixedOrder(Order *order); + void setTuner(Tuner *_tuner) { tuner = _tuner; } long long getElapsedTime() { return elapsedTime; } @@ -163,7 +177,8 @@ public: private: void handleIFFTrue(BooleanLogic *bexpr, BooleanEdge child); void handleANDTrue(BooleanLogic *bexpr, BooleanEdge child); - + void handleFunction(ElementFunction * ef, BooleanEdge child); + //These two functions are helpers if the client has a pointer to a //Boolean object that we have since replaced BooleanEdge rewriteLogicalOperation(LogicOp op, BooleanEdge *array, uint asize);