X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FAST%2Fboolean.h;h=1c45f04b0cdfeb4c73733f67050084249c4c7f52;hb=abe0dee853780f8254436b0de7c8330d326d4017;hp=4bab81119c939549c110b9dd8ff3942c4ea94626;hpb=3660592181f40d6a5f765ed75960c417fcbb4b7f;p=satune.git diff --git a/src/AST/boolean.h b/src/AST/boolean.h index 4bab811..1c45f04 100644 --- a/src/AST/boolean.h +++ b/src/AST/boolean.h @@ -3,64 +3,95 @@ #include "classlist.h" #include "mymemory.h" #include "ops.h" +#include "astops.h" #include "structs.h" #include "astnode.h" #include "functionencoding.h" #include "constraint.h" +#include "serializable.h" +#include "serializer.h" -/** - This is a little sketchy, but apparently legit. - https://www.python.org/dev/peps/pep-3123/ */ - -#define GETBOOLEANTYPE(o) (o->type) -#define GETBOOLEANPARENTS(o) (&(o->parents)) -#define GETBOOLEANPOLARITY(b) (b->polarity) -#define GETBOOLEANVALUE(b) (b->boolVal) - -class Boolean : public ASTNode { - public: +class Boolean : public ASTNode, public Serializable { +public: Boolean(ASTNodeType _type); virtual ~Boolean() {} + virtual Boolean *clone(CSolver *solver, CloneMap *map) = 0; + virtual void serialize(Serializer* ) = 0; + virtual bool isTrue() {return boolVal == BV_MUSTBETRUE;} + virtual bool isFalse() {return boolVal == BV_MUSTBEFALSE;} Polarity polarity; BooleanValue boolVal; Vector parents; - MEMALLOC; + virtual void updateParents() {} + + CMEMALLOC; +}; + +class BooleanConst : public Boolean { +public: + BooleanConst(bool isTrue); + Boolean *clone(CSolver *solver, CloneMap *map); + bool isTrue() {return istrue;} + bool isFalse() {return !istrue;} + void serialize(Serializer *serializer ){}; + + bool istrue; + CMEMALLOC; }; class BooleanVar : public Boolean { - public: +public: BooleanVar(VarType t); + Boolean *clone(CSolver *solver, CloneMap *map); + void serialize(Serializer *serializer ); + VarType vtype; Edge var; - MEMALLOC; + CMEMALLOC; }; class BooleanOrder : public Boolean { - public: +public: BooleanOrder(Order *_order, uint64_t _first, uint64_t _second); + Boolean *clone(CSolver *solver, CloneMap *map); + void serialize(Serializer *serializer ); + Order *order; uint64_t first; uint64_t second; - MEMALLOC; + CMEMALLOC; }; class BooleanPredicate : public Boolean { - public: - BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, Boolean *_undefinedStatus); - ~BooleanPredicate(); +public: + BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus); + Boolean *clone(CSolver *solver, CloneMap *map); + void serialize(Serializer *serializer ); + Predicate *predicate; FunctionEncoding encoding; Array inputs; - Boolean *undefStatus; - FunctionEncoding * getFunctionEncoding() {return &encoding;} - MEMALLOC; + BooleanEdge undefStatus; + FunctionEncoding *getFunctionEncoding() {return &encoding;} + void updateParents(); + + CMEMALLOC; }; class BooleanLogic : public Boolean { - public: - BooleanLogic(CSolver *solver, LogicOp _op, Boolean **array, uint asize); +public: + BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize); + Boolean *clone(CSolver *solver, CloneMap *map); + void serialize(Serializer *serializer ); + LogicOp op; - Array inputs; - MEMALLOC; + bool replaced; + Array inputs; + void updateParents(); + + CMEMALLOC; }; +BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e); + + #endif