New runtime for repair system.
[repair.git] / Repair / RepairCompiler / MCC / SimpleHash.h
1 #ifndef SIMPLEHASH_H
2 #define SIMPLEHASH_H
3
4 /* LinkedHashNode *****************************************************/
5
6 class LinkedHashNode {
7     
8 public:
9     LinkedHashNode *next;
10     LinkedHashNode *lnext,*lprev;
11     int data;
12     int key;  
13
14
15     LinkedHashNode(int key, int data, LinkedHashNode *next);
16     LinkedHashNode();
17
18 };
19
20 /* SimpleList *********************************************************/
21
22 class SimpleList {
23 private:
24     LinkedHashNode head;
25     LinkedHashNode *ptr;
26 public:
27     SimpleList();
28     void add(int data);
29     int contains(int data);
30     void reset();
31     int hasMoreElements();
32     int nextElement();
33 };
34
35
36 /* WorkList *********************************************************/
37 #define WLISTSIZE 4*100
38
39 class WorkList {
40 private:
41   struct ListNode *head;
42   struct ListNode *tail;
43   int headoffset;
44   int tailoffset;
45
46 public:
47     WorkList();
48     ~WorkList();
49     void add(int id, int type, int lvalue, int rvalue);
50     int hasMoreElements();
51     int getid();
52     int gettype();
53     int getlvalue();
54     int getrvalue();
55     void pop();
56 };
57
58 struct ListNode {
59   int data[WLISTSIZE];
60   ListNode *next;
61 };
62
63
64 /* SimpleIterator *****************************************************/
65
66 class SimpleIterator {
67
68 private:
69
70     LinkedHashNode *cur;
71
72 public:
73
74     inline SimpleIterator(LinkedHashNode *start) {
75         cur = start;
76     }
77
78     inline int hasNext() {
79         return (int)cur->next == 0 ? 0 : 1;
80     }
81
82     inline int next() {
83         cur = cur->next;
84         return cur->data;
85     }
86
87     inline int key() {
88         return cur->key;
89     }
90
91     inline int size() {
92         int temp = 0;
93         while (cur->next) {
94             temp++;
95             cur = cur->next;
96         }
97         return temp;
98     }
99
100 };
101
102 /* SimpleHash *********************************************************/
103
104 class SimpleHash {
105 private:
106     int numelements;
107     int size;
108     LinkedHashNode **bucket;
109     LinkedHashNode *nodelist;
110     int numparents;
111     int numchildren;
112     SimpleHash* parents[10];
113     SimpleHash* children[10];
114     void addChild(SimpleHash* child);
115 public:
116     SimpleHash();
117     SimpleHash(int size);
118     ~SimpleHash();
119     int add(int key, int data);
120     int remove(int key, int data);
121     bool contains(int key);
122     bool contains(int key, int data);
123     int get(int key, int& data);
124     int countdata(int data);
125     void addParent(SimpleHash* parent);
126     inline SimpleIterator* iterator() {
127         return new SimpleIterator(nodelist);
128     }
129     inline int count() {
130         return numelements;
131     }
132     int count(int key);
133
134 };
135
136 /* SimpleHashExcepion  *************************************************/
137
138 class SimpleHashException {
139 public:
140     SimpleHashException();
141 };
142
143 class RepairHashNode {
144  public:
145     RepairHashNode *next;
146     RepairHashNode *lnext;
147     int data;
148     int setrelation;  
149     int lvalue;  
150     int rvalue;  
151     int rule;
152     RepairHashNode(int setrelation, int rule, int lvalue, int rvalue, int data);
153 };
154
155 class RepairHash {
156
157 private:
158     int numelements;
159     int size;
160     RepairHashNode **bucket;
161     RepairHashNode *nodelist;
162
163 public:
164     RepairHash();
165     RepairHash(int size);
166     ~RepairHash();
167     int addset(int setv, int rule, int value, int data);
168     int addrelation(int relation, int rule, int lvalue, int rvalue, int data);
169     bool containsset(int setv, int rule, int value);
170     bool containsrelation(int relation, int rule, int lvalue, int rvalue);
171     int getset(int setv, int rule, int value);
172     int getrelation(int relation, int rule, int lvalue, int rvalue);
173 };
174
175 #endif
176