xref: /unit/src/nxt_djb_hash.h (revision 0)
1*0Sigor@sysoev.ru 
2*0Sigor@sysoev.ru /*
3*0Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
4*0Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
5*0Sigor@sysoev.ru  */
6*0Sigor@sysoev.ru 
7*0Sigor@sysoev.ru #ifndef _NXT_DJB_HASH_H_INCLUDED_
8*0Sigor@sysoev.ru #define _NXT_DJB_HASH_H_INCLUDED_
9*0Sigor@sysoev.ru 
10*0Sigor@sysoev.ru 
11*0Sigor@sysoev.ru /* A fast and simple hash function by Daniel J. Bernstein. */
12*0Sigor@sysoev.ru 
13*0Sigor@sysoev.ru 
14*0Sigor@sysoev.ru NXT_EXPORT uint32_t nxt_djb_hash(const void *data, size_t len);
15*0Sigor@sysoev.ru NXT_EXPORT uint32_t nxt_djb_hash_lowcase(const void *data, size_t len);
16*0Sigor@sysoev.ru 
17*0Sigor@sysoev.ru 
18*0Sigor@sysoev.ru #define NXT_DJB_HASH_INIT  5381
19*0Sigor@sysoev.ru 
20*0Sigor@sysoev.ru 
21*0Sigor@sysoev.ru #define                                                                       \
22*0Sigor@sysoev.ru nxt_djb_hash_add(hash, val)                                                   \
23*0Sigor@sysoev.ru     ((uint32_t) ((((hash) << 5) + (hash)) ^ (uint32_t) (val)))
24*0Sigor@sysoev.ru 
25*0Sigor@sysoev.ru 
26*0Sigor@sysoev.ru #endif /* _NXT_DJB_HASH_H_INCLUDED_ */
27