[PATCH 2/3] rbtree: Add _RBTree_Replace_node()
Gedare Bloom
gedare at gwu.edu
Mon Aug 31 14:30:02 UTC 2015
It's on the caller to ensure no ordering violation?
On Mon, Aug 31, 2015 at 7:54 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> ---
> cpukit/score/Makefile.am | 1 +
> cpukit/score/include/rtems/score/rbtree.h | 13 +++++++
> cpukit/score/src/rbtreereplace.c | 61 +++++++++++++++++++++++++++++++
> 3 files changed, 75 insertions(+)
> create mode 100644 cpukit/score/src/rbtreereplace.c
>
> diff --git a/cpukit/score/Makefile.am b/cpukit/score/Makefile.am
> index 507d49f..f727e60 100644
> --- a/cpukit/score/Makefile.am
> +++ b/cpukit/score/Makefile.am
> @@ -286,6 +286,7 @@ libscore_a_SOURCES += src/freechain.c
> libscore_a_SOURCES += \
> src/rbtreeextract.c src/rbtreefind.c \
> src/rbtreeinsert.c src/rbtreeiterate.c src/rbtreenext.c
> +libscore_a_SOURCES += src/rbtreereplace.c
>
> ## THREAD_C_FILES
> libscore_a_SOURCES += src/thread.c src/threadchangepriority.c \
> diff --git a/cpukit/score/include/rtems/score/rbtree.h b/cpukit/score/include/rtems/score/rbtree.h
> index 077f2b1..7e41c7a 100644
> --- a/cpukit/score/include/rtems/score/rbtree.h
> +++ b/cpukit/score/include/rtems/score/rbtree.h
> @@ -470,6 +470,19 @@ RBTree_Node *_RBTree_Predecessor( const RBTree_Node *node );
> */
> RBTree_Node *_RBTree_Successor( const RBTree_Node *node );
>
> +/**
> + * @brief Replaces a node in the red-black tree without a rebalance.
> + *
> + * @param[in] the_rbtree The red-black tree control.
> + * @param[in] victim The victim node.
> + * @param[in] replacement The replacement node.
> + */
> +void _RBTree_Replace_node(
> + RBTree_Control *the_rbtree,
> + RBTree_Node *victim,
> + RBTree_Node *replacement
> +);
> +
> /**@}*/
>
> #ifdef __cplusplus
> diff --git a/cpukit/score/src/rbtreereplace.c b/cpukit/score/src/rbtreereplace.c
> new file mode 100644
> index 0000000..7a54000
> --- /dev/null
> +++ b/cpukit/score/src/rbtreereplace.c
> @@ -0,0 +1,61 @@
> +/**
> + * @file
> + *
> + * @ingroup ScoreRBTree
> + *
> + * @brief _RBTree_Replace_node() implementation.
> + */
> +
> +/*
> + * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
> + *
> + * embedded brains GmbH
> + * Dornierstr. 4
> + * 82178 Puchheim
> + * Germany
> + * <rtems at embedded-brains.de>
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#if HAVE_CONFIG_H
> + #include "config.h"
> +#endif
> +
> +#include <rtems/score/rbtree.h>
> +
> +void _RBTree_Replace_node(
> + RBTree_Control *the_rbtree,
> + RBTree_Node *victim,
> + RBTree_Node *replacement
> +)
> +{
> + RBTree_Node *parent = _RBTree_Parent( victim );
> + RBTree_Node **link;
> + RBTree_Node *child;
> +
> + if (parent != NULL) {
> + if ( victim == _RBTree_Left( parent ) ) {
> + link = _RBTree_Left_reference( parent );
> + } else {
> + link = _RBTree_Right_reference( parent );
> + }
> + } else {
> + link = _RBTree_Root_reference( the_rbtree );
> + }
> + *link = replacement;
> +
> + child = _RBTree_Left( victim );
> + if ( child != NULL ) {
> + RB_PARENT( child, Node ) = replacement;
> + }
> +
> + child = _RBTree_Right( victim );
> + if ( child != NULL ) {
> + RB_PARENT( child, Node ) = replacement;
> + }
> +
> + *replacement = *victim;
> +}
> --
> 1.8.4.5
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list