#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;
}
}
-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);
}