1 #ifndef ENCODINGGRAPH_H
2 #define ENCODINGGRAPH_H
5 #include "graphstructs.h"
7 #define FUDGEFACTOR 1.2
8 #define CONVERSIONFACTOR 0.5
12 EncodingGraph(CSolver *solver);
21 HashtableEncoding encodingMap;
22 HashtableEdge edgeMap;
23 Vector<EncodingEdge *> edgeVector;
24 HashsetElement discovered;
25 HashtableNodeToSubGraph graphMap;
26 HashsetEncodingSubGraph subgraphs;
28 void encodeParent(Element *e);
30 void mergeNodes(EncodingNode *first, EncodingNode *second);
31 void processElement(Element *e);
32 void processFunction(ElementFunction *f);
33 void processPredicate(BooleanPredicate *b);
34 EncodingNode *createNode(Element *e);
35 EncodingNode *getNode(Element *e);
36 EncodingEdge *getEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
37 EncodingEdge *createEdge(EncodingNode *left, EncodingNode *right, EncodingNode *dst);
42 EncodingNode(Set *_s);
43 void addElement(Element *e);
45 uint64_t getIndex(uint index);
46 VarType getType() const;
47 double measureSimilarity(EncodingNode *node);
48 void setEncoding(ElementEncodingType e) {encoding = e;}
49 ElementEncodingType getEncoding() {return encoding;}
50 bool itemExists(uint64_t item);
51 bool couldBeBinaryIndex() {return encoding == BINARYINDEX || encoding == ELEM_UNASSIGNED;}
55 HashsetElement elements;
56 HashsetEncodingEdge edges;
57 ElementEncodingType encoding;
58 friend class EncodingGraph;
59 friend class EncodingSubGraph;
62 enum EdgeEncodingType { EDGE_UNASSIGNED, EDGE_BREAK, EDGE_MATCH};
63 typedef enum EdgeEncodingType EdgeEncodingType;
67 EncodingEdge(EncodingNode *_l, EncodingNode *_r);
68 EncodingEdge(EncodingNode *_l, EncodingNode *_r, EncodingNode *_d);
69 void setEncoding(EdgeEncodingType e) {encoding = e;}
70 uint64_t getValue() const;
71 EdgeEncodingType getEncoding() {return encoding;}
79 EdgeEncodingType encoding;
83 friend uint hashEncodingEdge(EncodingEdge *edge);
84 friend bool equalsEncodingEdge(EncodingEdge *e1, EncodingEdge *e2);
85 friend class EncodingGraph;
86 friend class EncodingSubGraph;