aboutsummaryrefslogtreecommitdiff
path: root/src/multimap.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-02-20 20:37:06 -0500
committerFranklin Wei <git@fwei.tk>2016-02-28 16:30:21 -0500
commit2c687e77cd9ae3fd01010d7b36c8d0082bb76315 (patch)
treeb8cd58cea075a3c94cb2f1417e6eaea27865b827 /src/multimap.c
parent02de31c48c021742c6245b711790f6d853866c36 (diff)
downloadnetcosm-2c687e77cd9ae3fd01010d7b36c8d0082bb76315.zip
netcosm-2c687e77cd9ae3fd01010d7b36c8d0082bb76315.tar.gz
netcosm-2c687e77cd9ae3fd01010d7b36c8d0082bb76315.tar.bz2
netcosm-2c687e77cd9ae3fd01010d7b36c8d0082bb76315.tar.xz
implements aliases and other assorted features/enhancements
Diffstat (limited to 'src/multimap.c')
-rw-r--r--src/multimap.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/multimap.c b/src/multimap.c
index d609d0f..b958db0 100644
--- a/src/multimap.c
+++ b/src/multimap.c
@@ -203,11 +203,17 @@ size_t multimap_delete(void *ptr, const void *key, const void *val)
next = iter->next;
if(!map->compare_val(val, iter->val))
{
+ if(map->free_data)
+ map->free_data(iter->val);
+ if(map->free_key)
+ map->free_key((void*)iter->key);
+
if(last)
last->next = iter->next;
else
node->list = iter->next;
free(iter);
+
++deleted;
--node->n_pairs;
--map->total_pairs;
@@ -250,9 +256,9 @@ size_t multimap_delete_all(void *ptr, const void *key)
return 0;
}
-const struct multimap_list *multimap_iterate(void *ptr, void **save, size_t *n_pairs)
+const struct multimap_list *multimap_iterate(const void *ptr, void **save, size_t *n_pairs)
{
- struct multimap_t *map = ptr;
+ const struct multimap_t *map = ptr;
CHECK_SENTINEL(map);
struct multimap_node *node;