#include "set.h"
-Function* allocFunctionOperator( ArithOp op, Set ** domain, uint numDomain, Set * range,OverFlowBehavior overflowbehavior){
+Function* allocFunctionOperator(ArithOp op, Set ** domain, uint numDomain, Set * range, OverFlowBehavior overflowbehavior) {
FunctionOperator* This = (FunctionOperator*) ourmalloc(sizeof(FunctionOperator));
GETFUNCTIONTYPE(This)=OPERATORFUNC;
- allocInlineArrayInitSet(&This->domains, domain, numDomain);
+ initArrayInitSet(&This->domains, domain, numDomain);
This->op=op;
This->overflowbehavior = overflowbehavior;
This->range=range;
return &This->base;
}
-uint64_t applyFunctionOperator(FunctionOperator* func, uint64_t var1, uint64_t var2, bool* isInRange){
- uint64_t result = 0;
- switch( func->op){
+uint64_t applyFunctionOperator(FunctionOperator* This, uint numVals, uint64_t * values) {
+ ASSERT(numVals == 2);
+ switch(This->op){
case ADD:
- result = var1+ var2;
+ return values[0] + values[1];
break;
case SUB:
- result = var1 - var2;
+ return values[0] - values[1];
break;
default:
ASSERT(0);
}
- *isInRange = existsInSet(func->range, result);
- return result;
+}
+
+bool isInRangeFunction(FunctionOperator *This, uint64_t val) {
+ return existsInSet(This->range, val);
}
void deleteFunction(Function* This){