182351cc8a6fb789fcf12496f174142a41ec4f2a
[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 int firstkey() {
127         return nodelist->key;
128     }
129     inline SimpleIterator* iterator() {
130         return new SimpleIterator(nodelist);
131     }
132     inline int count() {
133         return numelements;
134     }
135     int count(int key);
136
137 };
138
139 /* SimpleHashExcepion  *************************************************/
140
141 class SimpleHashException {
142 public:
143     SimpleHashException();
144 };
145
146 class RepairHashNode {
147  public:
148     RepairHashNode *next;
149     RepairHashNode *lnext;
150     int data;
151     int setrelation;  
152     int lvalue;  
153     int rvalue;  
154     int rule;
155     RepairHashNode(int setrelation, int rule, int lvalue, int rvalue, int data);
156 };
157
158 class RepairHash {
159
160 private:
161     int numelements;
162     int size;
163     RepairHashNode **bucket;
164     RepairHashNode *nodelist;
165
166 public:
167     RepairHash();
168     RepairHash(int size);
169     ~RepairHash();
170     int addset(int setv, int rule, int value, int data);
171     int addrelation(int relation, int rule, int lvalue, int rvalue, int data);
172     bool containsset(int setv, int rule, int value);
173     bool containsrelation(int relation, int rule, int lvalue, int rvalue);
174     int getset(int setv, int rule, int value);
175     int getrelation(int relation, int rule, int lvalue, int rvalue);
176 };
177
178 #endif
179