X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satune.git;a=blobdiff_plain;f=src%2Fcsolver.c;h=d90304431634c30faf0d4fbfad73dd81f6af2743;hp=4c20e33538c658d6ca17b92d98370ee0492f5f32;hb=0073b37bd741b59fe79857958d8276fc9128db0b;hpb=15207e1ea262b3cbd01e857db7532a131274edce diff --git a/src/csolver.c b/src/csolver.c index 4c20e33..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)); @@ -49,7 +50,7 @@ void deleteSolver(CSolver *This) { deleteTable(getVectorTable(This->allTables, i)); } deleteVectorTable(This->allTables); - + size=getSizeVectorPredicate(This->allPredicates); for(uint i=0;iallPredicates, i)); @@ -61,7 +62,7 @@ void deleteSolver(CSolver *This) { deleteOrder(getVectorOrder(This->allOrders, i)); } deleteVectorOrder(This->allOrders); - + size=getSizeVectorFunction(This->allFunctions); for(uint i=0;iallFunctions, i)); @@ -111,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; } @@ -129,29 +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) { - Element* element= allocElementFunction(function,array,numArrays,overflowstatus); - pushVectorElement(solver->allElements, element); - return element; + Element* element= allocElementFunction(function,array,numArrays,overflowstatus); + pushVectorElement(solver->allElements, element); + return element; } Boolean * applyPredicate(CSolver *solver, Predicate * predicate, Element ** inputs, uint numInputs) { - Boolean* boolean= allocBooleanPredicate(predicate, inputs, numInputs); - pushVectorBoolean(solver->allBooleans, boolean); - return boolean; + Boolean* boolean= allocBooleanPredicate(predicate, inputs, numInputs); + pushVectorBoolean(solver->allBooleans, boolean); + return boolean; } Boolean * applyLogicalOperation(CSolver *solver, LogicOp op, Boolean ** array, uint asize) { - return allocBooleanLogicArray(solver, op, array, asize); + return allocBooleanLogicArray(solver, op, array, asize); } void addBoolean(CSolver *This, Boolean * constraint) { @@ -169,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); +}