7 PredicateOperator::PredicateOperator(CompOp _op) : Predicate(OPERATORPRED), op(_op) {
10 PredicateTable::PredicateTable(Table *_table, UndefinedBehavior _undefBehavior) : Predicate(TABLEPRED), table(_table), undefinedbehavior(_undefBehavior) {
13 bool PredicateOperator::evalPredicateOperator(uint64_t *inputs) {
16 return inputs[0] == inputs[1];
18 return inputs[0] < inputs[1];
20 return inputs[0] > inputs[1];
22 return inputs[0] <= inputs[1];
24 return inputs[0] >= inputs[1];
30 Predicate *PredicateOperator::clone(CSolver *solver, CloneMap *map) {
31 Predicate *p = (Predicate *) map->get(this);
35 p = solver->createPredicateOperator(op);
40 Predicate *PredicateTable::clone(CSolver *solver, CloneMap *map) {
41 Predicate *p = (Predicate *) map->get(this);
45 p = solver->createPredicateTable(table->clone(solver, map), undefinedbehavior);
50 void PredicateTable::serialize(Serializer *serializer) {
51 if (serializer->isSerialized(this))
53 serializer->addObject(this);
55 table->serialize(serializer);
57 ASTNodeType type = PREDTABLETYPE;
58 serializer->mywrite(&type, sizeof(ASTNodeType));
59 PredicateTable *This = this;
60 serializer->mywrite(&This, sizeof(PredicateTable *));
61 serializer->mywrite(&table, sizeof(Table *));
62 serializer->mywrite(&undefinedbehavior, sizeof(UndefinedBehavior));
65 void PredicateTable::print() {
66 model_print("{PredicateTable:\n");
71 void PredicateOperator::serialize(Serializer *serializer) {
72 if (serializer->isSerialized(this))
74 serializer->addObject(this);
76 ASTNodeType type = PREDOPERTYPE;
77 serializer->mywrite(&type, sizeof(ASTNodeType));
78 PredicateOperator *This = this;
79 serializer->mywrite(&This, sizeof(PredicateOperator *));
80 serializer->mywrite(&op, sizeof(CompOp));
83 void PredicateOperator::print() {
84 const char *names[] = {"==", "<", ">", "<=", ">="};
86 model_print("PredicateOperator: %s\n", names[(int)op]);