1 #ifndef ENCODINGGRAPH_H
2 #define ENCODINGGRAPH_H
5 #include "graphstructs.h"
9 EncodingGraph(CSolver * solver);
16 HashtableEncoding encodingMap;
17 HashtableEdge edgeMap;
18 Vector<EncodingEdge *> edgeVector;
19 HashsetElement discovered;
20 HashtableNodeToSubGraph graphMap;
21 HashsetEncodingSubGraph subgraphs;
24 void mergeNodes(EncodingNode *first, EncodingNode *second);
25 void processElement(Element *e);
26 void processFunction(ElementFunction *f);
27 void processPredicate(BooleanPredicate *b);
28 EncodingNode * createNode(Element *e);
29 EncodingEdge * getEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
34 EncodingNode(Set *_s);
35 void addElement(Element *e);
37 VarType getType() const;
38 void setEncoding(ElementEncodingType e) {encoding=e;}
43 HashsetElement elements;
44 HashsetEncodingEdge edges;
45 ElementEncodingType encoding;
46 friend class EncodingGraph;
47 friend class EncodingSubGraph;
50 enum EdgeEncodingType { EDGE_UNASSIGNED, EDGE_BREAK, EDGE_MATCH};
51 typedef enum EdgeEncodingType EdgeEncodingType;
55 EncodingEdge(EncodingNode *_l, EncodingNode *_r);
56 EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d);
57 void setEncoding(EdgeEncodingType e) {encoding=e;}
58 uint64_t getValue() const;
65 EdgeEncodingType encoding;
69 friend uint hashEncodingEdge(EncodingEdge *edge);
70 friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
71 friend class EncodingGraph;
72 friend class EncodingSubGraph;