Annotation of embedaddon/nginx/src/core/ngx_rbtree.h, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * Copyright (C) Igor Sysoev
                      4:  * Copyright (C) Nginx, Inc.
                      5:  */
                      6: 
                      7: 
                      8: #ifndef _NGX_RBTREE_H_INCLUDED_
                      9: #define _NGX_RBTREE_H_INCLUDED_
                     10: 
                     11: 
                     12: #include <ngx_config.h>
                     13: #include <ngx_core.h>
                     14: 
                     15: 
                     16: typedef ngx_uint_t  ngx_rbtree_key_t;
                     17: typedef ngx_int_t   ngx_rbtree_key_int_t;
                     18: 
                     19: 
                     20: typedef struct ngx_rbtree_node_s  ngx_rbtree_node_t;
                     21: 
                     22: struct ngx_rbtree_node_s {
                     23:     ngx_rbtree_key_t       key;
                     24:     ngx_rbtree_node_t     *left;
                     25:     ngx_rbtree_node_t     *right;
                     26:     ngx_rbtree_node_t     *parent;
                     27:     u_char                 color;
                     28:     u_char                 data;
                     29: };
                     30: 
                     31: 
                     32: typedef struct ngx_rbtree_s  ngx_rbtree_t;
                     33: 
                     34: typedef void (*ngx_rbtree_insert_pt) (ngx_rbtree_node_t *root,
                     35:     ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
                     36: 
                     37: struct ngx_rbtree_s {
                     38:     ngx_rbtree_node_t     *root;
                     39:     ngx_rbtree_node_t     *sentinel;
                     40:     ngx_rbtree_insert_pt   insert;
                     41: };
                     42: 
                     43: 
                     44: #define ngx_rbtree_init(tree, s, i)                                           \
                     45:     ngx_rbtree_sentinel_init(s);                                              \
                     46:     (tree)->root = s;                                                         \
                     47:     (tree)->sentinel = s;                                                     \
                     48:     (tree)->insert = i
                     49: 
                     50: 
                     51: void ngx_rbtree_insert(ngx_thread_volatile ngx_rbtree_t *tree,
                     52:     ngx_rbtree_node_t *node);
                     53: void ngx_rbtree_delete(ngx_thread_volatile ngx_rbtree_t *tree,
                     54:     ngx_rbtree_node_t *node);
                     55: void ngx_rbtree_insert_value(ngx_rbtree_node_t *root, ngx_rbtree_node_t *node,
                     56:     ngx_rbtree_node_t *sentinel);
                     57: void ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *root,
                     58:     ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
                     59: 
                     60: 
                     61: #define ngx_rbt_red(node)               ((node)->color = 1)
                     62: #define ngx_rbt_black(node)             ((node)->color = 0)
                     63: #define ngx_rbt_is_red(node)            ((node)->color)
                     64: #define ngx_rbt_is_black(node)          (!ngx_rbt_is_red(node))
                     65: #define ngx_rbt_copy_color(n1, n2)      (n1->color = n2->color)
                     66: 
                     67: 
                     68: /* a sentinel must be black */
                     69: 
                     70: #define ngx_rbtree_sentinel_init(node)  ngx_rbt_black(node)
                     71: 
                     72: 
                     73: static ngx_inline ngx_rbtree_node_t *
                     74: ngx_rbtree_min(ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel)
                     75: {
                     76:     while (node->left != sentinel) {
                     77:         node = node->left;
                     78:     }
                     79: 
                     80:     return node;
                     81: }
                     82: 
                     83: 
                     84: #endif /* _NGX_RBTREE_H_INCLUDED_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>