return & This -> base;
}
-Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs){
+Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus){
BooleanPredicate* This = (BooleanPredicate*) ourmalloc(sizeof(BooleanPredicate));
GETBOOLEANTYPE(This)= PREDICATEOP;
This->predicate=predicate;
pushVectorASTNode(GETELEMENTPARENTS(inputs[i]), (ASTNode *)This);
}
initPredicateEncoding(&This->encoding, (Boolean *) This);
-
+ This->undefStatus = undefinedStatus;
return & This->base;
}
Predicate * predicate;
FunctionEncoding encoding;
ArrayElement inputs;
+ Boolean* undefStatus;
};
Boolean * allocBooleanVar(VarType t);
Boolean * allocBooleanOrder(Order * order, uint64_t first, uint64_t second);
-Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs);
+Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus);
Boolean * allocBooleanLogicArray(CSolver *solver, LogicOp op, Boolean ** array, uint asize);
void deleteBoolean(Boolean * This);
Set * domain[]={s, s};
Predicate *equals=createPredicateOperator(solver, EQUALS, domain, 2);
Element * inputs[]={e1, e2};
- Boolean * b=applyPredicate(solver, equals, inputs, 2);
+ Boolean* overflow = getBooleanVar(solver , 2);
+ Boolean * b=applyPredicate(solver, equals, inputs, 2, overflow);
addConstraint(solver, b);
uint64_t set2[] = {2, 3};
addTableEntry(solver, table, row4, 2, 2);
Function * f2 = completeTable(solver, table, IGNOREBEHAVIOR); //its range would be as same as s
- Boolean* overflow = getBooleanVar(solver , 2);
Element * e3 = applyFunction(solver, f1, inputs, 2, overflow);
Element * e4 = applyFunction(solver, f2, inputs, 2, overflow);
Set* domain2[] = {s,rangef1};
Predicate* equal2 = createPredicateOperator(solver, EQUALS, domain2, 2);
Element* inputs2 [] = {e4, e3};
- Boolean* pred = applyPredicate(solver, equal2, inputs2, 2);
+ Boolean* pred = applyPredicate(solver, equal2, inputs2, 2, overflow);
addConstraint(solver, pred);
if (startEncoding(solver)==1)
Set * domain[]={s1, s2};
Predicate *equals=createPredicateOperator(solver, EQUALS, domain, 2);
Element * inputs[]={e1, e2};
- Boolean *b=applyPredicate(solver, equals, inputs, 2);
+ Boolean *b=applyPredicate(solver, equals, inputs, 2, NULL);
addConstraint(solver, b);
if (startEncoding(solver)==1)
Set* deq[] = {s5,s4};
Predicate* gt = createPredicateOperator(solver, GT, deq, 2);
Element* inputs2 [] = {e7, e6};
- Boolean* pred = applyPredicate(solver, gt, inputs2, 2);
+ Boolean* pred = applyPredicate(solver, gt, inputs2, 2, overflow);
addConstraint(solver, pred);
if (startEncoding(solver)==1)
Set * domain2[]={s1, s3};
Predicate *lt=createPredicateOperator(solver, LT, domain2, 2);
Element * inputs2[]={e1, e2};
- Boolean *b=applyPredicate(solver, lt, inputs2, 2);
+ Boolean *b=applyPredicate(solver, lt, inputs2, 2, NULL);
addConstraint(solver, b);
if (startEncoding(solver)==1)
printf("e1=%llu e2=%llu\n", getElementValue(solver,e1), getElementValue(solver, e2));
return element;
}
-Boolean * applyPredicate(CSolver *This, Predicate * predicate, Element ** inputs, uint numInputs) {
- Boolean* boolean= allocBooleanPredicate(predicate, inputs, numInputs);
+Boolean * applyPredicate(CSolver *This, Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus) {
+ Boolean* boolean= allocBooleanPredicate(predicate, inputs, numInputs, undefinedStatus);
pushVectorBoolean(This->allBooleans, boolean);
return boolean;
}
/** This function applies a predicate to the Elements in its input. */
-Boolean * applyPredicate(CSolver *, Predicate * predicate, Element ** inputs, uint numInputs);
+Boolean * applyPredicate(CSolver *, Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus);
/** This function applies a logical operation to the Booleans in its input. */