Skip to content

Commit 7ab7f4a

Browse files
committed
🚧 RBTree
1 parent 3768ed4 commit 7ab7f4a

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/core/ngx_rbtree.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,15 @@ typedef ngx_int_t ngx_rbtree_key_int_t;
2020
typedef struct ngx_rbtree_node_s ngx_rbtree_node_t;
2121

2222
struct ngx_rbtree_node_s {
23+
// unsigned long 类型的 key
2324
ngx_rbtree_key_t key;
25+
// 左孩子节点
2426
ngx_rbtree_node_t *left;
27+
// 右孩子节点
2528
ngx_rbtree_node_t *right;
29+
// 父亲节点
2630
ngx_rbtree_node_t *parent;
31+
// 节点颜色,0 为黑色,1 为红色
2732
u_char color;
2833
u_char data;
2934
};
@@ -35,8 +40,11 @@ typedef void (*ngx_rbtree_insert_pt) (ngx_rbtree_node_t *root,
3540
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
3641

3742
struct ngx_rbtree_s {
43+
// 根节点
3844
ngx_rbtree_node_t *root;
45+
// 哨兵节点,即 NULL
3946
ngx_rbtree_node_t *sentinel;
47+
// 向红黑树中插入节点的方法,我们可自定义实现
4048
ngx_rbtree_insert_pt insert;
4149
};
4250

@@ -50,10 +58,13 @@ struct ngx_rbtree_s {
5058

5159
void ngx_rbtree_insert(ngx_rbtree_t *tree, ngx_rbtree_node_t *node);
5260
void ngx_rbtree_delete(ngx_rbtree_t *tree, ngx_rbtree_node_t *node);
61+
62+
// nginx 所实现的 2 个向红黑树中添加节点的方法
5363
void ngx_rbtree_insert_value(ngx_rbtree_node_t *root, ngx_rbtree_node_t *node,
5464
ngx_rbtree_node_t *sentinel);
5565
void ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *root,
5666
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
67+
5768
ngx_rbtree_node_t *ngx_rbtree_next(ngx_rbtree_t *tree,
5869
ngx_rbtree_node_t *node);
5970

src/core/ngx_string.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,14 +214,16 @@ uintptr_t ngx_escape_html(u_char *dst, u_char *src, size_t size);
214214
uintptr_t ngx_escape_json(u_char *dst, u_char *src, size_t size);
215215

216216

217+
// String 类型的对象在红黑树中的节点表示
217218
typedef struct {
218219
ngx_rbtree_node_t node;
219220
ngx_str_t str;
220221
} ngx_str_node_t;
221222

222-
223+
// 向红黑树中插入 ngx_str_node_t 对象,需要将 ngx_str_node_t 强制类型转换成 ngx_rbtree_node_t
223224
void ngx_str_rbtree_insert_value(ngx_rbtree_node_t *temp,
224225
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
226+
225227
ngx_str_node_t *ngx_str_rbtree_lookup(ngx_rbtree_t *rbtree, ngx_str_t *name,
226228
uint32_t hash);
227229

0 commit comments

Comments
 (0)