34
|
1
|
|
2 /*
|
|
3 * Copyright (C) Igor Sysoev
|
660
|
4 * Copyright (C) Nginx, Inc.
|
34
|
5 */
|
|
6
|
|
7
|
|
8 #ifndef _NGX_RADIX_TREE_H_INCLUDED_
|
|
9 #define _NGX_RADIX_TREE_H_INCLUDED_
|
|
10
|
|
11
|
|
12 #include <ngx_config.h>
|
|
13 #include <ngx_core.h>
|
|
14
|
|
15
|
|
16 #define NGX_RADIX_NO_VALUE (uintptr_t) -1
|
|
17
|
|
18 typedef struct ngx_radix_node_s ngx_radix_node_t;
|
|
19
|
|
20 struct ngx_radix_node_s {
|
|
21 ngx_radix_node_t *right;
|
|
22 ngx_radix_node_t *left;
|
|
23 ngx_radix_node_t *parent;
|
|
24 uintptr_t value;
|
|
25 };
|
|
26
|
|
27
|
|
28 typedef struct {
|
|
29 ngx_radix_node_t *root;
|
|
30 ngx_pool_t *pool;
|
|
31 ngx_radix_node_t *free;
|
|
32 char *start;
|
|
33 size_t size;
|
|
34 } ngx_radix_tree_t;
|
|
35
|
|
36
|
36
|
37 ngx_radix_tree_t *ngx_radix_tree_create(ngx_pool_t *pool,
|
38
|
38 ngx_int_t preallocate);
|
694
|
39
|
34
|
40 ngx_int_t ngx_radix32tree_insert(ngx_radix_tree_t *tree,
|
36
|
41 uint32_t key, uint32_t mask, uintptr_t value);
|
34
|
42 ngx_int_t ngx_radix32tree_delete(ngx_radix_tree_t *tree,
|
36
|
43 uint32_t key, uint32_t mask);
|
34
|
44 uintptr_t ngx_radix32tree_find(ngx_radix_tree_t *tree, uint32_t key);
|
|
45
|
694
|
46 #if (NGX_HAVE_INET6)
|
|
47 ngx_int_t ngx_radix128tree_insert(ngx_radix_tree_t *tree,
|
|
48 u_char *key, u_char *mask, uintptr_t value);
|
|
49 ngx_int_t ngx_radix128tree_delete(ngx_radix_tree_t *tree,
|
|
50 u_char *key, u_char *mask);
|
|
51 uintptr_t ngx_radix128tree_find(ngx_radix_tree_t *tree, u_char *key);
|
|
52 #endif
|
|
53
|
34
|
54
|
|
55 #endif /* _NGX_RADIX_TREE_H_INCLUDED_ */
|