ngx_rbtree.h

来自「Nginx是一个高性能的HTTP和反向代理服务器」· C头文件 代码 · 共 84 行

H
84
字号
/* * Copyright (C) Igor Sysoev */#ifndef _NGX_RBTREE_H_INCLUDED_#define _NGX_RBTREE_H_INCLUDED_#include <ngx_config.h>#include <ngx_core.h>typedef ngx_uint_t  ngx_rbtree_key_t;typedef ngx_int_t   ngx_rbtree_key_int_t;typedef struct ngx_rbtree_node_s  ngx_rbtree_node_t;struct ngx_rbtree_node_s {    ngx_rbtree_key_t       key;    ngx_rbtree_node_t     *left;    ngx_rbtree_node_t     *right;    ngx_rbtree_node_t     *parent;    u_char                 color;    u_char                 data;};typedef struct ngx_rbtree_s  ngx_rbtree_t;typedef void (*ngx_rbtree_insert_pt) (ngx_rbtree_node_t *root,    ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);struct ngx_rbtree_s {    ngx_rbtree_node_t     *root;    ngx_rbtree_node_t     *sentinel;    ngx_rbtree_insert_pt   insert;};#define ngx_rbtree_init(tree, s, i)                                           \    ngx_rbtree_sentinel_init(s);                                              \    (tree)->root = s;                                                         \    (tree)->sentinel = s;                                                     \    (tree)->insert = ivoid ngx_rbtree_insert(ngx_thread_volatile ngx_rbtree_t *tree,    ngx_rbtree_node_t *node);void ngx_rbtree_delete(ngx_thread_volatile ngx_rbtree_t *tree,    ngx_rbtree_node_t *node);void ngx_rbtree_insert_value(ngx_rbtree_node_t *root, ngx_rbtree_node_t *node,    ngx_rbtree_node_t *sentinel);void ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *root,    ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);#define ngx_rbt_red(node)               ((node)->color = 1)#define ngx_rbt_black(node)             ((node)->color = 0)#define ngx_rbt_is_red(node)            ((node)->color)#define ngx_rbt_is_black(node)          (!ngx_rbt_is_red(node))#define ngx_rbt_copy_color(n1, n2)      (n1->color = n2->color)/* a sentinel must be black */#define ngx_rbtree_sentinel_init(node)  ngx_rbt_black(node)static ngx_inline ngx_rbtree_node_t *ngx_rbtree_min(ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel){    while (node->left != sentinel) {        node = node->left;    }    return node;}#endif /* _NGX_RBTREE_H_INCLUDED_ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?