#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