9 #include "functionencoding.h"
10 #include "constraint.h"
11 #include "serializable.h"
12 #include "serializer.h"
14 class Boolean : public ASTNode, public Serializable {
16 Boolean(ASTNodeType _type);
18 virtual Boolean *clone(CSolver *solver, CloneMap *map) = 0;
19 virtual void serialize(Serializer* ) = 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 );
65 class BooleanPredicate : public Boolean {
67 BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus);
68 Boolean *clone(CSolver *solver, CloneMap *map);
69 void serialize(Serializer *serializer );
72 FunctionEncoding encoding;
73 Array<Element *> inputs;
74 BooleanEdge undefStatus;
75 FunctionEncoding *getFunctionEncoding() {return &encoding;}
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);