9 #include "functionencoding.h"
10 #include "constraint.h"
11 #include "serializer.h"
13 class Boolean : public ASTNode {
15 static uint64_t counter;
17 Boolean(ASTNodeType _type);
19 virtual Boolean *clone(CSolver *solver, CloneMap *map) = 0;
20 virtual void serialize(Serializer * ) = 0;
21 virtual void print() = 0;
22 virtual bool isTrue() {return boolVal == BV_MUSTBETRUE;}
23 virtual bool isFalse() {return boolVal == BV_MUSTBEFALSE;}
26 Vector<ASTNode *> parents;
27 virtual void updateParents() {}
32 class BooleanConst : public Boolean {
34 BooleanConst(bool isTrue);
35 Boolean *clone(CSolver *solver, CloneMap *map);
36 bool isTrue() {return istrue;}
37 bool isFalse() {return !istrue;}
38 void serialize(Serializer *serializer ) {};
44 class BooleanVar : public Boolean {
46 BooleanVar(VarType t);
47 Boolean *clone(CSolver *solver, CloneMap *map);
48 void serialize(Serializer *serializer );
55 class BooleanOrder : public Boolean {
57 BooleanOrder(Order *_order, uint64_t _first, uint64_t _second);
58 Boolean *clone(CSolver *solver, CloneMap *map);
59 void serialize(Serializer *serializer );
69 class BooleanPredicate : public Boolean {
71 BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus);
72 Boolean *clone(CSolver *solver, CloneMap *map);
73 Predicate *getPredicate() {return predicate;}
74 FunctionEncoding *getFunctionEncoding() {return &encoding;}
76 void serialize(Serializer *serializer );
81 FunctionEncoding encoding;
82 Array<Element *> inputs;
83 BooleanEdge undefStatus;
86 class BooleanLogic : public Boolean {
88 BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
89 Boolean *clone(CSolver *solver, CloneMap *map);
90 void serialize(Serializer *serializer );
94 Array<BooleanEdge> inputs;
99 BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e);