From 45e219eac23ea4a8181f68300fed693d9ac361a0 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 30 May 2014 15:48:29 -0400 Subject: canvas: Use pool. --- libdimension/canvas.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) (limited to 'libdimension/canvas.c') diff --git a/libdimension/canvas.c b/libdimension/canvas.c index 0242671..e290910 100644 --- a/libdimension/canvas.c +++ b/libdimension/canvas.c @@ -24,38 +24,36 @@ */ #include "dimension-internal.h" -#include /* For dmnsn_free() */ -/* Allocate a new canvas, of width x and height y */ +/** cleanup_fn for canvases. */ +static void dmnsn_canvas_cleanup(void *ptr); + dmnsn_canvas * -dmnsn_new_canvas(size_t width, size_t height) +dmnsn_new_canvas(dmnsn_pool *pool, size_t width, size_t height) { - dmnsn_canvas *canvas = DMNSN_MALLOC(dmnsn_canvas); + dmnsn_canvas *canvas = DMNSN_PALLOC_TIDY(pool, dmnsn_canvas, dmnsn_canvas_cleanup); canvas->width = width; canvas->height = height; canvas->optimizers = dmnsn_new_array(sizeof(dmnsn_canvas_optimizer)); canvas->pixels = dmnsn_malloc(sizeof(dmnsn_tcolor)*width*height); - DMNSN_REFCOUNT_INIT(canvas); return canvas; } -/* Delete a dmnsn_canvas allocated with dmnsn_new_canvas */ void -dmnsn_delete_canvas(dmnsn_canvas *canvas) +dmnsn_canvas_cleanup(void *ptr) { - if (DMNSN_DECREF(canvas)) { - /* Free the optimizers */ - DMNSN_ARRAY_FOREACH (dmnsn_canvas_optimizer *, i, canvas->optimizers) { - if (i->free_fn) { - i->free_fn(i->ptr); - } - } - dmnsn_delete_array(canvas->optimizers); + dmnsn_canvas *canvas = ptr; - /* Free the pixels and canvas */ - dmnsn_free(canvas->pixels); - dmnsn_free(canvas); + /* Free the optimizers */ + DMNSN_ARRAY_FOREACH (dmnsn_canvas_optimizer *, i, canvas->optimizers) { + if (i->free_fn) { + i->free_fn(i->ptr); + } } + dmnsn_delete_array(canvas->optimizers); + + /* Free the pixels and canvas */ + dmnsn_free(canvas->pixels); } /* Set a canvas optimizer */ -- cgit v1.2.3