20 /* LinkedHashNode *****************************************************/
22 struct LinkedHashNode * allocateLinkedHashNode(int key, int data, struct LinkedHashNode *next);
23 struct LinkedHashNode * noargallocateLinkedHashNode();
25 struct LinkedHashNode {
26 struct LinkedHashNode *next;
27 struct LinkedHashNode *lnext,*lprev;
32 /* SimpleList *********************************************************/
34 struct SimpleList * allocateSimpleList();
35 void SimpleListadd(struct SimpleList *, int data);
36 int SimpleListcontains(struct SimpleList *,int data);
37 void SimpleListreset(struct SimpleList *);
38 int SimpleListhasMoreElements(struct SimpleList *);
39 int SimpleListnextElement(struct SimpleList *);
42 struct LinkedHashNode head;
43 struct LinkedHashNode *ptr;
47 /* WorkList *********************************************************/
48 #define WLISTSIZE 4*100
50 struct WorkList * allocateWorkList();
51 void freeWorkList(struct WorkList *);
52 void WorkListreset(struct WorkList *);
53 void WorkListadd(struct WorkList *,int id, int type, int lvalue, int rvalue);
54 int WorkListhasMoreElements(struct WorkList *);
55 int WorkListgetid(struct WorkList *);
56 int WorkListgettype(struct WorkList *);
57 int WorkListgetlvalue(struct WorkList *);
58 int WorkListgetrvalue(struct WorkList *);
59 void WorkListpop(struct WorkList *);
63 struct ListNode *head;
64 struct ListNode *tail;
71 struct ListNode *next;
74 /* SimpleHash *********************************************************/
76 struct SimpleHash * noargallocateSimpleHash();
77 struct SimpleHash * allocateSimpleHash(int size);
78 void SimpleHashaddChild(struct SimpleHash *thisvar, struct SimpleHash * child);
79 void freeSimpleHash(struct SimpleHash *);
82 int SimpleHashadd(struct SimpleHash *, int key, int data);
83 int SimpleHashremove(struct SimpleHash *,int key, int data);
84 bool SimpleHashcontainskey(struct SimpleHash *,int key);
85 bool SimpleHashcontainskeydata(struct SimpleHash *,int key, int data);
86 int SimpleHashget(struct SimpleHash *,int key, int* data);
87 int SimpleHashcountdata(struct SimpleHash *,int data);
88 void SimpleHashaddParent(struct SimpleHash *,struct SimpleHash* parent);
89 int SimpleHashfirstkey(struct SimpleHash *);
90 struct SimpleIterator* SimpleHashcreateiterator(struct SimpleHash *, struct SimpleHash *);
91 void SimpleHashiterator(struct SimpleHash *, struct SimpleIterator * it);
92 int SimpleHashcount(struct SimpleHash *, int key);
93 void SimpleHashaddAll(struct SimpleHash *, struct SimpleHash * set);
94 struct SimpleHash * SimpleHashimageSet(struct SimpleHash *, int key);
99 struct SimpleNode **bucket;
100 struct ArraySimple *listhead;
101 struct ArraySimple *listtail;
104 struct SimpleHash* parents[10];
105 struct SimpleHash* children[10];
109 inline int count(struct SimpleHash * thisvar) {
110 return thisvar->numelements;
114 /* SimpleHashExcepion *************************************************/
117 /* SimpleIterator *****************************************************/
118 #define ARRAYSIZE 100
121 struct SimpleNode *next;
128 struct SimpleNode nodes[ARRAYSIZE];
129 struct ArraySimple * nextarray;
133 struct SimpleIterator {
134 struct ArraySimple *cur, *tail;
138 inline struct SimpleIterator * noargallocateSimpleIterator() {
139 return (struct SimpleIterator*)malloc(sizeof(struct SimpleIterator));
142 inline struct SimpleIterator * allocateSimpleIterator(struct ArraySimple *start, struct ArraySimple *tl, int tlindex) {
143 struct SimpleIterator *thisvar=(struct SimpleIterator*)malloc(sizeof(struct SimpleIterator));
144 thisvar->cur = start;
146 thisvar->tailindex=tlindex;
151 inline int hasNext(struct SimpleIterator *thisvar) {
152 if (thisvar->cur==thisvar->tail &&
153 thisvar->index==thisvar->tailindex)
155 while((thisvar->index==ARRAYSIZE)||!thisvar->cur->nodes[thisvar->index].inuse) {
156 if (thisvar->index==ARRAYSIZE) {
158 thisvar->cur=thisvar->cur->nextarray;
162 if (thisvar->cur->nodes[thisvar->index].inuse)
168 inline int next(struct SimpleIterator *thisvar) {
169 return thisvar->cur->nodes[thisvar->index++].data;
172 inline int key(struct SimpleIterator *thisvar) {
173 return thisvar->cur->nodes[thisvar->index].key;
177 struct RepairHashNode * allocateRepairHashNode(int setrelation, int rule, int lvalue, int rvalue, int data, int data2,int ismodify);
179 struct RepairHashNode {
180 struct RepairHashNode *next;
181 struct RepairHashNode *lnext;
191 struct RepairHash * noargallocateRepairHash();
192 struct RepairHash * allocateRepairHash(int size);
193 void freeRepairHash(struct RepairHash *);
194 int addset(struct RepairHash *, int setv, int rule, int value, int data);
195 int addrelation(struct RepairHash *, int relation, int rule, int lvalue, int rvalue, int data);
196 int addrelation2(struct RepairHash *, int relation, int rule, int lvalue, int rvalue, int data, int data2);
197 bool containsset(struct RepairHash *, int setv, int rule, int value);
198 bool containsrelation(struct RepairHash *, int relation, int rule, int lvalue, int rvalue);
199 int getset(struct RepairHash *, int setv, int rule, int value);
200 int getrelation(struct RepairHash *, int relation, int rule, int lvalue, int rvalue);
201 int getrelation2(struct RepairHash *, int relation, int rule, int lvalue, int rvalue);
202 int ismodify(struct RepairHash *, int relation, int rule, int lvalue, int rvalue);
207 struct RepairHashNode **bucket;
208 struct RepairHashNode *nodelist;