Rev 1892 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1892 | Rev 3959 | ||
---|---|---|---|
Line 36... | Line 36... | ||
36 | 36 | ||
37 | #ifndef CAIRO_RTREE_PRIVATE_H |
37 | #ifndef CAIRO_RTREE_PRIVATE_H |
Line 38... | Line 38... | ||
38 | #define CAIRO_RTREE_PRIVATE_H |
38 | #define CAIRO_RTREE_PRIVATE_H |
- | 39 | ||
39 | 40 | #include "cairo-compiler-private.h" |
|
Line 40... | Line 41... | ||
40 | #include "cairo-compiler-private.h" |
41 | #include "cairo-error-private.h" |
41 | #include "cairo-types-private.h" |
42 | #include "cairo-types-private.h" |
Line 42... | Line 43... | ||
42 | 43 | ||
43 | #include "cairo-freelist-private.h" |
44 | #include "cairo-freelist-private.h" |
44 | #include "cairo-list-private.h" |
45 | #include "cairo-list-inline.h" |
45 | 46 | ||
46 | enum { |
47 | enum { |
Line 47... | Line 48... | ||
47 | CAIRO_RTREE_NODE_AVAILABLE, |
48 | CAIRO_RTREE_NODE_AVAILABLE, |
48 | CAIRO_RTREE_NODE_DIVIDED, |
49 | CAIRO_RTREE_NODE_DIVIDED, |
49 | CAIRO_RTREE_NODE_OCCUPIED, |
- | |
50 | }; |
50 | CAIRO_RTREE_NODE_OCCUPIED, |
51 | 51 | }; |
|
52 | typedef struct _cairo_rtree_node { |
52 | |
53 | struct _cairo_rtree_node *children[4], *parent; |
53 | typedef struct _cairo_rtree_node { |
54 | void **owner; |
54 | struct _cairo_rtree_node *children[4], *parent; |
Line 63... | Line 63... | ||
63 | cairo_rtree_node_t root; |
63 | cairo_rtree_node_t root; |
64 | int min_size; |
64 | int min_size; |
65 | cairo_list_t pinned; |
65 | cairo_list_t pinned; |
66 | cairo_list_t available; |
66 | cairo_list_t available; |
67 | cairo_list_t evictable; |
67 | cairo_list_t evictable; |
- | 68 | void (*destroy) (cairo_rtree_node_t *); |
|
68 | cairo_freepool_t node_freepool; |
69 | cairo_freepool_t node_freepool; |
69 | } cairo_rtree_t; |
70 | } cairo_rtree_t; |
Line 70... | Line 71... | ||
70 | 71 | ||
71 | cairo_private cairo_rtree_node_t * |
72 | cairo_private cairo_rtree_node_t * |
Line 95... | Line 96... | ||
95 | cairo_private void |
96 | cairo_private void |
96 | _cairo_rtree_init (cairo_rtree_t *rtree, |
97 | _cairo_rtree_init (cairo_rtree_t *rtree, |
97 | int width, |
98 | int width, |
98 | int height, |
99 | int height, |
99 | int min_size, |
100 | int min_size, |
100 | int node_size); |
101 | int node_size, |
- | 102 | void (*destroy)(cairo_rtree_node_t *)); |
|
Line 101... | Line 103... | ||
101 | 103 | ||
102 | cairo_private cairo_int_status_t |
104 | cairo_private cairo_int_status_t |
103 | _cairo_rtree_insert (cairo_rtree_t *rtree, |
105 | _cairo_rtree_insert (cairo_rtree_t *rtree, |
104 | int width, |
106 | int width, |
Line 109... | Line 111... | ||
109 | _cairo_rtree_evict_random (cairo_rtree_t *rtree, |
111 | _cairo_rtree_evict_random (cairo_rtree_t *rtree, |
110 | int width, |
112 | int width, |
111 | int height, |
113 | int height, |
112 | cairo_rtree_node_t **out); |
114 | cairo_rtree_node_t **out); |
Line -... | Line 115... | ||
- | 115 | ||
- | 116 | cairo_private void |
|
- | 117 | _cairo_rtree_foreach (cairo_rtree_t *rtree, |
|
- | 118 | void (*func)(cairo_rtree_node_t *, void *data), |
|
- | 119 | void *data); |
|
113 | 120 | ||
114 | static inline void * |
121 | static inline void * |
115 | _cairo_rtree_pin (cairo_rtree_t *rtree, cairo_rtree_node_t *node) |
122 | _cairo_rtree_pin (cairo_rtree_t *rtree, cairo_rtree_node_t *node) |
- | 123 | { |
|
116 | { |
124 | assert (node->state == CAIRO_RTREE_NODE_OCCUPIED); |
117 | if (! node->pinned) { |
125 | if (! node->pinned) { |
118 | cairo_list_move (&node->link, &rtree->pinned); |
126 | cairo_list_move (&node->link, &rtree->pinned); |
119 | node->pinned = 1; |
127 | node->pinned = 1; |