1 #ifndef ENCODINGGRAPH_H
2 #define ENCODINGGRAPH_H
6 uint hashEncodingEdge(EncodingEdge *edge);
7 bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
9 typedef Hashtable<EncodingEdge *, EncodingEdge *, uintptr_t, PTRSHIFT, hashEncodingEdge, equalsEncodingEdge> HashtableEdge;
13 EncodingGraph(CSolver * solver);
19 HashtableEncoding encodingMap;
20 HashtableEdge edgeMap;
21 HashsetElement discovered;
22 void processElement(Element *e);
23 void processFunction(ElementFunction *f);
24 void processPredicate(BooleanPredicate *b);
25 EncodingNode * createNode(Element *e);
26 EncodingEdge * getEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
31 EncodingNode(Set *_s);
32 void addElement(Element *e);
35 void setEncoding(ElementEncodingType e) {encoding=e;}
40 HashsetElement elements;
42 ElementEncodingType encoding;
43 friend class EncodingGraph;
48 EncodingEdge(EncodingNode *_l, EncodingNode *_r);
49 EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d);
58 friend uint hashEncodingEdge(EncodingEdge *edge);
59 friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
60 friend class EncodingGraph;