rbtree: Remove superfluous NULL pointer checks

This commit is contained in:
Sebastian Huber
2014-07-21 18:16:47 +02:00
parent 6b0a7efc77
commit d7a9469378
5 changed files with 23 additions and 39 deletions

View File

@@ -229,10 +229,9 @@ RBTree_Node *_RBTree_Find(
* @param[in] is_unique If true, then reject nodes with a duplicate key, else * @param[in] is_unique If true, then reject nodes with a duplicate key, else
* otherwise. * otherwise.
* *
* @retval 0 Successfully inserted. * @retval NULL Successfully inserted.
* @retval -1 NULL @a the_node. * @retval existing_node This is a unique insert and there exists a node with
* @retval RBTree_Node* if one with equal value to @a the_node 's key exists * an equal key in the tree already.
* in an unique @a the_rbtree.
*/ */
RBTree_Node *_RBTree_Insert( RBTree_Node *_RBTree_Insert(
RBTree_Control *the_rbtree, RBTree_Control *the_rbtree,
@@ -481,25 +480,32 @@ RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor(
} }
/** /**
* @brief Get the first node. * @brief Gets a node with an extremal key value.
* *
* This function removes the minimum or maximum node from the_rbtree and * This function extracts a node with the minimum or maximum key value from
* returns a pointer to that node. * tree and returns a pointer to that node if it exists. In case multiple
* nodes with an extremal key value exist, then they are extracted in FIFO
* order.
* *
* @param[in] the_rbtree is the rbtree to attempt to get the min node from. * @param[in] the_rbtree The red-black tree control.
* @param[in] dir specifies whether to get minimum (0) or maximum (1) * @param[in] dir Specifies whether to get a node with the minimum (RBT_LEFT)
* or maximum (RBT_RIGHT) key value.
* *
* @return This method returns the min or max node on the rbtree, or NULL. * @retval NULL The tree is empty.
* * @retval extremal_node A node with the minimal or maximal key value on the
* @note This routine may return NULL if the RBTree is empty. * tree.
*/ */
RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Get( RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Get(
RBTree_Control *the_rbtree, RBTree_Control *the_rbtree,
RBTree_Direction dir RBTree_Direction dir
) )
{ {
RBTree_Node *the_node = the_rbtree->first[dir]; RBTree_Node *the_node = the_rbtree->first[ dir ];
_RBTree_Extract(the_rbtree, the_node);
if ( the_node != NULL ) {
_RBTree_Extract( the_rbtree, the_node );
}
return the_node; return the_node;
} }

View File

@@ -34,10 +34,6 @@ void _RBTree_Initialize(
size_t count; size_t count;
RBTree_Node *next; RBTree_Node *next;
/* TODO: Error message? */
if ( !the_rbtree )
return;
/* could do sanity checks here */ /* could do sanity checks here */
_RBTree_Initialize_empty( the_rbtree ); _RBTree_Initialize_empty( the_rbtree );

View File

@@ -11,7 +11,6 @@
#endif #endif
#include <rtems/score/rbtreeimpl.h> #include <rtems/score/rbtreeimpl.h>
#include <rtems/score/isr.h>
/** @brief Validate and fix-up tree properties after deleting a node /** @brief Validate and fix-up tree properties after deleting a node
* *
@@ -91,13 +90,6 @@ static void _RBTree_Extract_validate( RBTree_Node *the_node )
the_node->color = RBT_BLACK; the_node->color = RBT_BLACK;
} }
/** @brief Extract a Node (unprotected)
*
* This routine extracts (removes) @a the_node from @a the_rbtree.
*
* @note It does NOT disable interrupts to ensure the atomicity
* of the extract operation.
*/
void _RBTree_Extract( void _RBTree_Extract(
RBTree_Control *the_rbtree, RBTree_Control *the_rbtree,
RBTree_Node *the_node RBTree_Node *the_node
@@ -107,9 +99,6 @@ void _RBTree_Extract(
RBTree_Color victim_color; RBTree_Color victim_color;
RBTree_Direction dir; RBTree_Direction dir;
if ( !the_node )
return;
/* check if min needs to be updated */ /* check if min needs to be updated */
if ( the_node == the_rbtree->first[ RBT_LEFT ] ) { if ( the_node == the_rbtree->first[ RBT_LEFT ] ) {
RBTree_Node *next; RBTree_Node *next;

View File

@@ -11,7 +11,6 @@
#endif #endif
#include <rtems/score/rbtreeimpl.h> #include <rtems/score/rbtreeimpl.h>
#include <rtems/score/isr.h>
/** @brief Validate and fix-up tree properties for a new insert/colored node /** @brief Validate and fix-up tree properties for a new insert/colored node
* *
@@ -67,9 +66,6 @@ RBTree_Node *_RBTree_Insert(
bool is_unique bool is_unique
) )
{ {
if ( !the_node )
return (RBTree_Node *) -1;
RBTree_Node *iter_node = the_rbtree->root; RBTree_Node *iter_node = the_rbtree->root;
if ( !iter_node ) { /* special case: first node inserted */ if ( !iter_node ) { /* special case: first node inserted */

View File

@@ -149,9 +149,6 @@ rtems_task Init(
rb_insert_unique( &rbtree1, &node1.Node ); rb_insert_unique( &rbtree1, &node1.Node );
rb_insert_unique( &rbtree1, &node2.Node ); rb_insert_unique( &rbtree1, &node2.Node );
p = rb_insert_unique( &rbtree1, NULL );
if (p != (void *)(-1))
puts( "INIT - FAILED NULL NODE INSERT" );
_RBTree_Rotate(NULL, RBT_LEFT); _RBTree_Rotate(NULL, RBT_LEFT);
i = (node1.Node.parent == &node2.Node); i = (node1.Node.parent == &node2.Node);