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