~ubuntu-branches/ubuntu/dapper/fpc/dapper

« back to all changes in this revision

Viewing changes to packages/extra/gtk2/gtk+/gtk/gtkrbtree.inc

  • Committer: Bazaar Package Importer
  • Author(s): Carlos Laviola
  • Date: 2005-05-30 11:59:10 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20050530115910-x5pbzm4qqta4i94h
Tags: 2.0.0-2
debian/fp-compiler.postinst.in: forgot to reapply the patch that
correctly creates the slave link to pc(1).  (Closes: #310907)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// included by gtk2.pas
 
2
 
 
3
{$IFDEF read_forward_definitions}
 
4
{$ENDIF read_forward_definitions}
 
5
 
 
6
//------------------------------------------------------------------------------
 
7
 
 
8
{$IFDEF read_interface_types}
 
9
   PGtkRBNodeColor = ^TGtkRBNodeColor;
 
10
   TGtkRBNodeColor = longint;
 
11
 
 
12
   PGtkRBTree = ^TGtkRBTree;
 
13
   PGtkRBNode = ^TGtkRBNode;
 
14
 
 
15
   TGtkRBTreeTraverseFunc = procedure (tree:PGtkRBTree; node:PGtkRBNode; data:gpointer); cdecl;
 
16
   TGtkRBTree = record
 
17
        root : PGtkRBNode;
 
18
        _nil : PGtkRBNode;
 
19
        parent_tree : PGtkRBTree;
 
20
        parent_node : PGtkRBNode;
 
21
     end;
 
22
 
 
23
{ We keep track of whether the aggregate count of children plus 1
 
24
     for the node itself comes to an even number.  The parity flag is
 
25
     the total count of children mod 2, where the total count of
 
26
     children gets computed in the same way that the total offset gets
 
27
     computed. i.e. not the same as the "count" field below which
 
28
     doesn't include children. We could replace parity with a
 
29
     full-size int field here, and then take % 2 to get the parity flag,
 
30
     but that would use extra memory.
 
31
    }
 
32
{ count is the number of nodes beneath us, plus 1 for ourselves.
 
33
     i.e. node->left->count + node->right->count + 1
 
34
    }
 
35
{ this is the total of sizes of
 
36
     node->left, node->right, our own height, and the height
 
37
     of all trees in ->children, iff children exists because
 
38
     the thing is expanded.
 
39
    }
 
40
{ Child trees  }
 
41
   TGtkRBNode = record
 
42
        flag0 : word;
 
43
        left : PGtkRBNode;
 
44
        right : PGtkRBNode;
 
45
        parent : PGtkRBNode;
 
46
        count : gint;
 
47
        offset : gint;
 
48
        children : PGtkRBTree;
 
49
     end;
 
50
 
 
51
{$ENDIF read_interface_types}
 
52
 
 
53
//------------------------------------------------------------------------------
 
54
 
 
55
{$IFDEF read_interface_rest}
 
56
const
 
57
   GTK_RBNODE_BLACK = 1 shl 0;
 
58
   GTK_RBNODE_RED = 1 shl 1;
 
59
   GTK_RBNODE_IS_PARENT = 1 shl 2;
 
60
   GTK_RBNODE_IS_SELECTED = 1 shl 3;
 
61
   GTK_RBNODE_IS_PRELIT = 1 shl 4;
 
62
   GTK_RBNODE_IS_SEMI_COLLAPSED = 1 shl 5;
 
63
   GTK_RBNODE_IS_SEMI_EXPANDED = 1 shl 6;
 
64
   GTK_RBNODE_INVALID = 1 shl 7;
 
65
   GTK_RBNODE_COLUMN_INVALID = 1 shl 8;
 
66
   GTK_RBNODE_DESCENDANTS_INVALID = 1 shl 9;
 
67
   GTK_RBNODE_NON_COLORS = GTK_RBNODE_IS_PARENT
 
68
                         or GTK_RBNODE_IS_SELECTED
 
69
                         or GTK_RBNODE_IS_PRELIT
 
70
                         or GTK_RBNODE_IS_SEMI_COLLAPSED
 
71
                         or GTK_RBNODE_IS_SEMI_EXPANDED
 
72
                         or GTK_RBNODE_INVALID
 
73
                         or GTK_RBNODE_COLUMN_INVALID
 
74
                         or GTK_RBNODE_DESCENDANTS_INVALID;
 
75
 
 
76
const
 
77
   bm_TGtkRBNode_flags = $3FFF;
 
78
   bp_TGtkRBNode_flags = 0;
 
79
   bm_TGtkRBNode_parity = $4000;
 
80
   bp_TGtkRBNode_parity = 14;
 
81
 
 
82
function flags(a : PGtkRBNode) : guint;
 
83
procedure set_flags(a : PGtkRBNode; __flags : guint);
 
84
function parity(a : PGtkRBNode) : guint;
 
85
procedure set_parity(a : PGtkRBNode; __parity : guint);
 
86
function GTK_RBNODE_GET_COLOR(node: PGtkRBNode) : guint;
 
87
procedure GTK_RBNODE_SET_COLOR(node: PGtkRBNode; color: guint);
 
88
function GTK_RBNODE_GET_HEIGHT(node: PGtkRBNode) : gint;
 
89
 
 
90
procedure GTK_RBNODE_SET_FLAG(node: PGtkRBNode; flag: word);
 
91
procedure GTK_RBNODE_UNSET_FLAG(node: PGtkRBNode; flag: word);
 
92
function GTK_RBNODE_FLAG_SET(node: PGtkRBNode; flag : guint) : boolean;
 
93
 
 
94
procedure _gtk_rbtree_push_allocator(allocator:PGAllocator); cdecl; external gtklib;
 
95
procedure _gtk_rbtree_pop_allocator; cdecl; external gtklib;
 
96
function _gtk_rbtree_new:PGtkRBTree; cdecl; external gtklib;
 
97
procedure _gtk_rbtree_free(tree:PGtkRBTree); cdecl; external gtklib;
 
98
procedure _gtk_rbtree_remove(tree:PGtkRBTree); cdecl; external gtklib;
 
99
procedure _gtk_rbtree_destroy(tree:PGtkRBTree); cdecl; external gtklib;
 
100
function _gtk_rbtree_insert_before(tree:PGtkRBTree; node:PGtkRBNode; height:gint; valid:gboolean):PGtkRBNode; cdecl; external gtklib;
 
101
function _gtk_rbtree_insert_after(tree:PGtkRBTree; node:PGtkRBNode; height:gint; valid:gboolean):PGtkRBNode; cdecl; external gtklib;
 
102
procedure _gtk_rbtree_remove_node(tree:PGtkRBTree; node:PGtkRBNode); cdecl; external gtklib;
 
103
procedure _gtk_rbtree_reorder(tree:PGtkRBTree; new_order:Pgint; length:gint); cdecl; external gtklib;
 
104
function _gtk_rbtree_find_count(tree:PGtkRBTree; count:gint):PGtkRBNode; cdecl; external gtklib;
 
105
procedure _gtk_rbtree_node_set_height(tree:PGtkRBTree; node:PGtkRBNode; height:gint); cdecl; external gtklib;
 
106
procedure _gtk_rbtree_node_mark_invalid(tree:PGtkRBTree; node:PGtkRBNode); cdecl; external gtklib;
 
107
procedure _gtk_rbtree_node_mark_valid(tree:PGtkRBTree; node:PGtkRBNode); cdecl; external gtklib;
 
108
procedure _gtk_rbtree_column_invalid(tree:PGtkRBTree); cdecl; external gtklib;
 
109
procedure _gtk_rbtree_mark_invalid(tree:PGtkRBTree); cdecl; external gtklib;
 
110
procedure _gtk_rbtree_set_fixed_height(tree:PGtkRBTree; height:gint); cdecl; external gtklib;
 
111
function _gtk_rbtree_node_find_offset(tree:PGtkRBTree; node:PGtkRBNode):gint; cdecl; external gtklib;
 
112
function _gtk_rbtree_node_find_parity(tree:PGtkRBTree; node:PGtkRBNode):gint; cdecl; external gtklib;
 
113
function _gtk_rbtree_find_offset(tree:PGtkRBTree; offset:gint; var new_tree:PGtkRBTree; var new_node:PGtkRBNode):gint; cdecl; external gtklib;
 
114
procedure _gtk_rbtree_traverse(tree:PGtkRBTree; node:PGtkRBNode; order:TGTraverseType; func:TGtkRBTreeTraverseFunc; data:gpointer); cdecl; external gtklib;
 
115
function _gtk_rbtree_next(tree:PGtkRBTree; node:PGtkRBNode):PGtkRBNode; cdecl; external gtklib;
 
116
function _gtk_rbtree_prev(tree:PGtkRBTree; node:PGtkRBNode):PGtkRBNode; cdecl; external gtklib;
 
117
procedure _gtk_rbtree_next_full(tree:PGtkRBTree; node:PGtkRBNode; var new_tree:PGtkRBTree; var new_node:PGtkRBNode); cdecl; external gtklib;
 
118
procedure _gtk_rbtree_prev_full(tree:PGtkRBTree; node:PGtkRBNode; var new_tree:PGtkRBTree; var new_node:PGtkRBNode); cdecl; external gtklib;
 
119
function _gtk_rbtree_get_depth(tree:PGtkRBTree):gint; cdecl; external gtklib;
 
120
{ This func checks the integrity of the tree  }
 
121
{$ifdef G_ENABLE_DEBUG  }
 
122
procedure _gtk_rbtree_test(where:Pgchar; tree:PGtkRBTree); cdecl; external gtklib;
 
123
procedure _gtk_rbtree_debug_spew(tree:PGtkRBTree); cdecl; external gtklib;
 
124
{$endif}
 
125
{$ENDIF read_interface_rest}
 
126
 
 
127
//------------------------------------------------------------------------------
 
128
 
 
129
{$IFDEF read_implementation}
 
130
function flags(a : PGtkRBNode) : guint;
 
131
begin
 
132
   flags:=(a^.flag0 and bm_TGtkRBNode_flags) shr bp_TGtkRBNode_flags;
 
133
end;
 
134
 
 
135
procedure set_flags(a : PGtkRBNode; __flags : guint);
 
136
begin
 
137
   a^.flag0:=a^.flag0 or ((__flags shl bp_TGtkRBNode_flags) and bm_TGtkRBNode_flags);
 
138
end;
 
139
 
 
140
function parity(a : PGtkRBNode) : guint;
 
141
begin
 
142
   parity:=(a^.flag0 and bm_TGtkRBNode_parity) shr bp_TGtkRBNode_parity;
 
143
end;
 
144
 
 
145
procedure set_parity(a : PGtkRBNode; __parity : guint);
 
146
begin
 
147
   a^.flag0:=a^.flag0 or ((__parity shl bp_TGtkRBNode_parity) and bm_TGtkRBNode_parity);
 
148
end;
 
149
 
 
150
function GTK_RBNODE_GET_COLOR(node : PGtkRBNode) : guint;
 
151
begin
 
152
  if node=nil then
 
153
    Result:=GTK_RBNODE_BLACK
 
154
  else
 
155
  if (flags(node) and GTK_RBNODE_RED) = GTK_RBNODE_RED then
 
156
    Result:=GTK_RBNODE_RED
 
157
  else
 
158
    Result:=GTK_RBNODE_BLACK;
 
159
end;
 
160
 
 
161
procedure GTK_RBNODE_SET_COLOR(node : PGtkRBNode; color: guint);
 
162
begin
 
163
  if node=nil then exit;
 
164
  if ((flags(node) and color)<>color) then
 
165
    set_flags(node,flags(node) xor (GTK_RBNODE_RED or GTK_RBNODE_BLACK));
 
166
end;
 
167
 
 
168
function GTK_RBNODE_GET_HEIGHT(node : PGtkRBNode) : gint;
 
169
var
 
170
   if_local1 : gint;
 
171
begin
 
172
   if node^.children<>nil then
 
173
     if_local1:=node^.children^.root^.offset
 
174
   else
 
175
     if_local1:=0;
 
176
   GTK_RBNODE_GET_HEIGHT:=node^.offset -
 
177
     (node^.left^.offset + node^.right^.offset + if_local1);
 
178
end;
 
179
 
 
180
function GTK_RBNODE_FLAG_SET(node: PGtkRBNode; flag : guint) : boolean;
 
181
begin
 
182
   GTK_RBNODE_FLAG_SET:=(node<>nil) and ((flags(node) and flag) = flag);
 
183
end;
 
184
 
 
185
procedure GTK_RBNODE_SET_FLAG(node: PGtkRBNode; flag: word);
 
186
begin
 
187
  set_flags(node,flag or flags(node));
 
188
end;
 
189
 
 
190
procedure GTK_RBNODE_UNSET_FLAG(node: PGtkRBNode; flag: word);
 
191
begin
 
192
  set_flags(node,(not flag) and flags(node));
 
193
end;
 
194
 
 
195
 
 
196
{$ENDIF read_implementation}
 
197
// included by gtk2.pas
 
198