X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2Fcsolver.c;h=d440aadc593c1d8ce9ec0b4e0b846cc6f8d976aa;hb=c12192d653bb50ff7890aa395af19f34b85cde2b;hp=f9f1e1bd534e662975a9f1eae625a74a88228ace;hpb=7bceaeb6d5c94786f9986cf6b7129e8aab150003;p=satune.git diff --git a/src/csolver.c b/src/csolver.c index f9f1e1b..d440aad 100644 --- a/src/csolver.c +++ b/src/csolver.c @@ -108,6 +108,12 @@ Element * getElementVar(CSolver *This, Set * set) { return element; } +Element * getElementConst(CSolver *This, VarType type, uint64_t value) { + Element * element=allocElementConst(value, type); + pushVectorElement(This->allElements, element); + return element; +} + Boolean * getBooleanVar(CSolver *This, VarType type) { Boolean* boolean= allocBooleanVar(type); pushVectorBoolean(This->allBooleans, boolean); @@ -126,18 +132,28 @@ Predicate * createPredicateOperator(CSolver *This, CompOp op, Set ** domain, uin return predicate; } +Predicate * createPredicateTable(CSolver *This, Table* table, UndefinedBehavior behavior){ + Predicate* predicate = allocPredicateTable(table, behavior); + pushVectorPredicate(This->allPredicates, predicate); + return predicate; +} + Table * createTable(CSolver *This, Set **domains, uint numDomain, Set * range) { Table* table= allocTable(domains,numDomain,range); pushVectorTable(This->allTables, table); return table; } +Table * createTableForPredicate(CSolver *solver, Set **domains, uint numDomain){ + return createTable(solver, domains, numDomain, NULL); +} + void addTableEntry(CSolver *This, Table* table, uint64_t* inputs, uint inputSize, uint64_t result) { addNewTableEntry(table,inputs, inputSize,result); } -Function * completeTable(CSolver *This, Table * table) { - Function* function = allocFunctionTable(table); +Function * completeTable(CSolver *This, Table * table, UndefinedBehavior behavior) { + Function* function = allocFunctionTable(table, behavior); pushVectorFunction(This->allFunctions,function); return function; } @@ -149,7 +165,10 @@ Element * applyFunction(CSolver *This, Function * function, Element ** array, ui } Boolean * applyPredicate(CSolver *This, Predicate * predicate, Element ** inputs, uint numInputs) { - Boolean* boolean= allocBooleanPredicate(predicate, inputs, numInputs); + return applyPredicateTable(This, predicate, inputs, numInputs, NULL); +} +Boolean * applyPredicateTable(CSolver *This, Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus) { + Boolean* boolean= allocBooleanPredicate(predicate, inputs, numInputs, undefinedStatus); pushVectorBoolean(This->allBooleans, boolean); return boolean; } @@ -174,7 +193,7 @@ Boolean * orderConstraint(CSolver *This, Order * order, uint64_t first, uint64_t return constraint; } -void startEncoding(CSolver* This){ +int startEncoding(CSolver* This){ naiveEncodingDecision(This); SATEncoder* satEncoder = This->satEncoder; encodeAllSATEncoder(This, satEncoder); @@ -184,11 +203,14 @@ void startEncoding(CSolver* This){ model_print("%d, ", satEncoder->cnf->solver->solution[i]); } model_print("\n"); + return result; } uint64_t getElementValue(CSolver* This, Element* element){ switch(GETELEMENTTYPE(element)){ case ELEMSET: + case ELEMCONST: + case ELEMFUNCRETURN: return getElementValueSATTranslator(This, element); default: ASSERT(0); @@ -205,3 +227,8 @@ bool getBooleanValue( CSolver* This , Boolean* boolean){ } exit(-1); } + +HappenedBefore getOrderConstraintValue(CSolver* This, Order * order, uint64_t first, uint64_t second){ + return getOrderConstraintValueSATTranslator(This, order, first, second); +} +