[rtems commit] score: Add _RBTree_Initialize_one()

Sebastian Huber sebh at rtems.org
Tue Sep 6 09:16:33 UTC 2016


Module:    rtems
Branch:    master
Commit:    83b022907173c9e1bd69874fadb5ed443400c2fa
Changeset: http://git.rtems.org/rtems/commit/?id=83b022907173c9e1bd69874fadb5ed443400c2fa

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Jun 28 06:59:29 2016 +0200

score: Add _RBTree_Initialize_one()

---

 cpukit/score/include/rtems/score/rbtree.h    | 20 ++++++++++++++++++++
 testsuites/sptests/sprbtree01/init.c         | 25 +++++++++++++++++++++++++
 testsuites/sptests/sprbtree01/sprbtree01.scn |  1 +
 3 files changed, 46 insertions(+)

diff --git a/cpukit/score/include/rtems/score/rbtree.h b/cpukit/score/include/rtems/score/rbtree.h
index a5a6cf3..818eee4 100644
--- a/cpukit/score/include/rtems/score/rbtree.h
+++ b/cpukit/score/include/rtems/score/rbtree.h
@@ -388,6 +388,26 @@ RTEMS_INLINE_ROUTINE void _RBTree_Initialize_empty(
 }
 
 /**
+ * @brief Initializes this red-black tree to contain exactly the specified
+ * node.
+ *
+ * @param[in] the_rbtree The red-black tree control.
+ * @param[in] the_node The one and only node.
+ */
+RTEMS_INLINE_ROUTINE void _RBTree_Initialize_one(
+  RBTree_Control *the_rbtree,
+  RBTree_Node    *the_node
+)
+{
+  _Assert( _RBTree_Is_node_off_tree( the_node ) );
+  RB_ROOT( the_rbtree ) = the_node;
+  RB_PARENT( the_node, Node ) = NULL;
+  RB_LEFT( the_node, Node ) = NULL;
+  RB_RIGHT( the_node, Node ) = NULL;
+  RB_COLOR( the_node, Node ) = RB_BLACK;
+}
+
+/**
  * @brief Returns the minimum node of the red-black tree.
  *
  * @param[in] the_rbtree The red-black tree control.
diff --git a/testsuites/sptests/sprbtree01/init.c b/testsuites/sptests/sprbtree01/init.c
index 0543508..746b36e 100644
--- a/testsuites/sptests/sprbtree01/init.c
+++ b/testsuites/sptests/sprbtree01/init.c
@@ -19,6 +19,30 @@ const char rtems_test_name[] = "SPRBTREE 1";
 /* forward declarations to avoid warnings */
 rtems_task Init(rtems_task_argument argument);
 
+static void test_rbtree_init_one(void)
+{
+  RBTree_Control tree;
+  RBTree_Node    node;
+
+  puts( "INIT - Initialize one" );
+
+  _RBTree_Initialize_node( &node );
+  _RBTree_Initialize_one( &tree, &node );
+  rtems_test_assert( !_RBTree_Is_empty( &tree ) );
+  rtems_test_assert( _RBTree_Is_root( &node ) );
+  rtems_test_assert( !_RBTree_Is_node_off_tree( &node ) );
+  rtems_test_assert( _RBTree_Left( &node ) == NULL );
+  rtems_test_assert( _RBTree_Right( &node ) == NULL );
+  rtems_test_assert( _RBTree_Parent( &node ) == NULL );
+  rtems_test_assert( _RBTree_Successor( &node ) == NULL );
+  rtems_test_assert( _RBTree_Predecessor( &node ) == NULL );
+  rtems_test_assert( _RBTree_Minimum( &tree ) == &node );
+  rtems_test_assert( _RBTree_Maximum( &tree ) == &node );
+
+  _RBTree_Extract( &tree, &node );
+  rtems_test_assert( _RBTree_Is_empty( &tree ) );
+}
+
 static const int numbers[20] = {
   52, 99, 0, 85, 43, 44, 10, 60, 50, 19, 8, 68, 48, 57, 17, 67, 90, 12, 77, 71
 };
@@ -2271,6 +2295,7 @@ rtems_task Init( rtems_task_argument ignored )
     rtems_test_exit(0);
   }
 
+  test_rbtree_init_one();
   test_rbtree_min_max();
   test_rbtree_insert_inline();
   test_rbtree_random_ops();
diff --git a/testsuites/sptests/sprbtree01/sprbtree01.scn b/testsuites/sptests/sprbtree01/sprbtree01.scn
index 9cf21f3..6b5e1d9 100644
--- a/testsuites/sptests/sprbtree01/sprbtree01.scn
+++ b/testsuites/sptests/sprbtree01/sprbtree01.scn
@@ -30,6 +30,7 @@ INIT - Removing 100 nodes
 INIT - Verify rtems_rbtree_insert with 100 nodes value [99,0]
 INIT - Verify rtems_rbtree_find in a duplicate tree
 INIT - Removing 100 nodes
+INIT - Initialize one
 INIT - Verify min/max node updates
 INIT - Verify _RBTree_Insert_inline
 INIT - Random operations




More information about the vc mailing list