Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/constraint_compiler
[satune.git] / src / csolver.h
index f2db838c409b7aa0557b941847a9c56421570cd0..3972f6c7c0f08ffa7cc85b8c157ea7b5fe9c90f9 100644 (file)
@@ -5,29 +5,31 @@
 #include "structs.h"
 
 struct CSolver {
-       VectorBoolean * constraint;
-        uint64_t uniqSec;
+       VectorBoolean * constraints;
+       VectorSet * sets;
+       VectorElement * elements;
 };
-       
+
 CSolver * allocCSolver();
 Set * createSet(CSolver *, VarType type, uint64_t * elements, uint num);
 Set * createRangeSet(CSolver *, VarType type, uint64_t lowrange, uint64_t highrange);
 MutableSet * createMutableSet(CSolver *, VarType type);
 
 void addItem(CSolver *, MutableSet * set, uint64_t element);
-int64_t createUniqueItem(CSolver *, MutableSet * set);
+uint64_t createUniqueItem(CSolver *, MutableSet * set);
 
 Element * getElementVar(CSolver *, Set * set);
-Boolean * getBooleanVar(CSolver *);
+Boolean * getBooleanVar(CSolver *, VarType type);
 
-Function * createFunctionOperator(CSolver *, enum ArithOp op, Set ** domain, Set * range, enum OverFlowBehavior overflowbehavior, Boolean * overflowstatus);
+Function * createFunctionOperator(CSolver *solver, enum ArithOp op, Set ** domain, uint numDomain, Set * range,
+        enum OverFlowBehavior overflowbehavior, Boolean * overflowstatus);
 //Does Not Overflow
-Function * createFunctionOperatorPure(CSolver *, enum ArithOp op);
-Predicate * createPredicateOperator(CSolver *, enum CompOp op, Set ** domain);
+//Function * createFunctionOperatorPure(CSolver *, enum ArithOp op);
+Predicate * createPredicateOperator(CSolver *solver, enum CompOp op, Set ** domain, uint numDomain);
 
-Table * createTable(CSolver *, Set **domains, Set * range);
-void addTableEntry(CSolver *, Element ** inputs, Element *result);
-Function * completeTable(CSolver *, struct Table *);
+Table * createTable(CSolver *solver, Set **domains, uint numDomain, Set * range);
+void addTableEntry(CSolver *solver, uint64_t* inputs, uint inputSize, uint64_t result);
+Function * completeTable(CSolver *, Table *);
 
 Element * applyFunction(CSolver *, Function * function, Element ** array);
 Boolean * applyPredicate(CSolver *, Predicate * predicate, Element ** inputs);