Add Const API to frontend
[satune.git] / src / AST / function.c
index 61e413b88ebdf1ce42553288b4a1a0495bdc5c29..20e57b0d008acbdb5ec314ffa582807398440eed 100644 (file)
@@ -3,10 +3,10 @@
 #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;
@@ -20,20 +20,22 @@ Function* allocFunctionTable (Table* table){
        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){