More code towards graph
[satune.git] / src / ASTAnalyses / Encoding / encodinggraph.h
index 452a0348e67ad2f0c4e44dba7ba4fec9a4bd727a..12994da28fd657a91a5a58d1d17fd951507e6cf4 100644 (file)
@@ -3,33 +3,55 @@
 #include "classlist.h"
 #include "structs.h"
 
+uint hashEncodingEdge(EncodingEdge *edge);
+bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
+
+typedef Hashtable<EncodingEdge *, EncodingEdge *, uintptr_t, PTRSHIFT, hashEncodingEdge, equalsEncodingEdge> 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