Clean up Predicates
authorbdemsky <bdemsky@uci.edu>
Tue, 20 Jun 2017 20:26:59 +0000 (13:26 -0700)
committerbdemsky <bdemsky@uci.edu>
Tue, 20 Jun 2017 20:26:59 +0000 (13:26 -0700)
src/AST/boolean.h
src/AST/ops.h
src/AST/predicate.c
src/AST/predicate.h
src/classlist.h

index 9b7c121ba398fc36aaba9b98103db920c7b22ba9..3ec27e81f6a42ade900850d365f02abe2bdc8909 100644 (file)
@@ -41,12 +41,6 @@ struct BooleanPredicate{
     VectorElement* inputs;
 };
 
-struct TablePredicate{
-    BooleanPredicate predicate;
-    Table* table;
-};
-
-
 Boolean * allocBoolean(VarType t);
 Boolean * allocBooleanOrder(Order * order, uint64_t first, uint64_t second);
 Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs);
index 19decc296b7be53ec4780f44ac93f4c627542693..62083f7fb7ec7d26285606570c80d045529b92fb 100644 (file)
@@ -23,12 +23,18 @@ typedef enum OrderType OrderType;
 enum OverFlowBehavior {IGNORE, WRAPAROUND, FLAGFORCESOVERFLOW, OVERFLOWSETSFLAG, FLAGIFFOVERFLOW, NOOVERFLOW};
 typedef enum OverFlowBehavior OverFlowBehavior;
 
+enum UndefinedBehavior {IGNOREBEHAVIOR, FLAGFORCEUNDEFINED, UNDEFINEDSETSFLAG, FLAGIFFUNDEFINED};
+typedef enum UndefinedBehavior UndefinedBehavior;
+
 enum BooleanType {ORDERCONST, BOOLEANVAR, LOGICOP, COMPARE, PREDICATEOP, TABLEPREDICATEOP};
 typedef enum BooleanType BooleanType;
 
 enum FunctionType {TABLEFUNC, OPERATORFUNC};
 typedef enum FunctionType FunctionType;
 
+enum PredicateType {TABLEPRED, OPERATORPRED};
+typedef enum PredicateType PredicateType;
+
 enum ElementType {ELEMSET, ELEMFUNCRETURN};
 typedef enum ElementType ElementType;
 #endif
index d2a572dbf70ed472aea307820c69573d61e713c5..17376812a7d8d84979878b2631546633614147bf 100644 (file)
@@ -3,16 +3,28 @@
 
 
 Predicate* allocPredicate(CompOp op, Set ** domain, uint numDomain){
-    Predicate* predicate = (Predicate*) ourmalloc(sizeof(Predicate));
-    predicate->domains = allocDefVectorSet();
-    for(uint i=0; i<numDomain; i++)
-        pushVectorSet(predicate->domains,domain[i]);
-    predicate->op=op;
-    return predicate;
+       PredicateOperator* predicate = ourmalloc(sizeof(PredicateOperator));
+       GETPREDICATETYPE(predicate)=OPERATORPRED;
+       predicate->numDomains=numDomain;
+       predicate->domains = ourmalloc(numDomain * sizeof(Set *));
+       memcpy(predicate->domains, domain, numDomain * sizeof(Set *));
+       predicate->op=op;
+       return &predicate->base;
 }
 
 void deletePredicate(Predicate* predicate){
-    deleteVectorSet(predicate->domains);
-    ourfree(predicate);
+       switch(GETPREDICATETYPE(predicate)) {
+       case OPERATORPRED: {
+               PredicateOperator * operpred=(PredicateOperator *) predicate;
+               ourfree(operpred->domains);
+               break;
+       }
+       case TABLEPRED: {
+               break;
+       }
+       }
+
+       //need to handle freeing array...
+       ourfree(predicate);
 }
 
index 513e3869d5000681826a0e90e0d2fdef951e2d4f..f9edc09e81d498bedcc4a2e441ff0ffa04e374e2 100644 (file)
@@ -5,9 +5,25 @@
 #include "ops.h"
 #include "structs.h"
 
+#define GETPREDICATETYPE(o) (((Predicate *)(o))->type)
+
 struct Predicate {
+       PredicateType type;
+};
+
+struct PredicateOperator {
+       Predicate base;
        CompOp op;
-       VectorSet* domains;
+       Set** domains;
+       int numDomains;
+};
+
+struct PredicateTable {
+       Predicate base;
+       Set** domains;
+       int numDomains;
+       Table* table;
+       UndefinedBehavior undefinedbehavior;
 };
 
 
index 4a961afef96bd360bdf4f8098a55c8416d7aefe6..d32af3faa81e5a714d502675d34038e31eae8d4c 100644 (file)
@@ -55,6 +55,12 @@ typedef struct Function Function;
 struct Predicate;
 typedef struct Predicate Predicate;
 
+struct PredicateTable;
+typedef struct PredicateTable PredicateTable;
+
+struct PredicateOperator;
+typedef struct PredicateOperator PredicateOperator;
+
 struct Table;
 typedef struct Table Table;