Commit after resolving conflicts
[satune.git] / src / AST / boolean.c
index a7ffd259841caa1fb3fc1b68e36e5df1e1bc3761..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));
+       BooleanVar* tmp=(BooleanVar *) ourmalloc(sizeof (BooleanVar));
+       GETBOOLEANTYPE(tmp)=BOOLEANVAR;
        tmp->vtype=t;
-       tmp->btype=_BOOLEAN;
-       return tmp;
+       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;
+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;
+       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);
 }