RTEMS CPU Kit with SuperCore  4.11.3
rbtree.h
Go to the documentation of this file.
1 
12 /*
13  * Copyright (c) 2010 Gedare Bloom.
14  *
15  * The license and distribution terms for this file may be
16  * found in the file LICENSE in this distribution or at
17  * http://www.rtems.org/license/LICENSE.
18  */
19 
20 #ifndef _RTEMS_RBTREE_H
21 #define _RTEMS_RBTREE_H
22 
23 #include <rtems/score/rbtree.h>
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
49 
56 
61 
66 
70 #define RTEMS_RBTREE_INITIALIZER_EMPTY(name) \
71  RBTREE_INITIALIZER_EMPTY(name)
72 
76 #define RTEMS_RBTREE_DEFINE_EMPTY(name) \
77  RBTREE_DEFINE_EMPTY(name)
78 
87  rtems_rbtree_control *the_rbtree,
88  rtems_rbtree_compare compare,
89  void *starting_address,
90  size_t number_nodes,
91  size_t node_size,
92  bool is_unique
93 )
94 {
95  _RBTree_Initialize( the_rbtree, compare, starting_address,
96  number_nodes, node_size, is_unique);
97 }
98 
105  rtems_rbtree_control *the_rbtree
106 )
107 {
108  _RBTree_Initialize_empty( the_rbtree );
109 }
110 
118  rtems_rbtree_node *node
119 )
120 {
121  _RBTree_Set_off_tree( node );
122 }
123 
131  const rtems_rbtree_node *node
132 )
133 {
134  return _RBTree_Is_node_off_tree( node );
135 }
136 
143  const rtems_rbtree_control *the_rbtree
144 )
145 {
146  return _RBTree_Root( the_rbtree );
147 }
148 
155  const rtems_rbtree_control *the_rbtree
156 )
157 {
158  return _RBTree_First( the_rbtree, RBT_LEFT );
159 }
160 
167  const rtems_rbtree_control *the_rbtree
168 )
169 {
170  return _RBTree_First( the_rbtree, RBT_RIGHT );
171 }
172 
179  const rtems_rbtree_node *the_node
180 )
181 {
182  return _RBTree_Left( the_node );
183 }
184 
191  const rtems_rbtree_node *the_node
192 )
193 {
194  return _RBTree_Right( the_node );
195 }
196 
201  const rtems_rbtree_node *the_node
202 )
203 {
204  return _RBTree_Parent( the_node );
205 }
206 
214  const rtems_rbtree_control *the_rbtree
215 )
216 {
217  return _RBTree_Is_empty( the_rbtree );
218 }
219 
227  const rtems_rbtree_control *the_rbtree,
228  const rtems_rbtree_node *the_node
229 )
230 {
231  return _RBTree_Is_first( the_rbtree, the_node, RBT_LEFT );
232 }
233 
241  const rtems_rbtree_control *the_rbtree,
242  const rtems_rbtree_node *the_node
243 )
244 {
245  return _RBTree_Is_first( the_rbtree, the_node, RBT_RIGHT );
246 }
247 
252  const rtems_rbtree_node *the_node
253 )
254 {
255  return _RBTree_Is_root( the_node );
256 }
257 
262  const rtems_rbtree_control *the_rbtree,
263  const rtems_rbtree_node *the_node,
264  rtems_rbtree_compare compare,
265  bool is_unique
266 )
267 {
268  return _RBTree_Find( the_rbtree, the_node, compare, is_unique );
269 }
270 
275  const rtems_rbtree_node *node
276 )
277 {
278  return _RBTree_Predecessor( node );
279 }
280 
285  const rtems_rbtree_node *node
286 )
287 {
288  return _RBTree_Successor( node );
289 }
290 
295  rtems_rbtree_control *the_rbtree,
296  rtems_rbtree_node *the_node
297 )
298 {
299  _RBTree_Extract( the_rbtree, the_node );
300 }
301 
310  rtems_rbtree_control *the_rbtree
311 )
312 {
313  return _RBTree_Get( the_rbtree, RBT_LEFT );
314 }
315 
324  rtems_rbtree_control *the_rbtree
325 )
326 {
327  return _RBTree_Get( the_rbtree, RBT_RIGHT );
328 }
329 
338  const rtems_rbtree_control *the_rbtree
339 )
340 {
341  return _RBTree_First( the_rbtree, RBT_LEFT );
342 }
343 
352  const rtems_rbtree_control *the_rbtree
353 )
354 {
355  return _RBTree_First( the_rbtree, RBT_RIGHT );
356 }
357 
362  rtems_rbtree_control *the_rbtree,
363  rtems_rbtree_node *the_node,
364  rtems_rbtree_compare compare,
365  bool is_unique
366 )
367 {
368  return _RBTree_Insert( the_rbtree, the_node, compare, is_unique );
369 }
370 
373 #ifdef __cplusplus
374 }
375 #endif
376 
377 #endif
378 /* end of include file */
RTEMS_INLINE_ROUTINE bool _RBTree_Is_empty(const RBTree_Control *the_rbtree)
Is the RBTree empty.
Definition: rbtree.h:397
RBTree_Node rtems_rbtree_node
A node that can be manipulated in the rbtree.
Definition: rbtree.h:48
RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_node_off_tree(const rtems_rbtree_node *node)
Is the Node off RBTree.
Definition: rbtree.h:130
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_find(const rtems_rbtree_control *the_rbtree, const rtems_rbtree_node *the_node, rtems_rbtree_compare compare, bool is_unique)
Tries to find a node for the specified key in the tree.
Definition: rbtree.h:261
#define RTEMS_INLINE_ROUTINE
The following (in conjunction with compiler arguments) are used to choose between the use of static i...
Definition: basedefs.h:135
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_Root(const RBTree_Control *the_rbtree)
Returns a pointer to root node of the red-black tree.
Definition: rbtree.h:314
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_predecessor(const rtems_rbtree_node *node)
Returns the predecessor of a node.
Definition: rbtree.h:274
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_First(const RBTree_Control *the_rbtree, RBTree_Direction dir)
Return pointer to RBTree&#39;s first node.
Definition: rbtree.h:327
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_parent(const rtems_rbtree_node *the_node)
Returns a pointer to the parent of this node.
Definition: rbtree.h:200
RBTree_Compare_result(* RBTree_Compare)(const RBTree_Node *first, const RBTree_Node *second)
Compares two red-black tree nodes.
Definition: rbtree.h:114
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_get_min(rtems_rbtree_control *the_rbtree)
Obtain the min node on a rbtree.
Definition: rbtree.h:309
RTEMS_INLINE_ROUTINE void rtems_rbtree_initialize_empty(rtems_rbtree_control *the_rbtree)
Initialize this RBTree as Empty.
Definition: rbtree.h:104
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_successor(const rtems_rbtree_node *node)
Returns the successor of a node.
Definition: rbtree.h:284
RTEMS_INLINE_ROUTINE void rtems_rbtree_initialize(rtems_rbtree_control *the_rbtree, rtems_rbtree_compare compare, void *starting_address, size_t number_nodes, size_t node_size, bool is_unique)
Initialize a RBTree header.
Definition: rbtree.h:86
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_root(const rtems_rbtree_control *the_rbtree)
Return pointer to RBTree root.
Definition: rbtree.h:142
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_min(const rtems_rbtree_control *the_rbtree)
Return pointer to RBTree Minimum.
Definition: rbtree.h:154
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_get_max(rtems_rbtree_control *the_rbtree)
Obtain the max node on a rbtree.
Definition: rbtree.h:323
long RBTree_Compare_result
Integer type for compare results.
Definition: rbtree.h:99
RBTree_Control rtems_rbtree_control
The rbtree&#39;s control anchors the rbtree.
Definition: rbtree.h:55
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_Get(RBTree_Control *the_rbtree, RBTree_Direction dir)
Gets a node with an extremal key value from the red-black tree.
Definition: rbtree.h:507
RTEMS_INLINE_ROUTINE void rtems_rbtree_set_off_tree(rtems_rbtree_node *node)
Set off RBtree.
Definition: rbtree.h:117
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_peek_min(const rtems_rbtree_control *the_rbtree)
Peek at the min node on a rbtree.
Definition: rbtree.h:337
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_Predecessor(const RBTree_Node *node)
Returns the predecessor of a node.
Definition: rbtree.h:469
Constants and Structures Associated with the Red-Black Tree Handler.
RTEMS_INLINE_ROUTINE void rtems_rbtree_extract(rtems_rbtree_control *the_rbtree, rtems_rbtree_node *the_node)
Extracts (removes) the node from the red-black tree.
Definition: rbtree.h:294
RBTree_Node * _RBTree_Insert(RBTree_Control *the_rbtree, RBTree_Node *the_node, RBTree_Compare compare, bool is_unique)
Inserts the node into the red-black tree.
Definition: rbtreeinsert.c:88
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_Right(const RBTree_Node *the_node)
Return pointer to the right of this node.
Definition: rbtree.h:379
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_insert(rtems_rbtree_control *the_rbtree, rtems_rbtree_node *the_node, rtems_rbtree_compare compare, bool is_unique)
Inserts the node into the red-black tree.
Definition: rbtree.h:361
RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_empty(const rtems_rbtree_control *the_rbtree)
Is the RBTree empty.
Definition: rbtree.h:213
RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_root(const rtems_rbtree_node *the_node)
Returns true if this node is the root node of a red-black tree, and false otherwise.
Definition: rbtree.h:251
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_Parent(const RBTree_Node *the_node)
Returns a pointer to the parent of this node.
Definition: rbtree.h:347
RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_max(const rtems_rbtree_control *the_rbtree, const rtems_rbtree_node *the_node)
Is this the maximum node on the RBTree.
Definition: rbtree.h:240
RBTree_Compare rtems_rbtree_compare
Compares two red-black tree nodes.
Definition: rbtree.h:65
RTEMS_INLINE_ROUTINE bool _RBTree_Is_node_off_tree(const RBTree_Node *the_node)
Returns true, if this red-black tree node is off-tree, and false otherwise.
Definition: rbtree.h:295
RTEMS_INLINE_ROUTINE void _RBTree_Set_off_tree(RBTree_Node *the_node)
Sets a red-black tree node as off-tree.
Definition: rbtree.h:279
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_peek_max(const rtems_rbtree_control *the_rbtree)
Peek at the max node on a rbtree.
Definition: rbtree.h:351
void _RBTree_Initialize(RBTree_Control *the_rbtree, RBTree_Compare compare, void *starting_address, size_t number_nodes, size_t node_size, bool is_unique)
Initialize a RBTree Header.
Definition: rbtree.c:25
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_left(const rtems_rbtree_node *the_node)
Return pointer to the left child node from this node.
Definition: rbtree.h:178
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_Successor(const RBTree_Node *node)
Returns the successor of a node.
Definition: rbtree.h:483
RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_min(const rtems_rbtree_control *the_rbtree, const rtems_rbtree_node *the_node)
Is this the minimum node on the RBTree.
Definition: rbtree.h:226
RTEMS_INLINE_ROUTINE RBTree_Node * _RBTree_Left(const RBTree_Node *the_node)
Return pointer to the left of this node.
Definition: rbtree.h:363
This is used to manage a RBT.
Definition: rbtree.h:138
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_right(const rtems_rbtree_node *the_node)
Return pointer to the right child node from this node.
Definition: rbtree.h:190
RBTree_Node * _RBTree_Find(const RBTree_Control *the_rbtree, const RBTree_Node *the_node, RBTree_Compare compare, bool is_unique)
Tries to find a node for the specified key in the tree.
Definition: rbtreefind.c:22
void _RBTree_Extract(RBTree_Control *the_rbtree, RBTree_Node *the_node)
Extracts (removes) the node from the red-black tree.
Definition: rbtreeextract.c:95
RTEMS_INLINE_ROUTINE bool _RBTree_Is_root(const RBTree_Node *the_node)
Returns true if this node is the root node of a red-black tree, and false otherwise.
Definition: rbtree.h:439
This is used to manage each element (node) which is placed on a RBT.
Definition: rbtree.h:75
RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty(RBTree_Control *the_rbtree)
Initialize this RBTree as empty.
Definition: rbtree.h:451
RTEMS_INLINE_ROUTINE rtems_rbtree_node * rtems_rbtree_max(const rtems_rbtree_control *the_rbtree)
Return pointer to RBTree maximum.
Definition: rbtree.h:166
RBTree_Compare_result rtems_rbtree_compare_result
Integer type for compare results.
Definition: rbtree.h:60
RTEMS_INLINE_ROUTINE bool _RBTree_Is_first(const RBTree_Control *the_rbtree, const RBTree_Node *the_node, RBTree_Direction dir)
Is this the first node on the RBTree.
Definition: rbtree.h:415