Lines Matching refs:map
67 default_delete_func(const struct keymap *map,
103 * Create a new map.
113 struct keymap *map = MALLOC_STRUCT(keymap);
114 if (!map)
117 map->cso = cso_hash_create();
118 if (!map->cso) {
119 FREE(map);
123 map->max_entries = maxEntries;
124 map->num_entries = 0;
125 map->key_size = keySize;
126 map->delete_func = deleteFunc ? deleteFunc : default_delete_func;
128 return map;
138 util_delete_keymap(struct keymap *map, void *user)
140 util_keymap_remove_all(map, user);
141 cso_hash_delete(map->cso);
142 FREE(map);
147 hash_table_find_iter(const struct keymap *map, const void *key,
153 iter = cso_hash_find(map->cso, key_hash);
156 if (!memcmp(item->key, key, map->key_size))
166 hash_table_find_item(const struct keymap *map, const void *key,
169 struct cso_hash_iter iter = hash_table_find_iter(map, key, key_hash);
184 * If the maximum capacity of the map is reached an old entry
188 util_keymap_insert(struct keymap *map, const void *key,
195 assert(map);
196 if (!map)
199 key_hash = hash(key, map->key_size);
201 item = hash_table_find_item(map, key, key_hash);
204 map->delete_func(map, item->key, item->value, user);
213 item->key = mem_dup(key, map->key_size);
216 iter = cso_hash_insert(map->cso, key_hash, item);
222 map->num_entries++;
229 * Look up a key in the map and return the associated data pointer.
232 util_keymap_lookup(const struct keymap *map, const void *key)
237 assert(map);
238 if (!map)
241 key_hash = hash(key, map->key_size);
243 item = hash_table_find_item(map, key, key_hash);
252 * Remove an entry from the map.
257 util_keymap_remove(struct keymap *map, const void *key, void *user)
263 assert(map);
264 if (!map)
267 key_hash = hash(key, map->key_size);
269 iter = hash_table_find_iter(map, key, key_hash);
277 map->delete_func(map, item->key, item->value, user);
281 map->num_entries--;
283 cso_hash_erase(map->cso, iter);
288 * Remove all entries from the map, calling the delete callback for each.
292 util_keymap_remove_all(struct keymap *map, void *user)
297 assert(map);
298 if (!map)
301 iter = cso_hash_first_node(map->cso);
304 cso_hash_take(map->cso, cso_hash_iter_key(iter));
305 map->delete_func(map, item->key, item->value, user);
308 iter = cso_hash_first_node(map->cso);
314 util_keymap_info(const struct keymap *map)
317 (void *) map, map->num_entries, map->max_entries);