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 bool isTrue() {return boolVal == BV_MUSTBETRUE;}
20 virtual bool isFalse() {return boolVal == BV_MUSTBEFALSE;}
23 Vector<Boolean *> parents;
24 virtual void updateParents() {}
29 class BooleanConst : public Boolean {
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 ){};
41 class BooleanVar : public Boolean {
43 BooleanVar(VarType t);
44 Boolean *clone(CSolver *solver, CloneMap *map);
45 void serialize(Serializer *serializer );
52 class BooleanOrder : public Boolean {
54 BooleanOrder(Order *_order, uint64_t _first, uint64_t _second);
55 Boolean *clone(CSolver *solver, CloneMap *map);
56 void serialize(Serializer *serializer );
64 class BooleanPredicate : public Boolean {
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;}
71 void serialize(Serializer *serializer );
76 FunctionEncoding encoding;
77 Array<Element *> inputs;
78 BooleanEdge undefStatus;
81 class BooleanLogic : public Boolean {
83 BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
84 Boolean *clone(CSolver *solver, CloneMap *map);
85 void serialize(Serializer *serializer );
89 Array<BooleanEdge> inputs;
94 BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e);