diff options
Diffstat (limited to 'cpukit/score/src/rbtreefind.c')
-rw-r--r-- | cpukit/score/src/rbtreefind.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/cpukit/score/src/rbtreefind.c b/cpukit/score/src/rbtreefind.c index 2e8cdc3bff..2eb92a5ac5 100644 --- a/cpukit/score/src/rbtreefind.c +++ b/cpukit/score/src/rbtreefind.c @@ -23,8 +23,8 @@ #include <rtems/score/isr.h> RBTree_Node *_RBTree_Find( - RBTree_Control *the_rbtree, - RBTree_Node *search_node + const RBTree_Control *the_rbtree, + const RBTree_Node *search_node ) { ISR_Level level; @@ -36,3 +36,27 @@ RBTree_Node *_RBTree_Find( _ISR_Enable( level ); return return_node; } + +RBTree_Node *_RBTree_Find_unprotected( + const RBTree_Control *the_rbtree, + const RBTree_Node *the_node +) +{ + RBTree_Node* iter_node = the_rbtree->root; + RBTree_Node* found = NULL; + int compare_result; + while (iter_node) { + compare_result = the_rbtree->compare_function(the_node, iter_node); + if ( _RBTree_Is_equal( compare_result ) ) { + found = iter_node; + if ( the_rbtree->is_unique ) + break; + } + + RBTree_Direction dir = + (RBTree_Direction) _RBTree_Is_greater( compare_result ); + iter_node = iter_node->child[dir]; + } /* while(iter_node) */ + + return found; +} |