Commit after resolving conflicts
[satune.git] / src / AST / boolean.c
index 7373bfc179fe211f8d12016b72563186f8e03c82..831a20042cb0f507a48e28e81dc285449fa08455 100644 (file)
@@ -1,21 +1,51 @@
 #include "boolean.h"
+#include "structs.h"
+#include "csolver.h"
 
-Boolean* allocBoolean(VarType t){
-    Boolean* tmp = (Boolean*) ourmalloc(sizeof (Boolean));
-    tmp->vtype=t;
-    tmp->btype=_BOOLEAN;
-    return tmp;
+Boolean* allocBoolean(VarType t) {
+       BooleanVar* tmp=(BooleanVar *) ourmalloc(sizeof (BooleanVar));
+       GETBOOLEANTYPE(tmp)=BOOLEANVAR;
+       tmp->vtype=t;
+       tmp->var=NULL;
+       return & tmp->base;
 }
 
-Boolean* allocBooleanOrder(Order* order,uint64_t first, uint64_t second){
-    Boolean* tmp = (Boolean*) ourmalloc(sizeof (Boolean));
-    tmp->btype= _ORDER;
-    tmp->order = order;
-    tmp->first=first;
-    tmp->second=second;
-               return tmp;
+Boolean* allocBooleanOrder(Order* order, uint64_t first, uint64_t second) {
+       BooleanOrder* tmp=(BooleanOrder *) ourmalloc(sizeof (BooleanOrder));
+       GETBOOLEANTYPE(tmp)=ORDERCONST;
+       tmp->order=order;
+       tmp->first=first;
+       tmp->second=second;
+       return & tmp -> base;
 }
 
-void deleteBoolean(Boolean * this) {
-       ourfree(this);
+Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs){
+    BooleanPredicate* bp = (BooleanPredicate*) ourmalloc(sizeof(BooleanPredicate));
+    GETBOOLEANTYPE(bp)= PREDICATEOP;
+    bp->predicate=predicate;
+    bp->inputs= allocVectorArrayElement (numInputs,inputs);
+    return & bp->base;
+}
+
+Boolean * allocBooleanLogic(LogicOp op, Boolean * left, Boolean* right){
+    BooleanLogic* bl = (BooleanLogic*) ourmalloc(sizeof(BooleanLogic));
+    GETBOOLEANTYPE(bl) = LOGICOP;
+    bl->op=op;
+    bl->left=left;
+    bl->right=right;
+    return &bl->base;
+}
+Boolean * allocBooleanLogicArray(CSolver *solver, LogicOp op, Boolean ** array, uint asize){
+    ASSERT(asize>=2);
+    Boolean* boolean = allocBooleanLogic(op,array[0], array[1]);
+    pushVectorBoolean(solver->allBooleans,boolean);
+    for(uint i=2; i<asize; i++){
+       boolean=allocBooleanLogic(op,boolean, array[i]);
+       pushVectorBoolean(solver->allBooleans,boolean);
+    }
+    return boolean;
+}
+
+void deleteBoolean(Boolean * This) {
+       ourfree(This);
 }