summaryrefslogtreecommitdiffstats
path: root/libdimension/map.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdimension/map.c')
-rw-r--r--libdimension/map.c34
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