Merge
[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 bool isTrue() {return boolVal == BV_MUSTBETRUE;}
20         virtual bool isFalse() {return boolVal == BV_MUSTBEFALSE;}
21         Polarity polarity;
22         BooleanValue boolVal;
23         Vector<Boolean *> parents;
24         virtual void updateParents() {}
25         
26         CMEMALLOC;
27 };
28
29 class BooleanConst : public Boolean {
30 public:
31         BooleanConst(bool isTrue);
32         Boolean *clone(CSolver *solver, CloneMap *map);
33         bool isTrue() {return istrue;}
34         bool isFalse() {return !istrue;}
35         void serialize(Serializer *serializer ){};
36         
37         bool istrue;
38         CMEMALLOC;
39 };
40
41 class BooleanVar : public Boolean {
42 public:
43         BooleanVar(VarType t);
44         Boolean *clone(CSolver *solver, CloneMap *map);
45         void serialize(Serializer *serializer );
46         
47         VarType vtype;
48         Edge var;
49         CMEMALLOC;
50 };
51
52 class BooleanOrder : public Boolean {
53 public:
54         BooleanOrder(Order *_order, uint64_t _first, uint64_t _second);
55         Boolean *clone(CSolver *solver, CloneMap *map);
56         void serialize(Serializer *serializer );
57         
58         Order *order;
59         uint64_t first;
60         uint64_t second;
61         CMEMALLOC;
62 };
63
64 class BooleanPredicate : public Boolean {
65 public:
66         BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus);
67         Boolean *clone(CSolver *solver, CloneMap *map);
68         Predicate *getPredicate() {return predicate;}
69         FunctionEncoding *getFunctionEncoding() {return &encoding;}
70         void updateParents();
71         void serialize(Serializer *serializer );
72         
73         CMEMALLOC;
74
75         Predicate *predicate;
76         FunctionEncoding encoding;
77         Array<Element *> inputs;
78         BooleanEdge undefStatus;
79 };
80
81 class BooleanLogic : public Boolean {
82 public:
83         BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
84         Boolean *clone(CSolver *solver, CloneMap *map);
85         void serialize(Serializer *serializer );
86         
87         LogicOp op;
88         bool replaced;
89         Array<BooleanEdge> inputs;
90         void updateParents();
91         
92         CMEMALLOC;
93 };
94 BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e);
95
96
97 #endif