More graph building
[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
12
13
14 class Boolean : public ASTNode {
15 public:
16         Boolean(ASTNodeType _type);
17         virtual ~Boolean() {}
18         virtual Boolean *clone(CSolver *solver, CloneMap *map) = 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         bool istrue;
36         CMEMALLOC;
37 };
38
39 class BooleanVar : public Boolean {
40 public:
41         BooleanVar(VarType t);
42         Boolean *clone(CSolver *solver, CloneMap *map);
43
44         VarType vtype;
45         Edge var;
46         CMEMALLOC;
47 };
48
49 class BooleanOrder : public Boolean {
50 public:
51         BooleanOrder(Order *_order, uint64_t _first, uint64_t _second);
52         Boolean *clone(CSolver *solver, CloneMap *map);
53
54         Order *order;
55         uint64_t first;
56         uint64_t second;
57         CMEMALLOC;
58 };
59
60 class BooleanPredicate : public Boolean {
61 public:
62         BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus);
63         Boolean *clone(CSolver *solver, CloneMap *map);
64         Predicate *getPredicate() {return predicate;}
65         FunctionEncoding *getFunctionEncoding() {return &encoding;}
66         void updateParents();
67         CMEMALLOC;
68         
69         Predicate *predicate;
70         FunctionEncoding encoding;
71         Array<Element *> inputs;
72         BooleanEdge undefStatus;
73 };
74
75 class BooleanLogic : public Boolean {
76 public:
77         BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
78         Boolean *clone(CSolver *solver, CloneMap *map);
79
80         LogicOp op;
81         bool replaced;
82         Array<BooleanEdge> inputs;
83         void updateParents();
84         
85         CMEMALLOC;
86 };
87 BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e);
88
89
90 #endif