4 /* LinkedHashNode *****************************************************/
10 LinkedHashNode *lnext,*lprev;
15 LinkedHashNode(int key, int data, LinkedHashNode *next);
20 /* SimpleList *********************************************************/
29 int contains(int data);
31 int hasMoreElements();
36 /* WorkList *********************************************************/
37 #define WLISTSIZE 4*100
41 struct ListNode *head;
42 struct ListNode *tail;
49 void add(int id, int type, int lvalue, int rvalue);
50 int hasMoreElements();
62 /* SimpleHash *********************************************************/
69 struct SimpleNode **bucket;
70 struct ArraySimple *listhead;
71 struct ArraySimple *listtail;
76 SimpleHash* parents[10];
77 SimpleHash* children[10];
78 void addChild(SimpleHash* child);
81 SimpleHash(int size=100);
83 int add(int key, int data);
84 int remove(int key, int data);
85 bool contains(int key);
86 bool contains(int key, int data);
87 int get(int key, int& data);
88 int countdata(int data);
89 void addParent(SimpleHash* parent);
91 SimpleIterator* iterator();
92 void iterator(SimpleIterator & it);
100 /* SimpleHashExcepion *************************************************/
103 /* SimpleIterator *****************************************************/
104 #define ARRAYSIZE 100
107 struct SimpleNode *next;
114 struct SimpleNode nodes[ARRAYSIZE];
115 struct ArraySimple * nextarray;
119 class SimpleIterator {
122 struct ArraySimple *cur;
125 inline SimpleIterator() {}
127 inline SimpleIterator(struct ArraySimple *start, SimpleHash *t) {
133 inline int hasNext() {
134 while((index==ARRAYSIZE)||!cur->nodes[index].inuse) {
135 if (cur->nextarray==0 &&
136 index==table->tailindex)
139 if (index==ARRAYSIZE) {
144 if (cur->nodes[index].inuse)
151 return cur->nodes[index++].data;
155 return cur->nodes[index].key;
159 /* SimpleHashExcepion *************************************************/
161 class SimpleHashException {
163 SimpleHashException();
166 class RepairHashNode {
168 RepairHashNode *next;
169 RepairHashNode *lnext;
175 RepairHashNode(int setrelation, int rule, int lvalue, int rvalue, int data);
183 RepairHashNode **bucket;
184 RepairHashNode *nodelist;
188 RepairHash(int size);
190 int addset(int setv, int rule, int value, int data);
191 int addrelation(int relation, int rule, int lvalue, int rvalue, int data);
192 bool containsset(int setv, int rule, int value);
193 bool containsrelation(int relation, int rule, int lvalue, int rvalue);
194 int getset(int setv, int rule, int value);
195 int getrelation(int relation, int rule, int lvalue, int rvalue);