Lines Matching defs:htab

47 lookup (NAME *htab, HASHTYPE hval, TYPE val __attribute__ ((unused)))
51 size_t idx = 1 + (hval < htab->size ? hval : hval % htab->size);
53 if (htab->table[idx].hashval != 0)
57 if (htab->table[idx].hashval == hval
58 && COMPARE (htab->table[idx].data, val) == 0)
62 hash = 1 + hval % (htab->size - 2);
67 idx = htab->size + idx - hash;
72 if (htab->table[idx].hashval == hval
73 && COMPARE (htab->table[idx].data, val) == 0)
76 while (htab->table[idx].hashval);
83 insert_entry_2 (NAME *htab, HASHTYPE hval, size_t idx, TYPE data)
86 if (htab->table[idx].hashval == 0)
89 htab->table[idx].next = htab->first;
90 htab->first = &htab->table[idx];
93 if (htab->first == NULL)
94 htab->first = htab->table[idx].next = &htab->table[idx];
97 htab->table[idx].next = htab->first->next;
98 htab->first = htab->first->next = &htab->table[idx];
104 htab->table[idx].hashval = hval;
105 htab->table[idx].data = data;
107 ++htab->filled;
108 if (100 * htab->filled > 90 * htab->size)
112 __typeof__ (htab->first) first;
114 __typeof__ (htab->first) runp;
117 size_t old_size = htab->size;
120 name##_ent *table = htab->table
124 htab->size = next_prime (htab->size * 2);
125 htab->filled = 0;
127 first = htab->first;
128 htab->first = NULL;
130 htab->table = calloc ((1 + htab->size), sizeof (htab->table[0]));
131 if (htab->table == NULL)
135 htab->table = table;
145 insert_entry_2 (htab, first->hashval,
146 lookup (htab, first->hashval, first->data),
155 insert_entry_2 (htab, runp->hashval,
156 lookup (htab, runp->hashval, runp->data), runp->data);
162 insert_entry_2 (htab, table[idx].hashval,
163 lookup (htab, table[idx].hashval, table[idx].data),
176 INIT(NAME) (NAME *htab, size_t init_size)
182 htab->size = init_size;
183 htab->filled = 0;
185 htab->first = NULL;
187 htab->table = calloc ((init_size + 1), sizeof (htab->table[0]));
188 if (htab->table == NULL)
199 FREE(NAME) (NAME *htab)
201 free (htab->table);
210 INSERT(NAME) (NAME *htab, HASHTYPE hval, TYPE data)
217 idx = lookup (htab, hval, data);
219 if (htab->table[idx].hashval != 0)
224 insert_entry_2 (htab, hval, idx, data);
234 INSERT(NAME) (NAME *htab, HASHTYPE hval, TYPE data)
241 idx = lookup (htab, hval, data);
244 insert_entry_2 (htab, hval, idx, data);
254 FIND(NAME) (NAME *htab, HASHTYPE hval, TYPE val)
261 idx = lookup (htab, hval, val);
263 if (htab->table[idx].hashval == 0)
266 return htab->table[idx].data;
275 ITERATEFCT(NAME) (NAME *htab, void **ptr)
284 p = htab->first;
296 if (htab->first == NULL)
298 p = htab->first->next;
302 if (p == htab->first)