1 #ifndef ENCODINGGRAPH_H
2 #define ENCODINGGRAPH_H
5 #include "graphstructs.h"
9 EncodingGraph(CSolver * solver);
15 HashtableEncoding encodingMap;
16 HashtableEdge edgeMap;
17 Vector<EncodingEdge *> edgeVector;
18 HashsetElement discovered;
19 HashtableNodeToSubGraph graphMap;
22 void mergeNodes(EncodingNode *first, EncodingNode *second);
23 void processElement(Element *e);
24 void processFunction(ElementFunction *f);
25 void processPredicate(BooleanPredicate *b);
26 EncodingNode * createNode(Element *e);
27 EncodingEdge * getEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
32 EncodingNode(Set *_s);
33 void addElement(Element *e);
35 VarType getType() const;
36 void setEncoding(ElementEncodingType e) {encoding=e;}
41 HashsetElement elements;
42 HashsetEncodingEdge edges;
43 ElementEncodingType encoding;
44 friend class EncodingGraph;
45 friend class EncodingSubGraph;
48 enum EdgeEncodingType { EDGE_UNASSIGNED, EDGE_BREAK, EDGE_MATCH};
49 typedef enum EdgeEncodingType EdgeEncodingType;
53 EncodingEdge(EncodingNode *_l, EncodingNode *_r);
54 EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d);
55 void setEncoding(EdgeEncodingType e) {encoding=e;}
56 uint64_t getValue() const;
63 EdgeEncodingType encoding;
67 friend uint hashEncodingEdge(EncodingEdge *edge);
68 friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
69 friend class EncodingGraph;
70 friend class EncodingSubGraph;