1 #ifndef ENCODINGGRAPH_H
2 #define ENCODINGGRAPH_H
5 #include "graphstructs.h"
9 EncodingGraph(CSolver *solver);
17 HashtableEncoding encodingMap;
18 HashtableEdge edgeMap;
19 Vector<EncodingEdge *> edgeVector;
20 HashsetElement discovered;
21 HashtableNodeToSubGraph graphMap;
22 HashsetEncodingSubGraph subgraphs;
24 void encodeParent(Element *e);
26 void mergeNodes(EncodingNode *first, EncodingNode *second);
27 void processElement(Element *e);
28 void processFunction(ElementFunction *f);
29 void processPredicate(BooleanPredicate *b);
30 EncodingNode *createNode(Element *e);
31 EncodingNode *getNode(Element *e);
32 EncodingEdge *getEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
33 EncodingEdge *createEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
38 EncodingNode(Set *_s);
39 void addElement(Element *e);
41 VarType getType() const;
42 void setEncoding(ElementEncodingType e) {encoding = e;}
43 ElementEncodingType getEncoding() {return encoding;}
44 bool couldBeBinaryIndex() {return encoding == BINARYINDEX || encoding == ELEM_UNASSIGNED;}
48 HashsetElement elements;
49 HashsetEncodingEdge edges;
50 ElementEncodingType encoding;
51 friend class EncodingGraph;
52 friend class EncodingSubGraph;
55 enum EdgeEncodingType { EDGE_UNASSIGNED, EDGE_BREAK, EDGE_MATCH};
56 typedef enum EdgeEncodingType EdgeEncodingType;
60 EncodingEdge(EncodingNode *_l, EncodingNode *_r);
61 EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d);
62 void setEncoding(EdgeEncodingType e) {encoding = e;}
63 uint64_t getValue() const;
64 EdgeEncodingType getEncoding() {return encoding;}
72 EdgeEncodingType encoding;
76 friend uint hashEncodingEdge(EncodingEdge *edge);
77 friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
78 friend class EncodingGraph;
79 friend class EncodingSubGraph;