edits
[satune.git] / src / ASTAnalyses / Encoding / encodinggraph.h
index f452dac2fc7660940bed0fa351695ec0abdd3bbd..0c94c3892be692822f885d3f554f2d625414a15c 100644 (file)
@@ -2,24 +2,13 @@
 #define ENCODINGGRAPH_H
 #include "classlist.h"
 #include "structs.h"
-
-uint hashEncodingEdge(EncodingEdge *edge);
-bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
-class EncodingSubGraph;
-
-
-typedef Hashtable<EncodingEdge *, EncodingEdge *, uintptr_t, PTRSHIFT, hashEncodingEdge, equalsEncodingEdge> HashtableEdge;
-typedef Hashset<EncodingNode *, uintptr_t, PTRSHIFT> HashsetEncodingNode;
-typedef SetIterator<EncodingNode *, uintptr_t, PTRSHIFT> SetIteratorEncodingNode;
-typedef Hashset<EncodingEdge *, uintptr_t, PTRSHIFT> HashsetEncodingEdge;
-typedef SetIterator<EncodingEdge *, uintptr_t, PTRSHIFT> SetIteratorEncodingEdge;
-
-typedef Hashtable<EncodingNode *, EncodingSubGraph *, uintptr_t, PTRSHIFT> HashtableNodeToSubGraph;
+#include "graphstructs.h"
 
 class EncodingGraph {
  public:
        EncodingGraph(CSolver * solver);
        void buildGraph();
+       void encode();
        
        CMEMALLOC;
  private:
@@ -29,13 +18,15 @@ class EncodingGraph {
        Vector<EncodingEdge *> edgeVector;
        HashsetElement discovered;
        HashtableNodeToSubGraph graphMap;
-
+       HashsetEncodingSubGraph subgraphs;
+       
        void decideEdges();
        void mergeNodes(EncodingNode *first, EncodingNode *second);
        void processElement(Element *e);
        void processFunction(ElementFunction *f);
        void processPredicate(BooleanPredicate *b);
        EncodingNode * createNode(Element *e);
+       EncodingNode * getNode(Element *e);
        EncodingEdge * getEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
 };
 
@@ -46,7 +37,7 @@ class EncodingNode {
        uint getSize() const;
        VarType getType() const;
        void setEncoding(ElementEncodingType e) {encoding=e;}
-       
+       ElementEncodingType getEncoding() {return encoding;}
        CMEMALLOC;
  private:
        Set *s;
@@ -57,24 +48,6 @@ class EncodingNode {
        friend class EncodingSubGraph;
 };
 
-class EncodingSubGraph {
- public:
-       EncodingSubGraph();
-       void addNode(EncodingNode *n);
-       SetIteratorEncodingNode * nodeIterator();
-       
-       CMEMALLOC;
- private:
-       uint estimateNewSize(EncodingNode *n);
-       uint estimateNewSize(EncodingSubGraph *sg);
-
-       HashsetEncodingNode nodes;
-       uint encodingSize;
-       uint numElements;
-
-       friend class EncodingGraph;
-};
-
 enum EdgeEncodingType { EDGE_UNASSIGNED, EDGE_BREAK, EDGE_MATCH};
 typedef enum EdgeEncodingType EdgeEncodingType;