X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcsolver.c;h=d90304431634c30faf0d4fbfad73dd81f6af2743;hb=0073b37bd741b59fe79857958d8276fc9128db0b;hp=7a9d1e0d2870ce3c87d4adf828fc9665655af3a4;hpb=c507619d06bc6fbddc5fc26016be9bb47daa0ae0;p=satune.git diff --git a/src/csolver.c b/src/csolver.c index 7a9d1e0..d903044 100644 --- a/src/csolver.c +++ b/src/csolver.c @@ -7,6 +7,7 @@ #include "order.h" #include "table.h" #include "function.h" +#include "satencoder.h" CSolver * allocCSolver() { CSolver * tmp=(CSolver *) ourmalloc(sizeof(CSolver)); @@ -30,33 +31,38 @@ void deleteSolver(CSolver *This) { for(uint i=0;iallBooleans, i)); } - deleteVectorBoolean(This->allBooleans); size=getSizeVectorSet(This->allSets); for(uint i=0;iallSets, i)); } - deleteVectorSet(This->allSets); size=getSizeVectorElement(This->allElements); for(uint i=0;iallElements, i)); } + deleteVectorElement(This->allElements); + size=getSizeVectorTable(This->allTables); for(uint i=0;iallTables, i)); } + deleteVectorTable(This->allTables); + size=getSizeVectorPredicate(This->allPredicates); for(uint i=0;iallPredicates, i)); } + deleteVectorPredicate(This->allPredicates); + size=getSizeVectorOrder(This->allOrders); for(uint i=0;iallOrders, i)); } deleteVectorOrder(This->allOrders); + size=getSizeVectorFunction(This->allFunctions); for(uint i=0;iallFunctions, i)); @@ -94,7 +100,7 @@ uint64_t createUniqueItem(CSolver *solver, MutableSet * set) { } Element * getElementVar(CSolver *This, Set * set) { - Element * element=allocElement(set); + Element * element=allocElementSet(set); pushVectorElement(This->allElements, element); return element; } @@ -106,13 +112,13 @@ Boolean * getBooleanVar(CSolver *solver, VarType type) { } 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; + Function* function = allocFunctionOperator(op, domain, numDomain, range, overflowbehavior); + pushVectorFunction(solver->allFunctions, function); + return function; } Predicate * createPredicateOperator(CSolver *solver, CompOp op, Set ** domain, uint numDomain) { - Predicate* predicate= allocPredicate(op, domain,numDomain); + Predicate* predicate= allocPredicateOperator(op, domain,numDomain); pushVectorPredicate(solver->allPredicates, predicate); return predicate; } @@ -124,25 +130,29 @@ Table * createTable(CSolver *solver, Set **domains, uint numDomain, Set * range) } void addTableEntry(CSolver *solver, Table* table, uint64_t* inputs, uint inputSize, uint64_t result) { - addNewTableEntry(table,inputs, inputSize,result); + addNewTableEntry(table,inputs, inputSize,result); } Function * completeTable(CSolver *solver, Table * table) { - Function* function = allocFunctionTable(table); - pushVectorFunction(solver->allFunctions,function); - return function; + Function* function = allocFunctionTable(table); + pushVectorFunction(solver->allFunctions,function); + return function; } Element * applyFunction(CSolver *solver, Function * function, Element ** array, uint numArrays, Boolean * overflowstatus) { - return NULL; + Element* element= allocElementFunction(function,array,numArrays,overflowstatus); + pushVectorElement(solver->allElements, element); + return element; } Boolean * applyPredicate(CSolver *solver, Predicate * predicate, Element ** inputs, uint numInputs) { - return NULL; + Boolean* boolean= allocBooleanPredicate(predicate, inputs, numInputs); + pushVectorBoolean(solver->allBooleans, boolean); + return boolean; } -Boolean * applyLogicalOperation(CSolver *solver, LogicOp op, Boolean ** array) { - return NULL; +Boolean * applyLogicalOperation(CSolver *solver, LogicOp op, Boolean ** array, uint asize) { + return allocBooleanLogicArray(solver, op, array, asize); } void addBoolean(CSolver *This, Boolean * constraint) { @@ -160,3 +170,14 @@ Boolean * orderConstraint(CSolver *solver, Order * order, uint64_t first, uint64 pushVectorBoolean(solver->allBooleans,constraint); return constraint; } + +void startEncoding(CSolver* solver){ + naiveEncodingDecision(solver); + SATEncoder* satEncoder = allocSATEncoder(); + encodeAllSATEncoder(solver, satEncoder); + int result= solveCNF(satEncoder->cnf); + model_print("sat_solver's result:%d\n", result); + //For now, let's just delete it, and in future for doing queries + //we may need it. + deleteSATEncoder(satEncoder); +}