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