5 Predicate* allocPredicateOperator(CompOp op, Set ** domain, uint numDomain){
6 PredicateOperator* predicate = ourmalloc(sizeof(PredicateOperator));
7 GETPREDICATETYPE(predicate)=OPERATORPRED;
8 allocInlineArrayInitSet(&predicate->domains, domain, numDomain);
10 return &predicate->base;
13 Predicate* allocPredicateTable(Table* table, UndefinedBehavior undefBehavior){
14 PredicateTable* predicate = ourmalloc(sizeof(PredicateTable));
15 GETPREDICATETYPE(predicate) = TABLEPRED;
16 predicate->table=table;
17 predicate->undefinedbehavior=undefBehavior;
18 return &predicate->base;
21 void getEqualitySetIntersection(PredicateOperator* predicate, uint* size, uint64_t* result){
22 ASSERT( predicate->op == EQUALS);
23 //make sure equality has 2 operands
24 ASSERT(getSizeArraySet( &predicate->domains) == 2);
26 VectorInt* mems1 = getArraySet(&predicate->domains, 0)->members;
27 uint size1 = getSizeVectorInt(mems1);
28 VectorInt* mems2 = getArraySet(&predicate->domains, 1)->members;
29 uint size2 = getSizeVectorInt(mems2);
30 //FIXME:This isn't efficient, if we a hashset datastructure for Set, we
31 // can reduce it to O(n), but for now .... HG
32 for(uint i=0; i<size1; i++){
33 uint64_t tmp= getVectorInt(mems1, i);
34 for(uint j=0; j<size2; j++){
35 if(tmp == getVectorInt(mems2, j)){
36 result[(*size)++]=tmp;
44 void deletePredicate(Predicate* predicate){
45 switch(GETPREDICATETYPE(predicate)) {
47 PredicateOperator * operpred=(PredicateOperator *) predicate;
48 deleteInlineArraySet(&operpred->domains);
55 //need to handle freeing array...