|  |  | 
|  | /* | 
|  | * Copyright (C) Igor Sysoev | 
|  | * Copyright (C) Nginx, Inc. | 
|  | */ | 
|  |  | 
|  |  | 
|  | #ifndef _NGX_RADIX_TREE_H_INCLUDED_ | 
|  | #define _NGX_RADIX_TREE_H_INCLUDED_ | 
|  |  | 
|  |  | 
|  | #include <ngx_config.h> | 
|  | #include <ngx_core.h> | 
|  |  | 
|  |  | 
|  | #define NGX_RADIX_NO_VALUE   (uintptr_t) -1 | 
|  |  | 
|  | typedef struct ngx_radix_node_s  ngx_radix_node_t; | 
|  |  | 
|  | struct ngx_radix_node_s { | 
|  | ngx_radix_node_t  *right; | 
|  | ngx_radix_node_t  *left; | 
|  | ngx_radix_node_t  *parent; | 
|  | uintptr_t          value; | 
|  | }; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | ngx_radix_node_t  *root; | 
|  | ngx_pool_t        *pool; | 
|  | ngx_radix_node_t  *free; | 
|  | char              *start; | 
|  | size_t             size; | 
|  | } ngx_radix_tree_t; | 
|  |  | 
|  |  | 
|  | ngx_radix_tree_t *ngx_radix_tree_create(ngx_pool_t *pool, | 
|  | ngx_int_t preallocate); | 
|  |  | 
|  | ngx_int_t ngx_radix32tree_insert(ngx_radix_tree_t *tree, | 
|  | uint32_t key, uint32_t mask, uintptr_t value); | 
|  | ngx_int_t ngx_radix32tree_delete(ngx_radix_tree_t *tree, | 
|  | uint32_t key, uint32_t mask); | 
|  | uintptr_t ngx_radix32tree_find(ngx_radix_tree_t *tree, uint32_t key); | 
|  |  | 
|  | #if (NGX_HAVE_INET6) | 
|  | ngx_int_t ngx_radix128tree_insert(ngx_radix_tree_t *tree, | 
|  | u_char *key, u_char *mask, uintptr_t value); | 
|  | ngx_int_t ngx_radix128tree_delete(ngx_radix_tree_t *tree, | 
|  | u_char *key, u_char *mask); | 
|  | uintptr_t ngx_radix128tree_find(ngx_radix_tree_t *tree, u_char *key); | 
|  | #endif | 
|  |  | 
|  |  | 
|  | #endif /* _NGX_RADIX_TREE_H_INCLUDED_ */ |