e4e9ddd0ac729d68b1d83482974ca71c4174e875
[satune.git] / src / AST / boolean.c
1 #include "boolean.h"
2 #include "structs.h"
3 #include "csolver.h"
4 #include "element.h"
5 #include "order.h"
6
7 Boolean* allocBooleanVar(VarType t) {
8         BooleanVar* This=(BooleanVar *) ourmalloc(sizeof (BooleanVar));
9         GETBOOLEANTYPE(This)=BOOLEANVAR;
10         This->vtype=t;
11         This->var=E_NULL;
12         initDefVectorBoolean(GETBOOLEANPARENTS(This));
13         return & This->base;
14 }
15
16 Boolean* allocBooleanOrder(Order* order, uint64_t first, uint64_t second) {
17         BooleanOrder* This=(BooleanOrder *) ourmalloc(sizeof (BooleanOrder));
18         GETBOOLEANTYPE(This)=ORDERCONST;
19         This->order=order;
20         This->first=first;
21         This->second=second;
22         pushVectorBoolean(&order->constraints, &This->base);
23         initDefVectorBoolean(GETBOOLEANPARENTS(This));
24         return & This -> base;
25 }
26
27 Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus){
28         BooleanPredicate* This = (BooleanPredicate*) ourmalloc(sizeof(BooleanPredicate));
29         GETBOOLEANTYPE(This)= PREDICATEOP;
30         This->predicate=predicate;
31         initArrayInitElement(&This->inputs, inputs, numInputs);
32         initDefVectorBoolean(GETBOOLEANPARENTS(This));
33
34         for(uint i=0;i<numInputs;i++) {
35                 pushVectorASTNode(GETELEMENTPARENTS(inputs[i]), (ASTNode *)This);
36         }
37         initPredicateEncoding(&This->encoding, (Boolean *) This);
38         This->undefStatus = undefinedStatus;
39         return & This->base;
40 }
41
42 Boolean * allocBooleanLogicArray(CSolver *solver, LogicOp op, Boolean ** array, uint asize){
43         BooleanLogic * This = ourmalloc(sizeof(BooleanLogic));
44         GETBOOLEANTYPE(This) = LOGICOP;
45         This->op = op;
46         initDefVectorBoolean(GETBOOLEANPARENTS(This));
47         initArrayInitBoolean(&This->inputs, array, asize);
48         pushVectorBoolean(solver->allBooleans, (Boolean *) This);
49         return & This->base;
50 }
51
52 void deleteBoolean(Boolean * This) {
53         switch(GETBOOLEANTYPE(This)){
54                 case PREDICATEOP:{
55                         BooleanPredicate *bp=(BooleanPredicate *)This;
56                         deleteInlineArrayElement(& bp->inputs );
57                         deleteFunctionEncoding(& bp->encoding);
58                         break;
59                 }
60                 case LOGICOP:{
61                         BooleanLogic* bl = (BooleanLogic*) This;
62                         deleteInlineArrayBoolean(&bl->inputs);
63                         break;
64                 }
65                 default:
66                         break;
67         }
68         deleteVectorArrayBoolean(GETBOOLEANPARENTS(This));
69         ourfree(This);
70 }