9 #include "functionencoding.h"
10 #include "constraint.h"
14 class Boolean : public ASTNode {
16 Boolean(ASTNodeType _type);
18 virtual Boolean *clone(CSolver *solver, CloneMap *map) = 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;}
39 class BooleanVar : public Boolean {
41 BooleanVar(VarType t);
42 Boolean *clone(CSolver *solver, CloneMap *map);
49 class BooleanOrder : public Boolean {
51 BooleanOrder(Order *_order, uint64_t _first, uint64_t _second);
52 Boolean *clone(CSolver *solver, CloneMap *map);
60 class BooleanPredicate : public Boolean {
62 BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus);
63 Boolean *clone(CSolver *solver, CloneMap *map);
66 FunctionEncoding encoding;
67 Array<Element *> inputs;
68 BooleanEdge undefStatus;
69 FunctionEncoding *getFunctionEncoding() {return &encoding;}
75 class BooleanLogic : public Boolean {
77 BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize);
78 Boolean *clone(CSolver *solver, CloneMap *map);
82 Array<BooleanEdge> inputs;
87 BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e);