aboutsummaryrefslogtreecommitdiff
path: root/src/hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hash.c')
-rw-r--r--src/hash.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/hash.c b/src/hash.c
index d5eeba0..9e27fee 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -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;
+}