X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2Fcsolver.c;h=7a9d1e0d2870ce3c87d4adf828fc9665655af3a4;hp=7179222096c54ab17af4cb31b5f2ec50e74659b8;hb=c507619d06bc6fbddc5fc26016be9bb47daa0ae0;hpb=fc1dd990c4a5d55165ff08da878fbda71dee83cf diff --git a/src/csolver.c b/src/csolver.c index 7179222..7a9d1e0 100644 --- a/src/csolver.c +++ b/src/csolver.c @@ -6,6 +6,7 @@ #include "predicate.h" #include "order.h" #include "table.h" +#include "function.h" CSolver * allocCSolver() { CSolver * tmp=(CSolver *) ourmalloc(sizeof(CSolver)); @@ -15,6 +16,8 @@ CSolver * allocCSolver() { tmp->allElements=allocDefVectorElement(); tmp->allPredicates = allocDefVectorPredicate(); tmp->allTables = allocDefVectorTable(); + tmp->allOrders = allocDefVectorOrder(); + tmp->allFunctions = allocDefVectorFunction(); return tmp; } @@ -41,8 +44,24 @@ void deleteSolver(CSolver *This) { for(uint i=0;iallElements, i)); } - //FIXME: Freeing alltables and allpredicates - deleteVectorElement(This->allElements); + size=getSizeVectorTable(This->allTables); + for(uint i=0;iallTables, i)); + } + size=getSizeVectorPredicate(This->allPredicates); + for(uint i=0;iallPredicates, i)); + } + size=getSizeVectorOrder(This->allOrders); + for(uint i=0;iallOrders, i)); + } + deleteVectorOrder(This->allOrders); + size=getSizeVectorFunction(This->allFunctions); + for(uint i=0;iallFunctions, i)); + } + deleteVectorFunction(This->allFunctions); ourfree(This); } @@ -86,9 +105,10 @@ Boolean * getBooleanVar(CSolver *solver, VarType type) { return boolean; } -Function * createFunctionOperator(CSolver *solver, ArithOp op, Set ** domain, uint numDomain, Set * range, - OverFlowBehavior overflowbehavior) { - return NULL; +Function * createFunctionOperator(CSolver *solver, ArithOp op, Set ** domain, uint numDomain, Set * range,OverFlowBehavior overflowbehavior) { + Function* function = allocFunctionOperator(op, domain, numDomain, range, overflowbehavior); + pushVectorFunction(solver->allFunctions, function); + return function; } Predicate * createPredicateOperator(CSolver *solver, CompOp op, Set ** domain, uint numDomain) { @@ -108,14 +128,16 @@ void addTableEntry(CSolver *solver, Table* table, uint64_t* inputs, uint inputSi } Function * completeTable(CSolver *solver, Table * table) { - return NULL; + Function* function = allocFunctionTable(table); + pushVectorFunction(solver->allFunctions,function); + return function; } -Element * applyFunction(CSolver *solver, Function * function, Element ** array, Boolean * overflowstatus) { +Element * applyFunction(CSolver *solver, Function * function, Element ** array, uint numArrays, Boolean * overflowstatus) { return NULL; } -Boolean * applyPredicate(CSolver *solver, Predicate * predicate, Element ** inputs) { +Boolean * applyPredicate(CSolver *solver, Predicate * predicate, Element ** inputs, uint numInputs) { return NULL; } @@ -128,7 +150,9 @@ void addBoolean(CSolver *This, Boolean * constraint) { } Order * createOrder(CSolver *solver, OrderType type, Set * set) { - return allocOrder(type, set); + Order* order = allocOrder(type, set); + pushVectorOrder(solver->allOrders, order); + return order; } Boolean * orderConstraint(CSolver *solver, Order * order, uint64_t first, uint64_t second) {