Lines Matching refs:symtab

29 #include <isc/symtab.h>
64 isc_symtab_t *symtab;
71 symtab = (isc_symtab_t *)isc_mem_get(mctx, sizeof(*symtab));
72 if (symtab == NULL)
75 symtab->mctx = NULL;
76 isc_mem_attach(mctx, &symtab->mctx);
77 symtab->table = (eltlist_t *)isc_mem_get(mctx,
79 if (symtab->table == NULL) {
80 isc_mem_putanddetach(&symtab->mctx, symtab, sizeof(*symtab));
84 INIT_LIST(symtab->table[i]);
85 symtab->size = size;
86 symtab->count = 0;
87 symtab->maxload = size * 3 / 4;
88 symtab->undefine_action = undefine_action;
89 symtab->undefine_arg = undefine_arg;
90 symtab->case_sensitive = case_sensitive;
91 symtab->magic = SYMTAB_MAGIC;
93 *symtabp = symtab;
100 isc_symtab_t *symtab;
105 symtab = *symtabp;
106 REQUIRE(VALID_SYMTAB(symtab));
108 for (i = 0; i < symtab->size; i++) {
109 for (elt = HEAD(symtab->table[i]); elt != NULL; elt = nelt) {
111 if (symtab->undefine_action != NULL)
112 (symtab->undefine_action)(elt->key,
115 symtab->undefine_arg);
116 isc_mem_put(symtab->mctx, elt, sizeof(*elt));
119 isc_mem_put(symtab->mctx, symtab->table,
120 symtab->size * sizeof(eltlist_t));
121 symtab->magic = 0;
122 isc_mem_putanddetach(&symtab->mctx, symtab, sizeof(*symtab));
170 isc_symtab_lookup(isc_symtab_t *symtab, const char *key, unsigned int type,
176 REQUIRE(VALID_SYMTAB(symtab));
179 FIND(symtab, key, type, bucket, elt);
191 grow_table(isc_symtab_t *symtab) {
195 REQUIRE(symtab != NULL);
197 newsize = symtab->size * 2;
201 newtable = isc_mem_get(symtab->mctx, newsize * sizeof(eltlist_t));
208 for (i = 0; i < symtab->size; i++) {
211 for (elt = HEAD(symtab->table[i]); elt != NULL; elt = nelt) {
216 UNLINK(symtab->table[i], elt, link);
217 hv = hash(elt->key, symtab->case_sensitive);
222 isc_mem_put(symtab->mctx, symtab->table,
223 symtab->size * sizeof(eltlist_t));
225 symtab->table = newtable;
226 symtab->size = newsize;
227 symtab->maxload = newmax;
231 isc_symtab_define(isc_symtab_t *symtab, const char *key, unsigned int type,
237 REQUIRE(VALID_SYMTAB(symtab));
241 FIND(symtab, key, type, bucket, elt);
247 UNLINK(symtab->table[bucket], elt, link);
248 if (symtab->undefine_action != NULL)
249 (symtab->undefine_action)(elt->key, elt->type,
251 symtab->undefine_arg);
253 elt = (elt_t *)isc_mem_get(symtab->mctx, sizeof(*elt));
257 symtab->count++;
274 PREPEND(symtab->table[bucket], elt, link);
276 if (symtab->count > symtab->maxload)
277 grow_table(symtab);
283 isc_symtab_undefine(isc_symtab_t *symtab, const char *key, unsigned int type) {
287 REQUIRE(VALID_SYMTAB(symtab));
290 FIND(symtab, key, type, bucket, elt);
295 if (symtab->undefine_action != NULL)
296 (symtab->undefine_action)(elt->key, elt->type,
297 elt->value, symtab->undefine_arg);
298 UNLINK(symtab->table[bucket], elt, link);
299 isc_mem_put(symtab->mctx, elt, sizeof(*elt));
300 symtab->count--;