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-private.h | |
parent | 6bd72ce74aba4a576e5aa76a5c92bd5557ae97f1 (diff) |
perf: new-tessellator: Deferred trapezoid generation (first try)
Diffstat (limited to 'src/cairo-freelist-private.h')
-rw-r--r-- | src/cairo-freelist-private.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/cairo-freelist-private.h b/src/cairo-freelist-private.h new file mode 100644 index 00000000..7a225ff3 --- /dev/null +++ b/src/cairo-freelist-private.h @@ -0,0 +1,71 @@ +/* + * 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. + */ +#ifndef CAIRO_FREELIST_H +#define CAIRO_FREELIST_H +#include <stddef.h> + +/* Opaque implementation types. */ +struct _cairo_freelist; +struct _cairo_freelist_node; +typedef struct _cairo_freelist cairo_freelist_t; +typedef struct _cairo_freelist_node cairo_freelist_node_t; + +struct _cairo_freelist_node { + cairo_freelist_node_t *next; +}; + +struct _cairo_freelist { + cairo_freelist_node_t *first_free_node; + unsigned nodesize; +}; + + +/* Initialise a freelist that will be responsible for allocating + * nodes of size nodesize. */ +void +_cairo_freelist_init (cairo_freelist_t *freelist, unsigned nodesize); + +/* Deallocate any nodes in the freelist. */ +void +_cairo_freelist_fini (cairo_freelist_t *freelist); + +/* Allocate a new node from the freelist. If the freelist contains no + * nodes, a new one will be allocated using malloc(). The caller is + * responsible for calling _cairo_freelist_free() or free() on the + * returned node. Returns NULL on memory allocation error. */ +void * +_cairo_freelist_alloc (cairo_freelist_t *freelist); + +/* Allocate a new node from the freelist. If the freelist contains no + * nodes, a new one will be allocated using calloc(). The caller is + * responsible for calling _cairo_freelist_free() or free() on the + * returned node. Returns NULL on memory allocation error. */ +void * +_cairo_freelist_calloc (cairo_freelist_t *freelist); + +/* Return a node to the freelist. This does not deallocate the memory, + * but makes it available for later reuse by + * _cairo_freelist_alloc(). */ +void +_cairo_freelist_free (cairo_freelist_t *freelist, void *node); + +#endif /* CAIRO_FREELIST_H */ |