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