5 #include "graphstructs.h"
9 NodeValuePair(EncodingNode *n, uint64_t val) : node(n), value(val) {}
16 typedef Hashset<EncodingValue *, uintptr_t, PTRSHIFT> HashsetEncodingValue;
17 typedef SetIterator<EncodingValue *, uintptr_t, PTRSHIFT> SetIteratorEncodingValue;
21 EncodingValue(uint64_t _val) : value(_val), encoding(0), inComparison(false), assigned(false) {}
22 void merge(EncodingValue *value);
27 HashsetEncodingNode nodes;
28 HashsetEncodingValue larger;
29 HashsetEncodingValue notequals;
32 uint hashNodeValuePair(NodeValuePair *nvp);
33 bool equalsNodeValuePair(NodeValuePair *nvp1, NodeValuePair *nvp2);
35 typedef Hashtable<NodeValuePair *, EncodingValue *, uintptr_t, 0, hashNodeValuePair, equalsNodeValuePair> NVPMap;
37 class EncodingSubGraph {
40 void addNode(EncodingNode *n);
41 SetIteratorEncodingNode * nodeIterator();
43 uint getEncoding(EncodingNode *n, uint64_t val);
44 uint getEncodingSize(EncodingNode *n) { return maxEncodingVal;}
48 uint estimateNewSize(EncodingNode *n);
49 uint estimateNewSize(EncodingSubGraph *sg);
50 void traverseValue(EncodingNode *node, uint64_t value);
51 void computeEncodingValue();
52 void computeComparisons();
53 void computeEqualities();
54 void solveComparisons();
56 void generateComparison(EncodingNode *left, EncodingNode *right);
57 void generateEquals(EncodingNode *left, EncodingNode *right);
58 void orderEV(EncodingValue *smaller, EncodingValue *larger);
60 HashsetEncodingValue values;
61 HashsetEncodingNode nodes;
67 friend class EncodingGraph;