stupid bugs in our realloc function fixed
[repair.git] / Repair / RepairCompiler / MCC / CRuntime / SimpleHash.h
1 #ifndef SIMPLEHASH_H
2 #define SIMPLEHASH_H
3
4 #ifndef bool
5 #define bool int
6 #endif
7
8 #ifndef true
9 #define true 1
10 #endif
11
12 #ifndef false
13 #define false 0
14 #endif
15
16
17 #include <stdarg.h>
18 #include <stdlib.h>
19
20 /* LinkedHashNode *****************************************************/
21
22 struct LinkedHashNode * allocateLinkedHashNode(int key, int data, struct LinkedHashNode *next);
23 struct LinkedHashNode * noargallocateLinkedHashNode();
24
25 struct LinkedHashNode {
26     struct LinkedHashNode *next;
27     struct LinkedHashNode *lnext,*lprev;
28     int data;
29     int key;
30 };
31
32 /* SimpleList *********************************************************/
33
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 *);
40
41 struct SimpleList {
42     struct LinkedHashNode head;
43     struct LinkedHashNode *ptr;
44 };
45
46
47 /* WorkList *********************************************************/
48 #define WLISTSIZE 4*100
49
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 *);
60
61
62 struct WorkList {
63   struct ListNode *head;
64   struct ListNode *tail;
65   int headoffset;
66   int tailoffset;
67 };
68
69 struct ListNode {
70   int data[WLISTSIZE];
71   struct ListNode *next;
72 };
73
74 /* SimpleHash *********************************************************/
75
76 struct SimpleHash * noargallocateSimpleHash();
77 struct SimpleHash * allocateSimpleHash(int size);
78 void SimpleHashaddChild(struct SimpleHash *thisvar, struct SimpleHash * child);
79 void freeSimpleHash(struct SimpleHash *);
80
81
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 *);
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);
95
96 struct SimpleHash {
97     int numelements;
98     int size;
99     struct SimpleNode **bucket;
100     struct ArraySimple *listhead;
101     struct ArraySimple *listtail;
102     int numparents;
103     int numchildren;
104     struct SimpleHash* parents[10];
105     struct SimpleHash* children[10];
106     int tailindex;
107 };
108
109 inline int SimpleHashcountset(struct SimpleHash * thisvar);
110
111 /* SimpleHashExcepion  *************************************************/
112
113
114 /* SimpleIterator *****************************************************/
115 #define ARRAYSIZE 100
116
117 struct SimpleNode {
118   struct SimpleNode *next;
119   int data;
120   int key;
121   int inuse;
122 };
123
124 struct ArraySimple {
125   struct SimpleNode nodes[ARRAYSIZE];
126   struct ArraySimple * nextarray;
127 };
128
129
130 struct SimpleIterator {
131   struct ArraySimple *cur, *tail;
132   int index,tailindex;
133 };
134
135 inline struct SimpleIterator * noargallocateSimpleIterator();
136
137 inline struct SimpleIterator * allocateSimpleIterator(struct ArraySimple *start, struct ArraySimple *tl, int tlindex);
138
139 inline int hasNext(struct SimpleIterator *thisvar);
140
141 inline int next(struct SimpleIterator *thisvar);
142
143 inline int key(struct SimpleIterator *thisvar);
144
145 struct RepairHashNode * allocateRepairHashNode(int setrelation, int rule, int lvalue, int rvalue, int data, int data2,int ismodify);
146
147
148
149 struct RepairHashNode {
150     struct RepairHashNode *next;
151     struct RepairHashNode *lnext;
152     int data;
153     int data2;
154     int setrelation;
155     int lvalue;
156     int rvalue;
157     int rule;
158     int ismodify;
159 };
160
161 struct RepairHash * noargallocateRepairHash();
162 struct RepairHash * allocateRepairHash(int size);
163 void freeRepairHash(struct RepairHash *);
164 int RepairHashaddset(struct RepairHash *, int setv, int rule, int value, int data);
165 int RepairHashaddrelation(struct RepairHash *, int relation, int rule, int lvalue, int rvalue, int data);
166 int RepairHashaddrelation2(struct RepairHash *, int relation, int rule, int lvalue, int rvalue, int data, int data2);
167 bool RepairHashcontainsset(struct RepairHash *, int setv, int rule, int value);
168 bool RepairHashcontainsrelation(struct RepairHash *, int relation, int rule, int lvalue, int rvalue);
169 int RepairHashgetset(struct RepairHash *, int setv, int rule, int value);
170 int RepairHashgetrelation(struct RepairHash *, int relation, int rule, int lvalue, int rvalue);
171 int RepairHashgetrelation2(struct RepairHash *, int relation, int rule, int lvalue, int rvalue);
172 int RepairHashismodify(struct RepairHash *, int relation, int rule, int lvalue, int rvalue);
173
174 struct RepairHash {
175     int numelements;
176     int size;
177     struct RepairHashNode **bucket;
178     struct RepairHashNode *nodelist;
179
180 };
181
182 #endif