Minor formatting issues
[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         allocInlineArrayInitSet(&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 // BRIAN: REVISIT
22 void getEqualitySetIntersection(PredicateOperator* This, uint* size, uint64_t* result){
23         ASSERT( This->op == EQUALS);
24         //make sure equality has 2 operands
25         ASSERT(getSizeArraySet( &This->domains) == 2);
26         *size=0;
27         VectorInt* mems1 = getArraySet(&This->domains, 0)->members; 
28         uint size1 = getSizeVectorInt(mems1);
29         VectorInt* mems2 = getArraySet(&This->domains, 1)->members;
30         uint size2 = getSizeVectorInt(mems2);
31         //FIXME:This isn't efficient, if we a hashset datastructure for Set, we
32         // can reduce it to O(n), but for now .... HG
33         for(uint i=0; i<size1; i++){
34                 uint64_t tmp= getVectorInt(mems1, i);
35                 for(uint j=0; j<size2; j++){
36                         if(tmp == getVectorInt(mems2, j)){
37                                 result[(*size)++]=tmp;
38                                 break;
39                         }
40                 }
41         }
42 }
43
44 void deletePredicate(Predicate* This){
45         switch(GETPREDICATETYPE(This)) {
46         case OPERATORPRED: {
47                 PredicateOperator * operpred=(PredicateOperator *) This;
48                 deleteInlineArraySet(&operpred->domains);
49                 break;
50         }
51         case TABLEPRED: {
52                 break;
53         }
54         }
55         //need to handle freeing array...
56         ourfree(This);
57 }
58