38,10 → 38,11 |
#define CAIRO_RTREE_PRIVATE_H |
|
#include "cairo-compiler-private.h" |
#include "cairo-error-private.h" |
#include "cairo-types-private.h" |
|
#include "cairo-freelist-private.h" |
#include "cairo-list-private.h" |
#include "cairo-list-inline.h" |
|
enum { |
CAIRO_RTREE_NODE_AVAILABLE, |
51,7 → 52,6 |
|
typedef struct _cairo_rtree_node { |
struct _cairo_rtree_node *children[4], *parent; |
void **owner; |
cairo_list_t link; |
uint16_t pinned; |
uint16_t state; |
65,6 → 65,7 |
cairo_list_t pinned; |
cairo_list_t available; |
cairo_list_t evictable; |
void (*destroy) (cairo_rtree_node_t *); |
cairo_freepool_t node_freepool; |
} cairo_rtree_t; |
|
97,7 → 98,8 |
int width, |
int height, |
int min_size, |
int node_size); |
int node_size, |
void (*destroy)(cairo_rtree_node_t *)); |
|
cairo_private cairo_int_status_t |
_cairo_rtree_insert (cairo_rtree_t *rtree, |
111,9 → 113,15 |
int height, |
cairo_rtree_node_t **out); |
|
cairo_private void |
_cairo_rtree_foreach (cairo_rtree_t *rtree, |
void (*func)(cairo_rtree_node_t *, void *data), |
void *data); |
|
static inline void * |
_cairo_rtree_pin (cairo_rtree_t *rtree, cairo_rtree_node_t *node) |
{ |
assert (node->state == CAIRO_RTREE_NODE_OCCUPIED); |
if (! node->pinned) { |
cairo_list_move (&node->link, &rtree->pinned); |
node->pinned = 1; |