Lines Matching defs:symtab

20 #include <isc/symtab.h>
55 isc_symtab_t *symtab;
62 symtab = (isc_symtab_t *)isc_mem_get(mctx, sizeof(*symtab));
63 if (symtab == NULL)
66 symtab->mctx = NULL;
67 isc_mem_attach(mctx, &symtab->mctx);
68 symtab->table = (eltlist_t *)isc_mem_get(mctx,
70 if (symtab->table == NULL) {
71 isc_mem_putanddetach(&symtab->mctx, symtab, sizeof(*symtab));
75 INIT_LIST(symtab->table[i]);
76 symtab->size = size;
77 symtab->count = 0;
78 symtab->maxload = size * 3 / 4;
79 symtab->undefine_action = undefine_action;
80 symtab->undefine_arg = undefine_arg;
81 symtab->case_sensitive = case_sensitive;
82 symtab->magic = SYMTAB_MAGIC;
84 *symtabp = symtab;
91 isc_symtab_t *symtab;
96 symtab = *symtabp;
97 REQUIRE(VALID_SYMTAB(symtab));
99 for (i = 0; i < symtab->size; i++) {
100 for (elt = HEAD(symtab->table[i]); elt != NULL; elt = nelt) {
102 if (symtab->undefine_action != NULL)
103 (symtab->undefine_action)(elt->key,
106 symtab->undefine_arg);
107 isc_mem_put(symtab->mctx, elt, sizeof(*elt));
110 isc_mem_put(symtab->mctx, symtab->table,
111 symtab->size * sizeof(eltlist_t));
112 symtab->magic = 0;
113 isc_mem_putanddetach(&symtab->mctx, symtab, sizeof(*symtab));
161 isc_symtab_lookup(isc_symtab_t *symtab, const char *key, unsigned int type,
167 REQUIRE(VALID_SYMTAB(symtab));
170 FIND(symtab, key, type, bucket, elt);
182 grow_table(isc_symtab_t *symtab) {
186 REQUIRE(symtab != NULL);
188 newsize = symtab->size * 2;
192 newtable = isc_mem_get(symtab->mctx, newsize * sizeof(eltlist_t));
199 for (i = 0; i < symtab->size; i++) {
202 for (elt = HEAD(symtab->table[i]); elt != NULL; elt = nelt) {
207 UNLINK(symtab->table[i], elt, link);
208 hv = hash(elt->key, symtab->case_sensitive);
213 isc_mem_put(symtab->mctx, symtab->table,
214 symtab->size * sizeof(eltlist_t));
216 symtab->table = newtable;
217 symtab->size = newsize;
218 symtab->maxload = newmax;
222 isc_symtab_define(isc_symtab_t *symtab, const char *key, unsigned int type,
228 REQUIRE(VALID_SYMTAB(symtab));
232 FIND(symtab, key, type, bucket, elt);
238 UNLINK(symtab->table[bucket], elt, link);
239 if (symtab->undefine_action != NULL)
240 (symtab->undefine_action)(elt->key, elt->type,
242 symtab->undefine_arg);
244 elt = (elt_t *)isc_mem_get(symtab->mctx, sizeof(*elt));
248 symtab->count++;
265 PREPEND(symtab->table[bucket], elt, link);
267 if (symtab->count > symtab->maxload)
268 grow_table(symtab);
274 isc_symtab_undefine(isc_symtab_t *symtab, const char *key, unsigned int type) {
278 REQUIRE(VALID_SYMTAB(symtab));
281 FIND(symtab, key, type, bucket, elt);
286 if (symtab->undefine_action != NULL)
287 (symtab->undefine_action)(elt->key, elt->type,
288 elt->value, symtab->undefine_arg);
289 UNLINK(symtab->table[bucket], elt, link);
290 isc_mem_put(symtab->mctx, elt, sizeof(*elt));
291 symtab->count--;
297 isc_symtab_count(isc_symtab_t *symtab) {
298 REQUIRE(VALID_SYMTAB(symtab));
299 return (symtab->count);