From dc62a48cc5fc95f9bbe7ab2ed2712b70987bde6f Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 10 Apr 2012 10:25:14 +0200 Subject: rbtree: PR1995: API change New functions o _RBTree_Next_unprotected(), o _RBTree_Next(), o _RBTree_Successor_unprotected(), o _RBTree_Predecessor_unprotected(), o rtems_rbtree_successor_unprotected(), and o rtems_rbtree_predecessor_unprotected(). Change prototype of o _RBTree_Successor(), o _RBTree_Predecessor(), o rtems_rbtree_successor(), and o rtems_rbtree_predecessor(). --- cpukit/score/inline/rtems/score/rbtree.inl | 74 +++++++++++++++++++----------- 1 file changed, 48 insertions(+), 26 deletions(-) (limited to 'cpukit/score/inline/rtems') diff --git a/cpukit/score/inline/rtems/score/rbtree.inl b/cpukit/score/inline/rtems/score/rbtree.inl index 2ce0b2bbdb..d646b067b8 100644 --- a/cpukit/score/inline/rtems/score/rbtree.inl +++ b/cpukit/score/inline/rtems/score/rbtree.inl @@ -376,42 +376,64 @@ RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Find_unprotected( return found; } -/** @brief Find the nodes in-order predecessor +/** + * @brief Returns the predecessor of a node. + * + * @param[in] rbtree The red-black tree. + * @param[in] node The node. + * + * @retval NULL The predecessor does not exist. + * @retval otherwise The predecessor node. + */ +RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Predecessor_unprotected( + const RBTree_Control *rbtree, + const RBTree_Node *node +) +{ + return _RBTree_Next_unprotected( rbtree, node, RBT_LEFT ); +} + +/** + * @copydoc _RBTree_Predecessor_unprotected() * - * This function returns a pointer to the in-order predecessor - * of @a the_node if it exists, and NULL if not. + * The function disables the interrupts protect the operation. */ RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Predecessor( - RBTree_Node *the_node - ) + const RBTree_Control *rbtree, + const RBTree_Node *node +) { - RBTree_Node* iter_node; - if (!the_node) return NULL; - iter_node = the_node->child[RBT_LEFT]; - if (!iter_node) return NULL; - while (iter_node->child[RBT_RIGHT]) { - iter_node = iter_node->child[RBT_RIGHT]; - } - return iter_node; + return _RBTree_Next( rbtree, node, RBT_LEFT ); } -/** @brief Find the nodes in-order successor +/** + * @brief Returns the successor of a node. + * + * @param[in] rbtree The red-black tree. + * @param[in] node The node. + * + * @retval NULL The successor does not exist. + * @retval otherwise The successor node. + */ +RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor_unprotected( + const RBTree_Control *rbtree, + const RBTree_Node *node +) +{ + return _RBTree_Next_unprotected( rbtree, node, RBT_RIGHT ); +} + +/** + * @copydoc _RBTree_Successor_unprotected() * - * This function returns a pointer to the in-order successor - * of @a the_node if it exists, and NULL if not. + * The function disables the interrupts protect the operation. */ RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor( - RBTree_Node *the_node - ) + const RBTree_Control *rbtree, + const RBTree_Node *node +) { - RBTree_Node* iter_node; - if (!the_node) return NULL; - iter_node = the_node->child[RBT_RIGHT]; - if (!iter_node) return NULL; - while (iter_node->child[RBT_LEFT]) { - iter_node = iter_node->child[RBT_LEFT]; - } - return iter_node; + return _RBTree_Next( rbtree, node, RBT_RIGHT ); } /** @brief Get the First Node (unprotected) -- cgit v1.2.3