9 #include "functionencoding.h"
10 #include "constraint.h"
11 #include "serializer.h"
13 class Boolean : public ASTNode {
15 Boolean(ASTNodeType _type);
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;}
24 Vector<Boolean *> parents;
25 virtual void updateParents() {}
30 class BooleanConst : public Boolean {
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 ) {};
42 class BooleanVar : public Boolean {
44 BooleanVar(VarType t);
45 Boolean *clone(CSolver *solver, CloneMap *map);
46 void serialize(Serializer *serializer );
53 class BooleanOrder : public Boolean {
55 BooleanOrder(Order *_order, uint64_t _first, uint64_t _second);
56 Boolean *clone(CSolver *solver, CloneMap *map);
57 void serialize(Serializer *serializer );
67 class BooleanPredicate : public Boolean {
69 BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus);
70 Boolean *clone(CSolver *solver, CloneMap *map);
71 Predicate *getPredicate() {return predicate;}
72 FunctionEncoding *getFunctionEncoding() {return &encoding;}
74 void serialize(Serializer *serializer );
79 FunctionEncoding encoding;
80 Array<Element *> inputs;
81 BooleanEdge undefStatus;
84 class BooleanLogic : public Boolean {
86 BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
87 Boolean *clone(CSolver *solver, CloneMap *map);
88 void serialize(Serializer *serializer );
92 Array<BooleanEdge> inputs;
97 BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e);