Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/constraint_compiler
[satune.git] / src / ASTAnalyses / Encoding / encodinggraph.h
1 #ifndef ENCODINGGRAPH_H
2 #define ENCODINGGRAPH_H
3 #include "classlist.h"
4 #include "structs.h"
5
6 uint hashEncodingEdge(EncodingEdge *edge);
7 bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
8
9 typedef Hashtable<EncodingEdge *, EncodingEdge *, uintptr_t, PTRSHIFT, hashEncodingEdge, equalsEncodingEdge> HashtableEdge;
10
11 class EncodingGraph {
12  public:
13         EncodingGraph(CSolver * solver);
14         void buildGraph();
15         
16         CMEMALLOC;
17  private:
18         CSolver * solver;
19         HashtableEncoding encodingMap;
20         HashtableEdge edgeMap;
21         void processElement(Element *e);
22         void processFunction(ElementFunction *f);
23         void processPredicate(BooleanPredicate *b);
24         EncodingNode * createNode(Element *e);
25
26 };
27
28 class EncodingNode {
29  public:
30         EncodingNode(Set *_s);
31         void addElement(Element *e);
32         CMEMALLOC;
33  private:
34         Set *s;
35         HashsetElement elements;
36 };
37
38 class EncodingEdge {
39  public:
40         EncodingEdge(EncodingNode *_l, EncodingNode *_r);
41         EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d);
42         CMEMALLOC;
43  private:
44         EncodingNode *left;
45         EncodingNode *right;
46         EncodingNode *dst;
47         friend uint hashEncodingEdge(EncodingEdge *edge);
48         friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
49
50 };
51
52
53 #endif