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);
13 Predicate* allocPredicateTable(Table* table, UndefinedBehavior undefBehavior){
14 PredicateTable* This = ourmalloc(sizeof(PredicateTable));
15 GETPREDICATETYPE(This) = TABLEPRED;
17 This->undefinedbehavior=undefBehavior;
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);
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;
44 void deletePredicate(Predicate* This){
45 switch(GETPREDICATETYPE(This)) {
47 PredicateOperator * operpred=(PredicateOperator *) This;
48 deleteInlineArraySet(&operpred->domains);
55 //need to handle freeing array...