3674d9f29d5e934bd94e90ecd1dfe93a488b3e9c
[satune.git] / src / AST / boolean.h
1 #ifndef BOOLEAN_H
2 #define BOOLEAN_H
3 #include "classlist.h"
4 #include "mymemory.h"
5 #include "ops.h"
6 #include "astops.h"
7 #include "structs.h"
8 #include "astnode.h"
9 #include "functionencoding.h"
10 #include "constraint.h"
11 #include "serializer.h"
12
13 class Boolean : public ASTNode {
14 public:
15         Boolean(ASTNodeType _type);
16         virtual ~Boolean() {}
17         virtual Boolean *clone(CSolver *solver, CloneMap *map) = 0;
18         virtual void serialize(Serializer* ) = 0;
19         virtual void print() =0;
20         virtual bool isTrue() {return boolVal == BV_MUSTBETRUE;}
21         virtual bool isFalse() {return boolVal == BV_MUSTBEFALSE;}
22         Polarity polarity;
23         BooleanValue boolVal;
24         Vector<Boolean *> parents;
25         virtual void updateParents() {}
26         
27         CMEMALLOC;
28 };
29
30 class BooleanConst : public Boolean {
31 public:
32         BooleanConst(bool isTrue);
33         Boolean *clone(CSolver *solver, CloneMap *map);
34         bool isTrue() {return istrue;}
35         bool isFalse() {return !istrue;}
36         void serialize(Serializer *serializer ){};
37         virtual void print();
38         bool istrue;
39         CMEMALLOC;
40 };
41
42 class BooleanVar : public Boolean {
43 public:
44         BooleanVar(VarType t);
45         Boolean *clone(CSolver *solver, CloneMap *map);
46         void serialize(Serializer *serializer );
47         virtual void print();
48         VarType vtype;
49         Edge var;
50         CMEMALLOC;
51 };
52
53 class BooleanOrder : public Boolean {
54 public:
55         BooleanOrder(Order *_order, uint64_t _first, uint64_t _second);
56         Boolean *clone(CSolver *solver, CloneMap *map);
57         void serialize(Serializer *serializer );
58         virtual void print();
59
60         Order *order;
61         uint64_t first;
62         uint64_t second;
63         CMEMALLOC;
64 };
65
66 class BooleanPredicate : public Boolean {
67 public:
68         BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus);
69         Boolean *clone(CSolver *solver, CloneMap *map);
70         Predicate *getPredicate() {return predicate;}
71         FunctionEncoding *getFunctionEncoding() {return &encoding;}
72         void updateParents();
73         void serialize(Serializer *serializer );
74         virtual void print();
75         CMEMALLOC;
76
77         Predicate *predicate;
78         FunctionEncoding encoding;
79         Array<Element *> inputs;
80         BooleanEdge undefStatus;
81 };
82
83 class BooleanLogic : public Boolean {
84 public:
85         BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
86         Boolean *clone(CSolver *solver, CloneMap *map);
87         void serialize(Serializer *serializer );
88         virtual void print();
89         LogicOp op;
90         bool replaced;
91         Array<BooleanEdge> inputs;
92         void updateParents();
93         
94         CMEMALLOC;
95 };
96 BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e);
97
98
99 #endif