X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FAST%2Fpredicate.h;h=17e34d948c88eebe7516992dd472cfe2be9b988a;hb=e1360c75a71486a0de8c1b30a2a8cd2877902416;hp=c6dd02b6fcb1d27c68ff4be9d65b703432f3aba7;hpb=1d6dbb6b9bfc8a2ebfbb29f9bcda4b4127909b00;p=satune.git diff --git a/src/AST/predicate.h b/src/AST/predicate.h index c6dd02b..17e34d9 100644 --- a/src/AST/predicate.h +++ b/src/AST/predicate.h @@ -3,28 +3,42 @@ #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); + bool evalPredicateOperator(uint64_t *inputs); + Predicate *clone(CSolver *solver, CloneMap *map); + virtual void serialize(Serializer *serializer); + virtual void print(); + CompOp getOp() {return op;} + CMEMALLOC; +private: CompOp op; - Set ** domains; - uint numDomains; }; -struct PredicateTable { - Predicate base; - Table* table; +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* allocPredicate(CompOp op, Set ** domain, uint numDomain); -void deletePredicate(Predicate* predicate); #endif