RTEMS CPU Kit with SuperCore
4.11.3
|
A Red-Black Tree container. More...
![]() |
Macros | |
#define | RTEMS_RBTREE_INITIALIZER_EMPTY(name) RBTREE_INITIALIZER_EMPTY(name) |
RBTree initializer for an empty rbtree with designator name. | |
#define | RTEMS_RBTREE_DEFINE_EMPTY(name) RBTREE_DEFINE_EMPTY(name) |
RBTree definition for an empty rbtree with designator name. | |
Typedefs | |
typedef RBTree_Node | rtems_rbtree_node |
A node that can be manipulated in the rbtree. | |
typedef RBTree_Control | rtems_rbtree_control |
The rbtree's control anchors the rbtree. | |
typedef RBTree_Compare_result | rtems_rbtree_compare_result |
Integer type for compare results. More... | |
typedef RBTree_Compare | rtems_rbtree_compare |
Compares two red-black tree nodes. More... | |
A Red-Black Tree container.
The red-black tree container offers no internal protection against concurrent access. The user must ensure that at most one thread at once can access a red-black tree instance.
typedef RBTree_Compare rtems_rbtree_compare |
Compares two red-black tree nodes.
[in] | first | The first node. |
[in] | second | The second node. |
positive | The key value of the first node is greater than the one of the second node. |
0 | The key value of the first node is equal to the one of the second node. |
negative | The key value of the first node is less than the one of the second node. |
Integer type for compare results.
The type is large enough to represent pointers and 32-bit signed integers.
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.
This function does not set the node off-tree. In case this is desired, then call _RBTree_Set_off_tree() after the extraction.
In case the node to extract is not a node of the tree, then this function yields unpredictable results.
[in] | the_rbtree | The red-black tree control. |
[in] | the_node | The node to extract. |
References _RBTree_Extract().
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.
[in] | the_rbtree | The red-black tree control. |
[in] | the_node | A node specifying the key. |
[in] | compare | The node compare function. |
[in] | is_unique | If true, then return the first node with a key equal to the one of the node specified if it exits, else return the last node if it exists. |
node | A node corresponding to the key. If the tree is not unique and contains duplicate keys, the set of duplicate keys acts as FIFO. |
NULL | No node exists in the tree for the key. |
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_get_max | ( | rtems_rbtree_control * | the_rbtree | ) |
Obtain the max node on a rbtree.
This function removes the max node from the_rbtree and returns a pointer to that node. If the_rbtree is empty, then NULL is returned.
References _RBTree_Get().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_get_min | ( | rtems_rbtree_control * | the_rbtree | ) |
Obtain the min node on a rbtree.
This function removes the min node from the_rbtree and returns a pointer to that node. If the_rbtree is empty, then NULL is returned.
References _RBTree_Get().
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.
This routine initializes the_rbtree structure to manage the contiguous array of number_nodes nodes which starts at starting_address. Each node is of node_size bytes.
RTEMS_INLINE_ROUTINE void rtems_rbtree_initialize_empty | ( | rtems_rbtree_control * | the_rbtree | ) |
Initialize this RBTree as Empty.
This routine initializes the_rbtree to contain zero nodes.
References _RBTree_Initialize_empty().
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.
In case the node is already a node of a tree, then this function yields unpredictable results.
[in] | the_rbtree | The red-black tree control. |
[in] | the_node | The node to insert. |
[in] | compare | The node compare function. |
[in] | is_unique | If true, then reject nodes with a duplicate key, else insert nodes in FIFO order in case the key value is equal to existing nodes. |
NULL | Successfully inserted. |
existing_node | This is a unique insert and there exists a node with an equal key in the tree already. |
RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_empty | ( | const rtems_rbtree_control * | the_rbtree | ) |
Is the RBTree empty.
This function returns true if there a no nodes on the_rbtree and false otherwise.
References _RBTree_Is_empty().
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.
This function returns true if the_node is the max node on the_rbtree and false otherwise.
References _RBTree_Is_first().
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.
This function returns true if the_node is the min node on the_rbtree and false otherwise.
References _RBTree_Is_first().
RTEMS_INLINE_ROUTINE bool rtems_rbtree_is_node_off_tree | ( | const rtems_rbtree_node * | node | ) |
Is the Node off RBTree.
This function returns true if the node is not on a rbtree. A node is off rbtree if the next and previous fields are set to NULL.
References _RBTree_Is_node_off_tree().
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.
The root node may change after insert or extract operations. In case the node is not a node of a tree, then this function yields unpredictable results.
[in] | the_node | The node of interest. |
true | The node is the root node. |
false | Otherwise. |
References _RBTree_Is_root().
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.
This function returns a pointer to the left child node of the_node.
References _RBTree_Left().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_max | ( | const rtems_rbtree_control * | the_rbtree | ) |
Return pointer to RBTree maximum.
This function returns a pointer to the maximum node of the_rbtree.
References _RBTree_First().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_min | ( | const rtems_rbtree_control * | the_rbtree | ) |
Return pointer to RBTree Minimum.
This function returns a pointer to the minimum node of the_rbtree.
References _RBTree_First().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_parent | ( | const rtems_rbtree_node * | the_node | ) |
Returns a pointer to the parent of this node.
The node must have a parent, thus it is invalid to use this function for the root node or a node that is not part of a tree. To test for the root node compare with _RBTree_Root() or use _RBTree_Is_root().
[in] | the_node | The node of interest. |
parent | The parent of this node. |
undefined | The node is the root node or not part of a tree. |
References _RBTree_Parent().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_peek_max | ( | const rtems_rbtree_control * | the_rbtree | ) |
Peek at the max node on a rbtree.
This function returns a pointer to the max node from the_rbtree without changing the tree. If the_rbtree is empty, then NULL is returned.
References _RBTree_First().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_peek_min | ( | const rtems_rbtree_control * | the_rbtree | ) |
Peek at the min node on a rbtree.
This function returns a pointer to the min node from the_rbtree without changing the tree. If the_rbtree is empty, then NULL is returned.
References _RBTree_First().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_predecessor | ( | const rtems_rbtree_node * | node | ) |
Returns the predecessor of a node.
[in] | node | is the node. |
NULL | The predecessor does not exist. Otherwise it returns the predecessor node. |
References _RBTree_Predecessor().
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.
This function returns a pointer to the right child node of the_node.
References _RBTree_Right().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_root | ( | const rtems_rbtree_control * | the_rbtree | ) |
Return pointer to RBTree root.
This function returns a pointer to the root node of the_rbtree.
References _RBTree_Root().
RTEMS_INLINE_ROUTINE void rtems_rbtree_set_off_tree | ( | rtems_rbtree_node * | node | ) |
Set off RBtree.
This function sets the next and previous fields of the node to NULL indicating the node is not part of any rbtree.
References _RBTree_Set_off_tree().
RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_successor | ( | const rtems_rbtree_node * | node | ) |
Returns the successor of a node.
[in] | node | is the node. |
NULL | The successor does not exist. Otherwise the successor node. |
References _RBTree_Successor().