diff options
Diffstat (limited to 'cpukit/score/src/rbtreefind.c')
-rw-r--r-- | cpukit/score/src/rbtreefind.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/cpukit/score/src/rbtreefind.c b/cpukit/score/src/rbtreefind.c index 4aaf236430..ad0c9fdf80 100644 --- a/cpukit/score/src/rbtreefind.c +++ b/cpukit/score/src/rbtreefind.c @@ -18,28 +18,30 @@ #endif #include <rtems/score/rbtreeimpl.h> -#include <rtems/score/isr.h> RBTree_Node *_RBTree_Find( const RBTree_Control *the_rbtree, - const RBTree_Node *the_node + const RBTree_Node *the_node, + RBTree_Compare compare, + bool is_unique ) { 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); + + while ( iter_node != NULL ) { + int compare_result = ( *compare )( the_node, iter_node ); + RBTree_Direction dir; + if ( _RBTree_Is_equal( compare_result ) ) { found = iter_node; - if ( the_rbtree->is_unique ) + if ( is_unique ) break; } - RBTree_Direction dir = - (RBTree_Direction) _RBTree_Is_greater( compare_result ); - iter_node = iter_node->child[dir]; - } /* while(iter_node) */ + dir = (RBTree_Direction) _RBTree_Is_greater( compare_result ); + iter_node = iter_node->child[ dir ]; + } return found; } |