Fix tuner issues
[satune.git] / src / AST / predicate.h
index 105e91bd315be90f56bf366ac8042b493377ffea..17e34d948c88eebe7516992dd472cfe2be9b988a 100644 (file)
@@ -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;
-       ArraySet domains;
 };
 
-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* 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