diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2007-12-17 08:52:00 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2007-12-17 08:52:00 +0000 |
| commit | 7912e4ba5d699da3de6643a99c3076c660742f88 (patch) | |
| tree | 6ab51590f3a1b9a38aa070ae680ab8275dc74744 /src/core | |
| parent | c0cadf1f347440ee57c00527e3ba8d274dff27ff (diff) | |
| download | nginx-7912e4ba5d699da3de6643a99c3076c660742f88.tar.gz nginx-7912e4ba5d699da3de6643a99c3076c660742f88.tar.bz2 | |
optimize rbtree initialization and insert
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/ngx_open_file_cache.c | 7 | ||||
| -rw-r--r-- | src/core/ngx_rbtree.c | 55 |
2 files changed, 22 insertions, 40 deletions
diff --git a/src/core/ngx_open_file_cache.c b/src/core/ngx_open_file_cache.c index dab98b3ff..d518f4b96 100644 --- a/src/core/ngx_open_file_cache.c +++ b/src/core/ngx_open_file_cache.c @@ -53,11 +53,8 @@ ngx_open_file_cache_init(ngx_pool_t *pool, ngx_uint_t max, time_t inactive) return NULL; } - ngx_rbtree_sentinel_init(sentinel); - - cache->rbtree.root = sentinel; - cache->rbtree.sentinel = sentinel; - cache->rbtree.insert = ngx_open_file_cache_rbtree_insert_value; + ngx_rbtree_init(&cache->rbtree, sentinel, + ngx_open_file_cache_rbtree_insert_value); cache->current = 0; cache->max = max; diff --git a/src/core/ngx_rbtree.c b/src/core/ngx_rbtree.c index 0a5753cdf..7ee0036ec 100644 --- a/src/core/ngx_rbtree.c +++ b/src/core/ngx_rbtree.c @@ -97,28 +97,20 @@ void ngx_rbtree_insert_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) { - for ( ;; ) { - - if (node->key < temp->key) { - - if (temp->left == sentinel) { - temp->left = node; - break; - } - - temp = temp->left; + ngx_rbtree_node_t **p; - } else { + for ( ;; ) { - if (temp->right == sentinel) { - temp->right = node; - break; - } + p = (node->key < temp->key) ? &temp->left : &temp->right; - temp = temp->right; + if (*p == sentinel) { + break; } + + temp = *p; } + *p = node; node->parent = temp; node->left = sentinel; node->right = sentinel; @@ -130,6 +122,8 @@ void ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel) { + ngx_rbtree_node_t **p; + for ( ;; ) { /* @@ -139,29 +133,20 @@ ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node, * The comparison takes into account that overflow. */ - if ((ngx_rbtree_key_int_t) node->key - (ngx_rbtree_key_int_t) temp->key - < 0) - { - /* node->key < temp->key */ - - if (temp->left == sentinel) { - temp->left = node; - break; - } + /* node->key < temp->key */ - temp = temp->left; - - } else { + p = ((ngx_rbtree_key_int_t) node->key - (ngx_rbtree_key_int_t) temp->key + < 0) + ? &temp->left : &temp->right; - if (temp->right == sentinel) { - temp->right = node; - break; - } - - temp = temp->right; + if (*p == sentinel) { + break; } - } + temp = *p; + } + + *p = node; node->parent = temp; node->left = sentinel; node->right = sentinel; |
