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;
50 void add(int id, int type, int lvalue, int rvalue);
51 int hasMoreElements();
63 /* SimpleHash *********************************************************/
70 struct SimpleNode **bucket;
71 struct ArraySimple *listhead;
72 struct ArraySimple *listtail;
77 SimpleHash* parents[10];
78 SimpleHash* children[10];
79 void addChild(SimpleHash* child);
82 SimpleHash(int size=100);
84 int add(int key, int data);
85 int remove(int key, int data);
86 bool contains(int key);
87 bool contains(int key, int data);
88 int get(int key, int& data);
89 int countdata(int data);
90 void addParent(SimpleHash* parent);
92 SimpleIterator* iterator();
93 void iterator(SimpleIterator & it);
98 void addAll(SimpleHash * set);
99 SimpleHash * imageSet(int key);
102 /* SimpleHashExcepion *************************************************/
105 /* SimpleIterator *****************************************************/
106 #define ARRAYSIZE 100
109 struct SimpleNode *next;
116 struct SimpleNode nodes[ARRAYSIZE];
117 struct ArraySimple * nextarray;
121 class SimpleIterator {
124 struct ArraySimple *cur, *tail;
126 // SimpleHash * table;
127 inline SimpleIterator() {}
129 inline SimpleIterator(struct ArraySimple *start, struct ArraySimple *tl, int tlindex/*, SimpleHash *t*/) {
137 inline int hasNext() {
141 while((index==ARRAYSIZE)||!cur->nodes[index].inuse) {
142 if (index==ARRAYSIZE) {
148 if (cur->nodes[index].inuse)
155 return cur->nodes[index++].data;
159 return cur->nodes[index].key;
163 /* SimpleHashExcepion *************************************************/
165 class SimpleHashException {
167 SimpleHashException();
170 class RepairHashNode {
172 RepairHashNode *next;
173 RepairHashNode *lnext;
181 RepairHashNode(int setrelation, int rule, int lvalue, int rvalue, int data, int data2,int ismodify);
189 RepairHashNode **bucket;
190 RepairHashNode *nodelist;
194 RepairHash(int size);
196 int addset(int setv, int rule, int value, int data);
197 int addrelation(int relation, int rule, int lvalue, int rvalue, int data);
198 int addrelation(int relation, int rule, int lvalue, int rvalue, int data, int data2);
199 bool containsset(int setv, int rule, int value);
200 bool containsrelation(int relation, int rule, int lvalue, int rvalue);
201 int getset(int setv, int rule, int value);
202 int getrelation(int relation, int rule, int lvalue, int rvalue);
203 int getrelation2(int relation, int rule, int lvalue, int rvalue);
204 int ismodify(int relation, int rule, int lvalue, int rvalue);