X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FAST%2Fpredicate.h;h=812d4bda8ec4d4abb70915fb9d8ae98923b3abce;hb=bb457e194713776587cab5987fc418160b406e76;hp=ff4ee8ce48e9abb1bc179c9eb4c2dbcc5992f0e0;hpb=5f7ad155a72a38dda20e1ffd4e8bf8c7c1132251;p=satune.git diff --git a/src/AST/predicate.h b/src/AST/predicate.h index ff4ee8c..812d4bd 100644 --- a/src/AST/predicate.h +++ b/src/AST/predicate.h @@ -3,28 +3,43 @@ #include "classlist.h" #include "mymemory.h" #include "ops.h" +#include "astops.h" #include "structs.h" +#include "common.h" -#define GETPREDICATETYPE(o) (((Predicate *)(o))->type) - -struct Predicate { +class Predicate { +public: + Predicate(PredicateType _type) : type(_type) {} + virtual ~Predicate() {} + virtual Predicate *clone(CSolver *solver, CloneMap *map) {ASSERT(0); return NULL;} + virtual void serialize(Serializer *serializer) = 0; + virtual void print() = 0; PredicateType type; + CMEMALLOC; }; -struct PredicateOperator { - Predicate base; +class PredicateOperator : public Predicate { +public: + PredicateOperator(CompOp op, Set **domain, uint numDomain); + bool evalPredicateOperator(uint64_t *inputs); + Predicate *clone(CSolver *solver, CloneMap *map); + virtual void serialize(Serializer *serializer); + virtual void print(); + Array domains; + CompOp getOp() {return op;} + CMEMALLOC; +private: CompOp op; - ArraySet domains; }; -struct PredicateTable { - Predicate base; +class PredicateTable : public Predicate { +public: + PredicateTable(Table *table, UndefinedBehavior undefBehavior); + Predicate *clone(CSolver *solver, CloneMap *map); + virtual void serialize(Serializer *serializer); + virtual void print(); Table *table; UndefinedBehavior undefinedbehavior; + CMEMALLOC; }; - -Predicate *allocPredicateOperator(CompOp op, Set **domain, uint numDomain); -Predicate *allocPredicateTable(Table *table, UndefinedBehavior undefBehavior); -bool evalPredicateOperator(PredicateOperator *This, uint64_t *inputs); -void deletePredicate(Predicate *This); #endif