From 341f629614052656f1e1676143595a7be908dec2 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 21 Aug 2015 05:39:59 +0200 Subject: rbtree: Add _RBTree_Minimum(), _RBTree_Maximum() --- cpukit/sapi/include/rtems/rbtree.h | 16 +++++------- cpukit/score/include/rtems/score/rbtree.h | 30 ++++++++++++++++++++++ .../score/include/rtems/score/scheduleredfimpl.h | 2 +- cpukit/score/src/threadqops.c | 2 +- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/cpukit/sapi/include/rtems/rbtree.h b/cpukit/sapi/include/rtems/rbtree.h index 900506fdc7..cf4cd60a9a 100644 --- a/cpukit/sapi/include/rtems/rbtree.h +++ b/cpukit/sapi/include/rtems/rbtree.h @@ -147,27 +147,23 @@ RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_root( } /** - * @brief Return pointer to RBTree Minimum - * - * This function returns a pointer to the minimum node of @a the_rbtree. + * @copydoc _RBTree_Minimum() */ RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_min( const rtems_rbtree_control *the_rbtree ) { - return _RBTree_First( the_rbtree, RBT_LEFT ); + return _RBTree_Minimum( the_rbtree ); } /** - * @brief Return pointer to RBTree maximum. - * - * This function returns a pointer to the maximum node of @a the_rbtree. + * @copydoc _RBTree_Maximum() */ RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_max( const rtems_rbtree_control *the_rbtree ) { - return _RBTree_First( the_rbtree, RBT_RIGHT ); + return _RBTree_Maximum( the_rbtree ); } /** @@ -338,7 +334,7 @@ RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_peek_min( const rtems_rbtree_control *the_rbtree ) { - return _RBTree_First( the_rbtree, RBT_LEFT ); + return rtems_rbtree_min( the_rbtree ); } /** @@ -352,7 +348,7 @@ RTEMS_INLINE_ROUTINE rtems_rbtree_node *rtems_rbtree_peek_max( const rtems_rbtree_control *the_rbtree ) { - return _RBTree_First( the_rbtree, RBT_RIGHT ); + return rtems_rbtree_max( the_rbtree ); } /** diff --git a/cpukit/score/include/rtems/score/rbtree.h b/cpukit/score/include/rtems/score/rbtree.h index 299b75ad2c..9c5bf65e34 100644 --- a/cpukit/score/include/rtems/score/rbtree.h +++ b/cpukit/score/include/rtems/score/rbtree.h @@ -483,6 +483,36 @@ RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty( the_rbtree->first[RBT_RIGHT] = NULL; } +/** + * @brief Returns the minimum node of the red-black tree. + * + * @param[in] the_rbtree The red-black tree control. + * + * @retval NULL The red-black tree is empty. + * @retval node The minimum node. + */ +RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Minimum( + const RBTree_Control *the_rbtree +) +{ + return _RBTree_First( the_rbtree, RBT_LEFT ); +} + +/** + * @brief Returns the maximum node of the red-black tree. + * + * @param[in] the_rbtree The red-black tree control. + * + * @retval NULL The red-black tree is empty. + * @retval node The maximum node. + */ +RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Maximum( + const RBTree_Control *the_rbtree +) +{ + return _RBTree_First( the_rbtree, RBT_RIGHT ); +} + /** * @brief Returns the predecessor of a node. * diff --git a/cpukit/score/include/rtems/score/scheduleredfimpl.h b/cpukit/score/include/rtems/score/scheduleredfimpl.h index af0749df88..4feea71e51 100644 --- a/cpukit/score/include/rtems/score/scheduleredfimpl.h +++ b/cpukit/score/include/rtems/score/scheduleredfimpl.h @@ -87,7 +87,7 @@ RTEMS_INLINE_ROUTINE void _Scheduler_EDF_Schedule_body( { Scheduler_EDF_Context *context = _Scheduler_EDF_Get_context( scheduler ); - RBTree_Node *first = _RBTree_First( &context->Ready, RBT_LEFT ); + RBTree_Node *first = _RBTree_Minimum( &context->Ready ); Scheduler_EDF_Node *node = RTEMS_CONTAINER_OF( first, Scheduler_EDF_Node, Node ); Thread_Control *heir = node->thread; diff --git a/cpukit/score/src/threadqops.c b/cpukit/score/src/threadqops.c index d19067fab1..c9e2b5d9ba 100644 --- a/cpukit/score/src/threadqops.c +++ b/cpukit/score/src/threadqops.c @@ -231,7 +231,7 @@ static Thread_Control *_Thread_queue_Priority_first( { RBTree_Node *first; - first = _RBTree_First( &heads->Heads.Priority, RBT_LEFT ); + first = _RBTree_Minimum( &heads->Heads.Priority ); return first != NULL ? THREAD_RBTREE_NODE_TO_THREAD( first ) : NULL; } -- cgit v1.2.3