edits
[satune.git] / src / AST / function.cc
index 3a32139a03f1edb5acc1ab8fd8e4252968291d7f..c63becf15adc54eada5b26105ebedbd923a8a897 100644 (file)
@@ -3,27 +3,16 @@
 #include "set.h"
 
 
-Function *allocFunctionOperator(ArithOp op, Set **domain, uint numDomain, Set *range, OverFlowBehavior overflowbehavior) {
-       FunctionOperator *This = (FunctionOperator *) ourmalloc(sizeof(FunctionOperator));
-       GETFUNCTIONTYPE(This) = OPERATORFUNC;
-       initArrayInitSet(&This->domains, domain, numDomain);
-       This->op = op;
-       This->overflowbehavior = overflowbehavior;
-       This->range = range;
-       return &This->base;
+FunctionOperator::FunctionOperator(ArithOp _op, Set **domain, uint numDomain, Set *_range, OverFlowBehavior _overflowbehavior) : Function(OPERATORFUNC), op(_op), range(_range), overflowbehavior(_overflowbehavior) {
+       initArrayInitSet(&domains, domain, numDomain);
 }
 
-Function *allocFunctionTable (Table *table, UndefinedBehavior undefBehavior) {
-       FunctionTable *This = (FunctionTable *) ourmalloc(sizeof(FunctionTable));
-       GETFUNCTIONTYPE(This) = TABLEFUNC;
-       This->table = table;
-       This->undefBehavior = undefBehavior;
-       return &This->base;
+FunctionTable::FunctionTable (Table *_table, UndefinedBehavior _undefBehavior) : Function(TABLEFUNC), table(_table), undefBehavior(_undefBehavior) {
 }
 
-uint64_t applyFunctionOperator(FunctionOperator *This, uint numVals, uint64_t *values) {
+uint64_t FunctionOperator::applyFunctionOperator(uint numVals, uint64_t *values) {
        ASSERT(numVals == 2);
-       switch (This->op) {
+       switch (op) {
        case ADD:
                return values[0] + values[1];
                break;
@@ -35,19 +24,10 @@ uint64_t applyFunctionOperator(FunctionOperator *This, uint numVals, uint64_t *v
        }
 }
 
-bool isInRangeFunction(FunctionOperator *This, uint64_t val) {
-       return existsInSet(This->range, val);
+bool FunctionOperator::isInRangeFunction(uint64_t val) {
+       return range->exists(val);
 }
 
-void deleteFunction(Function *This) {
-       switch (GETFUNCTIONTYPE(This)) {
-       case TABLEFUNC:
-               break;
-       case OPERATORFUNC:
-               deleteInlineArraySet(&((FunctionOperator *) This)->domains);
-               break;
-       default:
-               ASSERT(0);
-       }
-       ourfree(This);
+FunctionOperator::~FunctionOperator() {
+       deleteInlineArraySet(&domains);
 }