~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Nginx/core/ngx_hash.h

Version: ~ [ nginx-0.6.26 ] ~ [ nginx-0.5.35 ] ~ [ nginx-0.5.20 ] ~ [ nginx-0.5.19 ] ~

  1 
  2 /*
  3  * Copyright (C) Igor Sysoev
  4  */
  5 
  6 
  7 #ifndef _NGX_HASH_H_INCLUDED_
  8 #define _NGX_HASH_H_INCLUDED_
  9 
 10 
 11 #include <ngx_config.h>
 12 #include <ngx_core.h>
 13 
 14 
 15 typedef struct {
 16     void             *value;
 17     u_char            len;
 18     u_char            name[1];
 19 } ngx_hash_elt_t;
 20 
 21 
 22 typedef struct {
 23     ngx_hash_elt_t  **buckets;
 24     ngx_uint_t        size;
 25 } ngx_hash_t;
 26 
 27 
 28 typedef struct {
 29     ngx_hash_t        hash;
 30     void             *value;
 31 } ngx_hash_wildcard_t;
 32 
 33 
 34 typedef struct {
 35     ngx_str_t         key;
 36     ngx_uint_t        key_hash;
 37     void             *value;
 38 } ngx_hash_key_t;
 39 
 40 
 41 typedef ngx_uint_t (*ngx_hash_key_pt) (u_char *data, size_t len);
 42 
 43 
 44 typedef struct {
 45     ngx_hash_t            hash;
 46     ngx_hash_wildcard_t  *wc_head;
 47     ngx_hash_wildcard_t  *wc_tail;
 48 } ngx_hash_combined_t;
 49 
 50 
 51 typedef struct {
 52     ngx_hash_t       *hash;
 53     ngx_hash_key_pt   key;
 54 
 55     ngx_uint_t        max_size;
 56     ngx_uint_t        bucket_size;
 57 
 58     char             *name;
 59     ngx_pool_t       *pool;
 60     ngx_pool_t       *temp_pool;
 61 } ngx_hash_init_t;
 62 
 63 
 64 #define NGX_HASH_SMALL            1
 65 #define NGX_HASH_LARGE            2
 66 
 67 #define NGX_HASH_LARGE_ASIZE      16384
 68 #define NGX_HASH_LARGE_HSIZE      10007
 69 
 70 #define NGX_HASH_WILDCARD_KEY     1
 71 #define NGX_HASH_READONLY_KEY     2
 72 
 73 
 74 typedef struct {
 75     ngx_uint_t        hsize;
 76 
 77     ngx_pool_t       *pool;
 78     ngx_pool_t       *temp_pool;
 79 
 80     ngx_array_t       keys;
 81     ngx_array_t      *keys_hash;
 82 
 83     ngx_array_t       dns_wc_head;
 84     ngx_array_t      *dns_wc_head_hash;
 85 
 86     ngx_array_t       dns_wc_tail;
 87     ngx_array_t      *dns_wc_tail_hash;
 88 } ngx_hash_keys_arrays_t;
 89 
 90 
 91 typedef struct {
 92     ngx_uint_t        hash;
 93     ngx_str_t         key;
 94     ngx_str_t         value;
 95     u_char           *lowcase_key;
 96 } ngx_table_elt_t;
 97 
 98 
 99 void *ngx_hash_find(ngx_hash_t *hash, ngx_uint_t key, u_char *name, size_t len);
100 void *ngx_hash_find_wc_head(ngx_hash_wildcard_t *hwc, u_char *name, size_t len);
101 void *ngx_hash_find_wc_tail(ngx_hash_wildcard_t *hwc, u_char *name, size_t len);
102 void *ngx_hash_find_combined(ngx_hash_combined_t *hash, ngx_uint_t key,
103     u_char *name, size_t len);
104 
105 ngx_int_t ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
106     ngx_uint_t nelts);
107 ngx_int_t ngx_hash_wildcard_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
108     ngx_uint_t nelts);
109 
110 #define ngx_hash(key, c)   ((ngx_uint_t) key * 31 + c)
111 ngx_uint_t ngx_hash_key(u_char *data, size_t len);
112 ngx_uint_t ngx_hash_key_lc(u_char *data, size_t len);
113 
114 ngx_int_t ngx_hash_keys_array_init(ngx_hash_keys_arrays_t *ha, ngx_uint_t type);
115 ngx_int_t ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key,
116     void *value, ngx_uint_t flags);
117 
118 
119 #endif /* _NGX_HASH_H_INCLUDED_ */
120 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.