src/core/ngx_hash.h - nginx-1.7.10

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #ifndef _NGX_HASH_H_INCLUDED_
  6. #define _NGX_HASH_H_INCLUDED_


  7. #include <ngx_config.h>
  8. #include <ngx_core.h>


  9. typedef struct {
  10.     void             *value;
  11.     u_short           len;
  12.     u_char            name[1];
  13. } ngx_hash_elt_t;


  14. typedef struct {
  15.     ngx_hash_elt_t  **buckets;
  16.     ngx_uint_t        size;
  17. } ngx_hash_t;


  18. typedef struct {
  19.     ngx_hash_t        hash;
  20.     void             *value;
  21. } ngx_hash_wildcard_t;


  22. typedef struct {
  23.     ngx_str_t         key;
  24.     ngx_uint_t        key_hash;
  25.     void             *value;
  26. } ngx_hash_key_t;


  27. typedef ngx_uint_t (*ngx_hash_key_pt) (u_char *data, size_t len);


  28. typedef struct {
  29.     ngx_hash_t            hash;
  30.     ngx_hash_wildcard_t  *wc_head;
  31.     ngx_hash_wildcard_t  *wc_tail;
  32. } ngx_hash_combined_t;


  33. typedef struct {
  34.     ngx_hash_t       *hash;
  35.     ngx_hash_key_pt   key;

  36.     ngx_uint_t        max_size;
  37.     ngx_uint_t        bucket_size;

  38.     char             *name;
  39.     ngx_pool_t       *pool;
  40.     ngx_pool_t       *temp_pool;
  41. } ngx_hash_init_t;


  42. #define NGX_HASH_SMALL            1
  43. #define NGX_HASH_LARGE            2

  44. #define NGX_HASH_LARGE_ASIZE      16384
  45. #define NGX_HASH_LARGE_HSIZE      10007

  46. #define NGX_HASH_WILDCARD_KEY     1
  47. #define NGX_HASH_READONLY_KEY     2


  48. typedef struct {
  49.     ngx_uint_t        hsize;

  50.     ngx_pool_t       *pool;
  51.     ngx_pool_t       *temp_pool;

  52.     ngx_array_t       keys;
  53.     ngx_array_t      *keys_hash;

  54.     ngx_array_t       dns_wc_head;
  55.     ngx_array_t      *dns_wc_head_hash;

  56.     ngx_array_t       dns_wc_tail;
  57.     ngx_array_t      *dns_wc_tail_hash;
  58. } ngx_hash_keys_arrays_t;


  59. typedef struct {
  60.     ngx_uint_t        hash;
  61.     ngx_str_t         key;
  62.     ngx_str_t         value;
  63.     u_char           *lowcase_key;
  64. } ngx_table_elt_t;


  65. void *ngx_hash_find(ngx_hash_t *hash, ngx_uint_t key, u_char *name, size_t len);
  66. void *ngx_hash_find_wc_head(ngx_hash_wildcard_t *hwc, u_char *name, size_t len);
  67. void *ngx_hash_find_wc_tail(ngx_hash_wildcard_t *hwc, u_char *name, size_t len);
  68. void *ngx_hash_find_combined(ngx_hash_combined_t *hash, ngx_uint_t key,
  69.     u_char *name, size_t len);

  70. ngx_int_t ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
  71.     ngx_uint_t nelts);
  72. ngx_int_t ngx_hash_wildcard_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
  73.     ngx_uint_t nelts);

  74. #define ngx_hash(key, c)   ((ngx_uint_t) key * 31 + c)
  75. ngx_uint_t ngx_hash_key(u_char *data, size_t len);
  76. ngx_uint_t ngx_hash_key_lc(u_char *data, size_t len);
  77. ngx_uint_t ngx_hash_strlow(u_char *dst, u_char *src, size_t n);


  78. ngx_int_t ngx_hash_keys_array_init(ngx_hash_keys_arrays_t *ha, ngx_uint_t type);
  79. ngx_int_t ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key,
  80.     void *value, ngx_uint_t flags);


  81. #endif /* _NGX_HASH_H_INCLUDED_ */