diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-08-21 05:59:49 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-09-03 13:58:16 +0200 |
commit | e9fbaa3b48364c821f5fb8ef7d7b7504be957e0e (patch) | |
tree | b8401a96b7daec44038359d66dfa02876621dfc1 /cpukit/score/src/rbtreefind.c | |
parent | score: Optimize thread queue first operation (diff) | |
download | rtems-e9fbaa3b48364c821f5fb8ef7d7b7504be957e0e.tar.bz2 |
rbtree: Replace implementation
Use the BSD <sys/tree.h> implementation since it is faster, more
flexible and uses less storage. See https://github.com/sebhub/rb-bench.
Diffstat (limited to '')
-rw-r--r-- | cpukit/score/src/rbtreefind.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/cpukit/score/src/rbtreefind.c b/cpukit/score/src/rbtreefind.c index 168a108962..f920febd41 100644 --- a/cpukit/score/src/rbtreefind.c +++ b/cpukit/score/src/rbtreefind.c @@ -26,12 +26,11 @@ RBTree_Node *_RBTree_Find( bool is_unique ) { - RBTree_Node *iter_node = the_rbtree->root; + RBTree_Node *iter_node = _RBTree_Root( the_rbtree ); RBTree_Node *found = NULL; while ( iter_node != NULL ) { RBTree_Compare_result compare_result = ( *compare )( the_node, iter_node ); - RBTree_Direction dir; if ( _RBTree_Is_equal( compare_result ) ) { found = iter_node; @@ -40,8 +39,11 @@ RBTree_Node *_RBTree_Find( break; } - dir = (RBTree_Direction) _RBTree_Is_greater( compare_result ); - iter_node = iter_node->child[ dir ]; + if ( _RBTree_Is_greater( compare_result ) ) { + iter_node = _RBTree_Right( iter_node ); + } else { + iter_node = _RBTree_Left( iter_node ); + } } return found; |