Mercurial > hg > nginx
annotate src/core/ngx_hash.h @ 2096:a2199268010a stable-0.6
r2012 merge:
$hostname variable
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 07 Jul 2008 11:20:46 +0000 |
parents | 8ef04207c84f |
children | 7a7c9e9024dd |
rev | line source |
---|---|
507 | 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 { | |
589 | 16 void *value; |
17 u_char len; | |
18 u_char name[1]; | |
19 } ngx_hash_elt_t; | |
507 | 20 |
589 | 21 |
22 typedef struct { | |
23 ngx_hash_elt_t **buckets; | |
24 ngx_uint_t size; | |
507 | 25 } ngx_hash_t; |
26 | |
27 | |
28 typedef struct { | |
589 | 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 { | |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
45 ngx_hash_t hash; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
46 ngx_hash_wildcard_t *wc_head; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
47 ngx_hash_wildcard_t *wc_tail; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
48 } ngx_hash_combined_t; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
49 |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
50 |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
51 typedef struct { |
589 | 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 | |
593 | 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 | |
597 | 71 #define NGX_HASH_READONLY_KEY 2 |
593 | 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 | |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
83 ngx_array_t dns_wc_head; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
84 ngx_array_t *dns_wc_head_hash; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
85 |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
86 ngx_array_t dns_wc_tail; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
87 ngx_array_t *dns_wc_tail_hash; |
593 | 88 } ngx_hash_keys_arrays_t; |
89 | |
90 | |
589 | 91 typedef struct { |
92 ngx_uint_t hash; | |
93 ngx_str_t key; | |
94 ngx_str_t value; | |
649 | 95 u_char *lowcase_key; |
507 | 96 } ngx_table_elt_t; |
97 | |
98 | |
589 | 99 void *ngx_hash_find(ngx_hash_t *hash, ngx_uint_t key, u_char *name, size_t len); |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
100 void *ngx_hash_find_wc_head(ngx_hash_wildcard_t *hwc, u_char *name, size_t len); |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
101 void *ngx_hash_find_wc_tail(ngx_hash_wildcard_t *hwc, u_char *name, size_t len); |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
102 void *ngx_hash_find_combined(ngx_hash_combined_t *hash, ngx_uint_t key, |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1241
diff
changeset
|
103 u_char *name, size_t len); |
589 | 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 | |
649 | 110 #define ngx_hash(key, c) ((ngx_uint_t) key * 31 + c) |
589 | 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 | |
593 | 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 | |
589 | 118 |
507 | 119 #endif /* _NGX_HASH_H_INCLUDED_ */ |