diff options
author | Joonas Pihlaja <jpihlaja@cc.helsinki.fi> | 2006-11-22 08:30:28 +0200 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2006-11-22 17:55:54 -0800 |
commit | fac3684e686a259658151dac13907fa69f43f727 (patch) | |
tree | 3fe290c85b8f5e2a76dc949f08a6f041115291c2 /src/cairo-freelist.c | |
parent | 6bd72ce74aba4a576e5aa76a5c92bd5557ae97f1 (diff) |
perf: new-tessellator: Deferred trapezoid generation (first try)
Diffstat (limited to 'src/cairo-freelist.c')
-rw-r--r-- | src/cairo-freelist.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/cairo-freelist.c b/src/cairo-freelist.c new file mode 100644 index 00000000..eed1934c --- /dev/null +++ b/src/cairo-freelist.c @@ -0,0 +1,72 @@ +/* + * Copyright © 2006 Joonas Pihlaja + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ +#include <stdlib.h> +#include <string.h> +#include "cairo-freelist-private.h" + +void +_cairo_freelist_init (cairo_freelist_t *freelist, unsigned nodesize) +{ + memset (freelist, 0, sizeof(cairo_freelist_t)); + freelist->nodesize = nodesize; +} + +void +_cairo_freelist_fini (cairo_freelist_t *freelist) +{ + cairo_freelist_node_t *node = freelist->first_free_node; + while (node) { + cairo_freelist_node_t *next = node->next; + free (node); + node = next; + } +} + +void * +_cairo_freelist_alloc (cairo_freelist_t *freelist) +{ + if (freelist->first_free_node) { + cairo_freelist_node_t *node = freelist->first_free_node; + freelist->first_free_node = node->next; + return (void*)node; + } + return malloc (freelist->nodesize); +} + +void * +_cairo_freelist_calloc (cairo_freelist_t *freelist) +{ + void *node = _cairo_freelist_alloc (freelist); + if (node) + memset (node, 0, freelist->nodesize); + return node; +} + +void +_cairo_freelist_free (cairo_freelist_t *freelist, void *voidnode) +{ + cairo_freelist_node_t *node = voidnode; + if (node) { + node->next = freelist->first_free_node; + freelist->first_free_node = node; + } +} |