X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FASTAnalyses%2FEncoding%2Fencodinggraph.h;h=12994da28fd657a91a5a58d1d17fd951507e6cf4;hb=845b9a98398da56adaa177d73ce7f5a3cfcd1081;hp=452a0348e67ad2f0c4e44dba7ba4fec9a4bd727a;hpb=565c3f059645ed4d4a61ae4d24cdb0393f29433b;p=satune.git diff --git a/src/ASTAnalyses/Encoding/encodinggraph.h b/src/ASTAnalyses/Encoding/encodinggraph.h index 452a034..12994da 100644 --- a/src/ASTAnalyses/Encoding/encodinggraph.h +++ b/src/ASTAnalyses/Encoding/encodinggraph.h @@ -3,33 +3,55 @@ #include "classlist.h" #include "structs.h" +uint hashEncodingEdge(EncodingEdge *edge); +bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2); + +typedef Hashtable HashtableEdge; + class EncodingGraph { public: EncodingGraph(CSolver * solver); - EncodingNode * getNode(Element * element); void buildGraph(); CMEMALLOC; private: CSolver * solver; - HashTableEncoding encodingMap; + HashtableEncoding encodingMap; + HashtableEdge edgeMap; + HashsetElement discovered; void processElement(Element *e); - + void processFunction(ElementFunction *f); + void processPredicate(BooleanPredicate *b); + EncodingNode * createNode(Element *e); + EncodingEdge * getEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst); }; class EncodingNode { public: - + EncodingNode(Set *_s); + void addElement(Element *e); CMEMALLOC; private: - + Set *s; + HashsetElement elements; + uint numElements; + friend class EncodingGraph; }; class EncodingEdge { public: - + EncodingEdge(EncodingNode *_l, EncodingNode *_r); + EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d); CMEMALLOC; private: + EncodingNode *left; + EncodingNode *right; + EncodingNode *dst; + uint numArithOps; + uint numEquals; + uint numComparisons; + friend uint hashEncodingEdge(EncodingEdge *edge); + friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2); + fiend class EncodingGraph; }; - #endif