New type of Element and Boolean.
[satune.git] / src / AST / boolean.c
1 #include "boolean.h"
2 #include "structs.h"
3 #include "csolver.h"
4
5 Boolean* allocBoolean(VarType t) {
6         BooleanVar* tmp=(BooleanVar *) ourmalloc(sizeof (BooleanVar));
7         GETBOOLEANTYPE(tmp)=BOOLEANVAR;
8         tmp->vtype=t;
9         return & tmp->base;
10 }
11
12 Boolean* allocBooleanOrder(Order* order, uint64_t first, uint64_t second) {
13         BooleanOrder* tmp=(BooleanOrder *) ourmalloc(sizeof (BooleanOrder));
14         GETBOOLEANTYPE(tmp)=ORDERCONST;
15         tmp->order=order;
16         tmp->first=first;
17         tmp->second=second;
18         return & tmp -> base;
19 }
20
21 Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs){
22     BooleanPredicate* bp = (BooleanPredicate*) ourmalloc(sizeof(BooleanPredicate));
23     GETBOOLEANTYPE(bp)= PREDICATEOP;
24     bp->predicate=predicate;
25     bp->inputs= allocVectorArrayElement (numInputs,inputs);
26     return & bp->base;
27 }
28
29 Boolean * allocBooleanLogic(LogicOp op, Boolean * left, Boolean* right){
30     BooleanLogic* bl = (BooleanLogic*) ourmalloc(sizeof(BooleanLogic));
31     GETBOOLEANTYPE(bl) = LOGICOP;
32     bl->op=op;
33     bl->left=left;
34     bl->right=right;
35     return &bl->base;
36 }
37 Boolean * allocBooleanLogicArray(CSolver *solver, LogicOp op, Boolean ** array, uint asize){
38     ASSERT(asize>=2);
39     Boolean* boolean = allocBooleanLogic(op,array[0], array[1]);
40     pushVectorBoolean(solver->allBooleans,boolean);
41     for(uint i=2; i<asize; i++){
42         boolean=allocBooleanLogic(op,boolean, array[i]);
43         pushVectorBoolean(solver->allBooleans,boolean);
44     }
45     return boolean;
46 }
47
48 void deleteBoolean(Boolean * This) {
49         ourfree(This);
50 }