|  | 
 | /* | 
 |  * 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_ */ |