7 PredicateOperator::PredicateOperator(CompOp _op, Set **domain, uint numDomain) : Predicate(OPERATORPRED), domains(domain, numDomain), 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 Set *array[domains.getSize()];
36 for (uint i = 0; i < domains.getSize(); i++)
37 array[i] = domains.get(i)->clone(solver, map);
39 p = solver->createPredicateOperator(op, array, domains.getSize());
44 Predicate *PredicateTable::clone(CSolver *solver, CloneMap *map) {
45 Predicate *p = (Predicate *) map->get(this);
49 p = solver->createPredicateTable(table->clone(solver, map), undefinedbehavior);
54 void PredicateTable::serialize(Serializer *serializer) {
55 if (serializer->isSerialized(this))
57 serializer->addObject(this);
59 table->serialize(serializer);
61 ASTNodeType type = PREDTABLETYPE;
62 serializer->mywrite(&type, sizeof(ASTNodeType));
63 PredicateTable *This = this;
64 serializer->mywrite(&This, sizeof(PredicateTable *));
65 serializer->mywrite(&table, sizeof(Table *));
66 serializer->mywrite(&undefinedbehavior, sizeof(UndefinedBehavior));
69 void PredicateTable::print() {
70 model_print("{PredicateTable:\n");
75 void PredicateOperator::serialize(Serializer *serializer) {
76 if (serializer->isSerialized(this))
78 serializer->addObject(this);
80 uint size = domains.getSize();
81 for (uint i = 0; i < size; i++) {
82 Set *domain = domains.get(i);
83 domain->serialize(serializer);
86 ASTNodeType type = PREDOPERTYPE;
87 serializer->mywrite(&type, sizeof(ASTNodeType));
88 PredicateOperator *This = this;
89 serializer->mywrite(&This, sizeof(PredicateOperator *));
90 serializer->mywrite(&op, sizeof(CompOp));
91 serializer->mywrite(&size, sizeof(uint));
92 for (uint i = 0; i < size; i++) {
93 Set *domain = domains.get(i);
94 serializer->mywrite(&domain, sizeof(Set *));
98 void PredicateOperator::print() {
99 const char *names[] = {"==", "<", ">", "<=", ">="};
101 model_print("PredicateOperator: %s\n", names[(int)op]);