More code
[satune.git] / src / ASTAnalyses / Encoding / subgraph.h
1 #ifndef SUBGRAPH_H
2 #define SUBGRAPH_H
3 #include "classlist.h"
4 #include "structs.h"
5 #include "graphstructs.h"
6
7 class NodeValuePair {
8  public:
9  NodeValuePair(EncodingNode *n, uint64_t val) : node(n), value(val) {}
10         EncodingNode *node;
11         uint64_t value;
12 };
13
14 class EncodingValue;
15
16 typedef Hashset<EncodingValue *, uintptr_t, PTRSHIFT> HashsetEncodingValue;
17 typedef SetIterator<EncodingValue *, uintptr_t, PTRSHIFT> SetIteratorEncodingValue;
18
19 class EncodingValue {
20  public:
21  EncodingValue(uint64_t _val) : value(_val), encoding(0), inComparison(false), assigned(false) {}
22         void merge(EncodingValue *value);
23         uint64_t value;
24         uint encoding;
25         bool inComparison;
26         bool assigned;
27         HashsetEncodingNode nodes;
28         HashsetEncodingValue larger;
29         HashsetEncodingValue notequals;
30 };
31
32 uint hashNodeValuePair(NodeValuePair *nvp);
33 bool equalsNodeValuePair(NodeValuePair *nvp1, NodeValuePair *nvp2);
34
35 typedef Hashtable<NodeValuePair *, EncodingValue *, uintptr_t, 0, hashNodeValuePair, equalsNodeValuePair> NVPMap;
36
37 class EncodingSubGraph {
38  public:
39         EncodingSubGraph();
40         void addNode(EncodingNode *n);
41         SetIteratorEncodingNode * nodeIterator();
42         void encode();
43         
44         CMEMALLOC;
45  private:
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();
53         void solveEquals();
54         void generateComparison(EncodingNode *left, EncodingNode *right);
55         void generateEquals(EncodingNode *left, EncodingNode *right);
56         void orderEV(EncodingValue *smaller, EncodingValue *larger);
57
58         HashsetEncodingValue values;
59         HashsetEncodingNode nodes;
60         NVPMap map;
61         uint encodingSize;
62         uint numElements;
63
64         friend class EncodingGraph;
65 };
66
67 #endif