diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2014-05-30 19:23:34 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2014-05-30 19:23:34 -0400 |
commit | 72daebf48e4a27de9f6633b2693ab96fb4ef1e44 (patch) | |
tree | 41d98c736ea9fcb6cdc47c621130b08b48a145de /libdimension/map.c | |
parent | 8807ab192b36acbc94e11790e9261c799ce77892 (diff) | |
download | dimension-72daebf48e4a27de9f6633b2693ab96fb4ef1e44.tar.xz |
map: Use pool.
Diffstat (limited to 'libdimension/map.c')
-rw-r--r-- | libdimension/map.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/libdimension/map.c b/libdimension/map.c index 963f170..df07ec8 100644 --- a/libdimension/map.c +++ b/libdimension/map.c @@ -31,10 +31,24 @@ typedef struct dmnsn_map_entry { char object[]; } dmnsn_map_entry; +static void +dmnsn_map_cleanup(void *ptr) +{ + dmnsn_map *map = ptr; + if (map->free_fn) { + for (size_t i = 0; i < dmnsn_array_size(map->array); ++i) { + dmnsn_map_entry *entry = dmnsn_array_at(map->array, i); + map->free_fn(entry->object); + } + } + + dmnsn_delete_array(map->array); +} + dmnsn_map * -dmnsn_new_map(size_t size) +dmnsn_new_map(dmnsn_pool *pool, size_t size) { - dmnsn_map *map = DMNSN_MALLOC(dmnsn_map); + dmnsn_map *map = DMNSN_PALLOC_TIDY(pool, dmnsn_map, dmnsn_map_cleanup); map->free_fn = NULL; map->obj_size = size; map->array = dmnsn_new_array(sizeof(dmnsn_map_entry) + size); @@ -42,22 +56,6 @@ dmnsn_new_map(size_t size) } void -dmnsn_delete_map(dmnsn_map *map) -{ - if (map) { - if (map->free_fn) { - for (size_t i = 0; i < dmnsn_array_size(map->array); ++i) { - dmnsn_map_entry *entry = dmnsn_array_at(map->array, i); - map->free_fn(entry->object); - } - } - - dmnsn_delete_array(map->array); - dmnsn_free(map); - } -} - -void dmnsn_map_add_entry(dmnsn_map *map, double n, const void *obj) { dmnsn_map_entry *entry |