Adding a boolean for undefinedStatus
[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         initDefVectorBoolean(GETBOOLEANPARENTS(This));
45         initArrayInitBoolean(&This->inputs, array, asize);
46         pushVectorBoolean(solver->allBooleans, (Boolean *) This);
47         return & This->base;
48 }
49
50 void deleteBoolean(Boolean * This) {
51         switch(GETBOOLEANTYPE(This)){
52         case PREDICATEOP: {
53                 BooleanPredicate *bp=(BooleanPredicate *)This;
54                 deleteInlineArrayElement(& bp->inputs );
55                 deleteFunctionEncoding(& bp->encoding);
56                 break;
57         }
58         default:
59                 break;
60         }
61         deleteVectorArrayBoolean(GETBOOLEANPARENTS(This));
62         ourfree(This);
63 }