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 );
66 class BooleanPredicate : public Boolean {
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;}
73 void serialize(Serializer *serializer );
78 FunctionEncoding encoding;
79 Array<Element *> inputs;
80 BooleanEdge undefStatus;
83 class BooleanLogic : public Boolean {
85 BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
86 Boolean *clone(CSolver *solver, CloneMap *map);
87 void serialize(Serializer *serializer );
91 Array<BooleanEdge> inputs;
96 BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e);