Merging + fixing memory bugs
[satune.git] / src / AST / function.h
index 61a6148fb9a568d380a42e1d073a4096401e5a48..2d65f61a009d0e4d6d744b527bbb7aadf37edf21 100644 (file)
@@ -3,12 +3,46 @@
 #include "classlist.h"
 #include "mymemory.h"
 #include "ops.h"
+#include "astops.h"
 #include "structs.h"
-struct Function {
-       enum ArithOp op;
-       VectorSet* domains;
-       Set * range;
-       enum OverFlowBehavior overflowbehavior;
-       Table* table;
+
+class Function {
+public:
+       Function(FunctionType _type) : type(_type) {}
+       FunctionType type;
+       virtual ~Function() {}
+       virtual Function *clone(CSolver *solver, CloneMap *map) {ASSERT(0); return NULL;}
+       virtual void serialize(Serializer *serialiezr) = 0;
+       virtual void print() = 0;
+       virtual Set *getRange() = 0;
+       CMEMALLOC;
 };
+
+class FunctionOperator : public Function {
+public:
+       ArithOp op;
+       Set *range;
+       OverFlowBehavior overflowbehavior;
+       FunctionOperator(ArithOp op, Set *range, OverFlowBehavior overflowbehavior);
+       uint64_t applyFunctionOperator(uint numVals, uint64_t *values);
+       bool isInRangeFunction(uint64_t val);
+       Function *clone(CSolver *solver, CloneMap *map);
+       virtual void serialize(Serializer *serialiezr);
+       virtual void print();
+       Set *getRange() {return range;}
+       CMEMALLOC;
+};
+
+class FunctionTable : public Function {
+public:
+       Table *table;
+       UndefinedBehavior undefBehavior;
+       FunctionTable (Table *table, UndefinedBehavior behavior);
+       Function *clone(CSolver *solver, CloneMap *map);
+       virtual void serialize(Serializer *serialiezr);
+       virtual void print();
+       Set *getRange();
+       CMEMALLOC;
+};
+
 #endif