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;
23 void encodeParent(Element *e);
25 void mergeNodes(EncodingNode *first, EncodingNode *second);
26 void processElement(Element *e);
27 void processFunction(ElementFunction *f);
28 void processPredicate(BooleanPredicate *b);
29 EncodingNode * createNode(Element *e);
30 EncodingNode * getNode(Element *e);
31 EncodingEdge * getEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
32 EncodingEdge * createEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
37 EncodingNode(Set *_s);
38 void addElement(Element *e);
40 VarType getType() const;
41 void setEncoding(ElementEncodingType e) {encoding=e;}
42 ElementEncodingType getEncoding() {return encoding;}
43 bool couldBeBinaryIndex() {return encoding == BINARYINDEX || encoding == ELEM_UNASSIGNED;}
47 HashsetElement elements;
48 HashsetEncodingEdge edges;
49 ElementEncodingType encoding;
50 friend class EncodingGraph;
51 friend class EncodingSubGraph;
54 enum EdgeEncodingType { EDGE_UNASSIGNED, EDGE_BREAK, EDGE_MATCH};
55 typedef enum EdgeEncodingType EdgeEncodingType;
59 EncodingEdge(EncodingNode *_l, EncodingNode *_r);
60 EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d);
61 void setEncoding(EdgeEncodingType e) {encoding=e;}
62 uint64_t getValue() const;
63 EdgeEncodingType getEncoding() {return encoding;}
71 EdgeEncodingType encoding;
75 friend uint hashEncodingEdge(EncodingEdge *edge);
76 friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
77 friend class EncodingGraph;
78 friend class EncodingSubGraph;