X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FASTAnalyses%2FEncoding%2Fencodinggraph.h;h=2fd4b3748896f11ca44bfb1e92ee0aeb2ba50326;hb=80c81c7a3aeeb577e3c4f514b964e5c84ac6c658;hp=7f7b8b41b6d43f9083c5727a8d57f4793577f118;hpb=31bd7858d14dc5131a285a6a683ee89800374852;p=satune.git diff --git a/src/ASTAnalyses/Encoding/encodinggraph.h b/src/ASTAnalyses/Encoding/encodinggraph.h index 7f7b8b4..2fd4b37 100644 --- a/src/ASTAnalyses/Encoding/encodinggraph.h +++ b/src/ASTAnalyses/Encoding/encodinggraph.h @@ -2,11 +2,7 @@ #define ENCODINGGRAPH_H #include "classlist.h" #include "structs.h" - -uint hashEncodingEdge(EncodingEdge *edge); -bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2); - -typedef Hashtable HashtableEdge; +#include "graphstructs.h" class EncodingGraph { public: @@ -18,7 +14,12 @@ class EncodingGraph { CSolver * solver; HashtableEncoding encodingMap; HashtableEdge edgeMap; + Vector edgeVector; HashsetElement discovered; + HashtableNodeToSubGraph graphMap; + + void decideEdges(); + void mergeNodes(EncodingNode *first, EncodingNode *second); void processElement(Element *e); void processFunction(ElementFunction *f); void processPredicate(BooleanPredicate *b); @@ -30,29 +31,43 @@ class EncodingNode { public: EncodingNode(Set *_s); void addElement(Element *e); - uint getSize(); + uint getSize() const; + VarType getType() const; + void setEncoding(ElementEncodingType e) {encoding=e;} + CMEMALLOC; private: Set *s; HashsetElement elements; - uint numElements; + HashsetEncodingEdge edges; + ElementEncodingType encoding; friend class EncodingGraph; + friend class EncodingSubGraph; }; +enum EdgeEncodingType { EDGE_UNASSIGNED, EDGE_BREAK, EDGE_MATCH}; +typedef enum EdgeEncodingType EdgeEncodingType; + class EncodingEdge { public: EncodingEdge(EncodingNode *_l, EncodingNode *_r); EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d); + void setEncoding(EdgeEncodingType e) {encoding=e;} + uint64_t getValue() const; CMEMALLOC; + private: EncodingNode *left; EncodingNode *right; EncodingNode *dst; + EdgeEncodingType encoding; uint numArithOps; uint numEquals; uint numComparisons; friend uint hashEncodingEdge(EncodingEdge *edge); friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2); friend class EncodingGraph; + friend class EncodingSubGraph; }; + #endif