Boolean * right;
};
-struct BooleanComp {
- Boolean base;
- CompOp op;
- Boolean * left;
- Boolean * right;
-};
-
struct BooleanPredicate{
Boolean base;
Predicate * predicate;
VectorElement* inputs;
};
+struct TablePredicate{
+ BooleanPredicate predicate;
+ Table* table;
+};
+
Boolean * allocBoolean(VarType t);
Boolean * allocBooleanOrder(Order * order, uint64_t first, uint64_t second);
#include "element.h"
#include "structs.h"
-//FIXME: ELEMENTSET?
-Element *allocElement(Set * s) {
- Element * tmp=(Element *)ourmalloc(sizeof(Element));
+
+Element *allocElementSet(Set * s) {
+ ElementSet * tmp=(ElementSet *)ourmalloc(sizeof(ElementSet));
GETELEMENTTYPE(tmp)= ELEMSET;
tmp->set=s;
tmp->encoding=NULL;
- return tmp;
+ return &tmp->base;
}
Element* allocElementFunction(Function * function, Element ** array, uint numArrays, Boolean * overflowstatus){
//FIXME:TALK ABOUT ELEMENT
struct Element {
ElementType type;
- Set * set;
- ElementEncoding * encoding;
};
struct ElementSet {
Element base;
Set * set;
+ ElementEncoding * encoding;
};
struct ElementFunction{
Boolean * overflowstatus;
};
-Element * allocElement(Set *s);
+Element * allocElementSet(Set *s);
Element* allocElementFunction(Function * function, Element ** array, uint numArrays, Boolean * overflowstatus);
void deleteElement(Element *This);
#endif
enum OverFlowBehavior {IGNORE, WRAPAROUND, FLAGFORCESOVERFLOW, OVERFLOWSETSFLAG, FLAGIFFOVERFLOW, NOOVERFLOW};
typedef enum OverFlowBehavior OverFlowBehavior;
-enum BooleanType {ORDERCONST, BOOLEANVAR, LOGICOP, COMPARE, PREDICATEOP};
+enum BooleanType {ORDERCONST, BOOLEANVAR, LOGICOP, COMPARE, PREDICATEOP, TABLEPREDICATEOP};
typedef enum BooleanType BooleanType;
enum FunctionType {TABLEFUNC, OPERATORFUNC};
VectorSet* domains;
};
-struct TablePredicate{
- CompOp op;
- Table* table;
-};
-
Predicate* allocPredicate(CompOp op, Set ** domain, uint numDomain);
void deletePredicate(Predicate* predicate);
void baseBinaryIndexElementAssign(ElementEncoding *This) {
Element * element=This->element;
- Set * set=element->set;
+ ASSERT(element->type == ELEMSET);
+ Set * set= ((ElementSet*)element)->set;
ASSERT(set->isRange==false);
uint size=getSizeVectorInt(set->members);
uint encSize=NEXTPOW2(size);
typedef struct BooleanOrder BooleanOrder;
typedef struct BooleanVar BooleanVar;
typedef struct BooleanLogic BooleanLogic;
-typedef struct BooleanComp BooleanComp;
typedef struct BooleanPredicate BooleanPredicate;
struct Boolean;
}
Element * getElementVar(CSolver *This, Set * set) {
- Element * element=allocElement(set);
+ Element * element=allocElementSet(set);
pushVectorElement(This->allElements, element);
return element;
}