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();
46 uint estimateNewSize(EncodingNode *n);
47 uint estimateNewSize(EncodingSubGraph *sg);
48 void traverseValue(EncodingNode *node, uint64_t value);
49 void computeEncodingValue();
50 void computeComparisons();
51 void computeEqualities();
52 void solveComparisons();
54 void generateComparison(EncodingNode *left, EncodingNode *right);
55 void generateEquals(EncodingNode *left, EncodingNode *right);
56 void orderEV(EncodingValue *smaller, EncodingValue *larger);
58 HashsetEncodingValue values;
59 HashsetEncodingNode nodes;
65 friend class EncodingGraph;