Subversion Repositories Kolibri OS

Rev

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;