xref: /unit/src/nxt_djb_hash.c (revision 0:a63ceefd6ab0)
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 #include <nxt_main.h>
8*0Sigor@sysoev.ru 
9*0Sigor@sysoev.ru 
10*0Sigor@sysoev.ru uint32_t
nxt_djb_hash(const void * data,size_t len)11*0Sigor@sysoev.ru nxt_djb_hash(const void *data, size_t len)
12*0Sigor@sysoev.ru {
13*0Sigor@sysoev.ru     uint32_t      hash;
14*0Sigor@sysoev.ru     const u_char  *p;
15*0Sigor@sysoev.ru 
16*0Sigor@sysoev.ru     p = data;
17*0Sigor@sysoev.ru     hash = NXT_DJB_HASH_INIT;
18*0Sigor@sysoev.ru 
19*0Sigor@sysoev.ru     while (len != 0) {
20*0Sigor@sysoev.ru         hash = nxt_djb_hash_add(hash, *p++);
21*0Sigor@sysoev.ru         len--;
22*0Sigor@sysoev.ru     }
23*0Sigor@sysoev.ru 
24*0Sigor@sysoev.ru     return hash;
25*0Sigor@sysoev.ru }
26*0Sigor@sysoev.ru 
27*0Sigor@sysoev.ru 
28*0Sigor@sysoev.ru uint32_t
nxt_djb_hash_lowcase(const void * data,size_t len)29*0Sigor@sysoev.ru nxt_djb_hash_lowcase(const void *data, size_t len)
30*0Sigor@sysoev.ru {
31*0Sigor@sysoev.ru     u_char        c;
32*0Sigor@sysoev.ru     uint32_t      hash;
33*0Sigor@sysoev.ru     const u_char  *p;
34*0Sigor@sysoev.ru 
35*0Sigor@sysoev.ru     p = data;
36*0Sigor@sysoev.ru     hash = NXT_DJB_HASH_INIT;
37*0Sigor@sysoev.ru 
38*0Sigor@sysoev.ru     while (len != 0) {
39*0Sigor@sysoev.ru         c = *p++;
40*0Sigor@sysoev.ru         hash = nxt_djb_hash_add(hash, nxt_lowcase(c));
41*0Sigor@sysoev.ru         len--;
42*0Sigor@sysoev.ru     }
43*0Sigor@sysoev.ru 
44*0Sigor@sysoev.ru     return hash;
45*0Sigor@sysoev.ru }
46