X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FAST%2Fboolean.h;h=207b327bf693182d4d06a7ded3b4849aa913b367;hb=c081050838e3612c758d5ed4e59b71a9f5d89abb;hp=eb3b02cd42d955bd319218a7b0b28a36d8ac4e65;hpb=0f956ba8d86843b001d95f1e12b7fefcfd477938;p=satune.git diff --git a/src/AST/boolean.h b/src/AST/boolean.h index eb3b02c..207b327 100644 --- a/src/AST/boolean.h +++ b/src/AST/boolean.h @@ -3,73 +3,98 @@ #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" -/** - This is a little sketchy, but apparently legit. - https://www.python.org/dev/peps/pep-3123/ */ - -#define GETBOOLEANTYPE(o) GETASTNODETYPE(o) -#define GETBOOLEANPARENTS(o) (&((Boolean *)(o))->parents) -#define GETBOOLEANPOLARITY(b) (((Boolean*)b)->polarity) -#define GETBOOLEANVALUE(b) (((Boolean*)b)->boolVal) - -struct Boolean { - ASTNode base; +class Boolean : public ASTNode { +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; - VectorBoolean parents; + Vector parents; + virtual void updateParents() {} + + CMEMALLOC; }; -struct BooleanOrder { - Boolean base; - Order* order; - uint64_t first; - uint64_t second; +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; }; -//I don't like the name, we may want to change it later --HG -struct BooleanInterOrder{ - Boolean base; - Order* order1; +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; - Order* order2; uint64_t second; + CMEMALLOC; }; -struct BooleanVar { - Boolean base; - VarType vtype; - Edge var; +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; }; -struct BooleanLogic { - Boolean base; +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; - ArrayBoolean inputs; -}; + bool replaced; + Array inputs; + void updateParents(); -struct BooleanPredicate { - Boolean base; - Predicate * predicate; - FunctionEncoding encoding; - ArrayElement inputs; - Boolean* undefStatus; + CMEMALLOC; }; +BooleanEdge cloneEdge(CSolver *solver, CloneMap *map, BooleanEdge e); -Boolean * allocBooleanVar(VarType t); -Boolean * allocBooleanOrder(Order * order, uint64_t first, uint64_t second); -Boolean * allocBooleanInterOrder(Order * order1, uint64_t first,Order* order2, uint64_t second); -Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs, Boolean* undefinedStatus); -Boolean * allocBooleanLogicArray(CSolver *solver, LogicOp op, Boolean ** array, uint asize); -void deleteBoolean(Boolean * This); -Polarity negatePolarity(Polarity This); -BooleanValue negateBooleanValue(BooleanValue This); -static inline FunctionEncoding* getPredicateFunctionEncoding(BooleanPredicate* func){ - return &func->encoding; -} #endif