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);
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
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);
}
#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;
};
struct Predicate;
typedef struct Predicate Predicate;
+struct PredicateTable;
+typedef struct PredicateTable PredicateTable;
+
+struct PredicateOperator;
+typedef struct PredicateOperator PredicateOperator;
+
struct Table;
typedef struct Table Table;