X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FAST%2Ffunction.h;h=2d65f61a009d0e4d6d744b527bbb7aadf37edf21;hb=e1360c75a71486a0de8c1b30a2a8cd2877902416;hp=6b0cd134f4660663e4d59e24f959f9a42a6e0029;hpb=4646025e50b9fd4a754cb6b036c3166072e95d90;p=satune.git diff --git a/src/AST/function.h b/src/AST/function.h index 6b0cd13..2d65f61 100644 --- a/src/AST/function.h +++ b/src/AST/function.h @@ -3,30 +3,34 @@ #include "classlist.h" #include "mymemory.h" #include "ops.h" +#include "astops.h" #include "structs.h" -#define GETFUNCTIONTYPE(o) (((Function *)o)->type) - class Function { public: Function(FunctionType _type) : type(_type) {} FunctionType type; virtual ~Function() {} - virtual Function *clone(CSolver *solver, CloneMap *map); - MEMALLOC; + 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; - Array domains; Set *range; OverFlowBehavior overflowbehavior; - FunctionOperator(ArithOp op, Set **domain, uint numDomain, 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); - MEMALLOC; + virtual void serialize(Serializer *serialiezr); + virtual void print(); + Set *getRange() {return range;} + CMEMALLOC; }; class FunctionTable : public Function { @@ -35,7 +39,10 @@ public: UndefinedBehavior undefBehavior; FunctionTable (Table *table, UndefinedBehavior behavior); Function *clone(CSolver *solver, CloneMap *map); - MEMALLOC; + virtual void serialize(Serializer *serialiezr); + virtual void print(); + Set *getRange(); + CMEMALLOC; }; #endif