diff options
| author | Franklin Wei <git@fwei.tk> | 2016-01-13 18:08:52 -0500 |
|---|---|---|
| committer | Franklin Wei <git@fwei.tk> | 2016-01-13 18:08:52 -0500 |
| commit | cc9c177672edcc65933b15ba91831bf09bbec023 (patch) | |
| tree | 1f717027c56e92acaecf2ccf581c83d979b9a461 /src/hash.c | |
| parent | 06880048df2202b1828e5367b1697aee305a2358 (diff) | |
| download | netcosm-0.2.zip netcosm-0.2.tar.gz netcosm-0.2.tar.bz2 netcosm-0.2.tar.xz | |
rewrite everything to use libev0.2
Diffstat (limited to 'src/hash.c')
| -rw-r--r-- | src/hash.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -16,7 +16,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "hash.h" +#include "netcosm.h" #include <stdlib.h> #include <string.h> @@ -34,6 +34,7 @@ struct hash_map { size_t table_sz; void (*free_key)(void *key); void (*free_data)(void *data); + size_t n_entries; }; unsigned hash_djb(const void *ptr) @@ -63,6 +64,7 @@ void *hash_init(size_t sz, unsigned (*hash_fn)(const void*), ret->table_sz = sz; ret->hash = hash_fn; ret->compare = compare_keys; + ret->n_entries = 0; return ret; } @@ -81,6 +83,7 @@ void hash_setfreedata_cb(void *ptr, void (*cb)(void *data)) void hash_free(void *ptr) { + sig_debugf("freeing map\n"); if(ptr) { struct hash_map *map = ptr; @@ -92,7 +95,10 @@ void hash_free(void *ptr) struct hash_node *next = node->next; if(map->free_data) + { + debugf("freeing data\n"); map->free_data((void*)node->data); + } if(map->free_key) map->free_key((void*)node->key); free(node); @@ -172,6 +178,7 @@ void *hash_insert(void *ptr, const void *key, const void *data) map->table[hash] = new; else last->next = new; + ++map->n_entries; return NULL; } @@ -223,6 +230,7 @@ bool hash_remove(void *ptr, const void *key) map->free_key((void*)iter->key); if(map->free_data) map->free_data((void*)iter->data); + --map->n_entries; free(iter); return true; } @@ -248,3 +256,9 @@ void *hash_getkeyptr(void *ptr, const void *key) } return NULL; } + +size_t hash_size(void *ptr) +{ + struct hash_map *map = ptr; + return map->n_entries; +} |