X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FAST%2Fboolean.h;h=de96bfc4e21a2ad1699132f85e3b5fb934597f1a;hb=fd09b2b8edb8d7151cb4fdd861da7d643f176295;hp=5e8c5a5e6f9a225af80543f9d1fc4b2f1411cd14;hpb=2fdb3e8b65ae7e1490997e5df9ad8cc0929e1589;p=satune.git diff --git a/src/AST/boolean.h b/src/AST/boolean.h index 5e8c5a5..de96bfc 100644 --- a/src/AST/boolean.h +++ b/src/AST/boolean.h @@ -2,7 +2,101 @@ #define BOOLEAN_H #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 "serializer.h" -struct Boolean { +class Boolean : public ASTNode { +private: + static uint64_t counter; +public: + Boolean(ASTNodeType _type); + virtual ~Boolean() {} + virtual Boolean *clone(CSolver *solver, CloneMap *map) = 0; + virtual void serialize(Serializer * ) = 0; + virtual void print() = 0; + virtual bool isTrue() {return boolVal == BV_MUSTBETRUE;} + virtual bool isFalse() {return boolVal == BV_MUSTBEFALSE;} + Polarity polarity; + BooleanValue boolVal; + Vector parents; + virtual void updateParents() {} + uint64_t id; + 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 ) {}; + virtual void print(); + bool istrue; + CMEMALLOC; +}; + +class BooleanVar : public Boolean { +public: + BooleanVar(VarType t); + Boolean *clone(CSolver *solver, CloneMap *map); + void serialize(Serializer *serializer ); + virtual void print(); + VarType vtype; + Edge var; + CMEMALLOC; +}; + +class BooleanOrder : public Boolean { +public: + BooleanOrder(Order *_order, uint64_t _first, uint64_t _second); + Boolean *clone(CSolver *solver, CloneMap *map); + void serialize(Serializer *serializer ); + virtual void print(); + void updateParents(); + + Order *order; + uint64_t first; + uint64_t second; + CMEMALLOC; +}; + +class BooleanPredicate : public Boolean { +public: + BooleanPredicate(Predicate *_predicate, Element **_inputs, uint _numInputs, BooleanEdge _undefinedStatus); + Boolean *clone(CSolver *solver, CloneMap *map); + Predicate *getPredicate() {return predicate;} + FunctionEncoding *getFunctionEncoding() {return &encoding;} + void updateParents(); + void serialize(Serializer *serializer ); + virtual void print(); + CMEMALLOC; + + Predicate *predicate; + FunctionEncoding encoding; + Array inputs; + BooleanEdge undefStatus; +}; + +class BooleanLogic : public Boolean { +public: + BooleanLogic(CSolver *solver, LogicOp _op, BooleanEdge *array, uint asize); + Boolean *clone(CSolver *solver, CloneMap *map); + void serialize(Serializer *serializer ); + virtual void print(); + LogicOp op; + bool replaced; + Array inputs; + void updateParents(); + + CMEMALLOC; +}; +BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e); + + #endif