0e0238af2c1b04a12e06ab87baafbcbd8856df9f
[satune.git] / src / AST / predicate.c
1 #include "predicate.h"
2 #include "boolean.h"
3 #include "set.h"
4 #include "table.h"
5
6 Predicate *allocPredicateOperator(CompOp op, Set **domain, uint numDomain) {
7         PredicateOperator *This = ourmalloc(sizeof(PredicateOperator));
8         GETPREDICATETYPE(This) = OPERATORPRED;
9         initArrayInitSet(&This->domains, domain, numDomain);
10         This->op = op;
11         return &This->base;
12 }
13
14 Predicate *allocPredicateTable(Table *table, UndefinedBehavior undefBehavior) {
15         ASSERT(table->range == NULL);
16         PredicateTable *This = ourmalloc(sizeof(PredicateTable));
17         GETPREDICATETYPE(This) = TABLEPRED;
18         This->table = table;
19         This->undefinedbehavior = undefBehavior;
20         return &This->base;
21 }
22
23 void deletePredicate(Predicate *This) {
24         switch (GETPREDICATETYPE(This)) {
25         case OPERATORPRED: {
26                 PredicateOperator *operpred = (PredicateOperator *) This;
27                 deleteInlineArraySet(&operpred->domains);
28                 break;
29         }
30         case TABLEPRED: {
31                 break;
32         }
33         }
34         //need to handle freeing array...
35         ourfree(This);
36 }
37
38 bool evalPredicateOperator(PredicateOperator *This, uint64_t *inputs) {
39         switch (This->op) {
40         case EQUALS:
41                 return inputs[0] == inputs[1];
42         case LT:
43                 return inputs[0] < inputs[1];
44         case GT:
45                 return inputs[0] > inputs[1];
46         case LTE:
47                 return inputs[0] <= inputs[1];
48         case GTE:
49                 return inputs[0] >= inputs[1];
50         }
51         ASSERT(0);
52         return false;
53 }