Coverage Report

Created: 2026-05-07 06:39

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/unit/src/nxt_murmur_hash.c
Line
Count
Source
1
2
/*
3
 * The code is based on the code by Austin Appleby,
4
 * released to the public domain.
5
 */
6
7
#include <nxt_main.h>
8
9
10
uint32_t
11
nxt_murmur_hash2(const void *data, size_t len)
12
1.23k
{
13
1.23k
    uint32_t        h, k;
14
1.23k
    const u_char    *p;
15
1.23k
    const uint32_t  m = 0x5BD1E995;
16
17
1.23k
    p = data;
18
1.23k
    h = 0 ^ (uint32_t) len;
19
20
5.62k
    while (len >= 4) {
21
4.38k
        k  = p[0];
22
4.38k
        k |= p[1] << 8;
23
4.38k
        k |= p[2] << 16;
24
4.38k
        k |= p[3] << 24;
25
26
4.38k
        k *= m;
27
4.38k
        k ^= k >> 24;
28
4.38k
        k *= m;
29
30
4.38k
        h *= m;
31
4.38k
        h ^= k;
32
33
4.38k
        p += 4;
34
4.38k
        len -= 4;
35
4.38k
    }
36
37
1.23k
    switch (len) {
38
395
    case 3:
39
395
        h ^= p[2] << 16;
40
        /* Fall through. */
41
536
    case 2:
42
536
        h ^= p[1] << 8;
43
        /* Fall through. */
44
670
    case 1:
45
670
        h ^= p[0];
46
670
        h *= m;
47
1.23k
    }
48
49
1.23k
    h ^= h >> 13;
50
1.23k
    h *= m;
51
1.23k
    h ^= h >> 15;
52
53
1.23k
    return h;
54
1.23k
}
55
56
57
/* The MurmurHash2 for fixed 4 byte length. */
58
59
uint32_t
60
nxt_murmur_hash2_uint32(const void *data)
61
1.23k
{
62
1.23k
    uint32_t        h, k;
63
1.23k
    const u_char    *p;
64
1.23k
    const uint32_t  m = 0x5BD1E995;
65
66
1.23k
    p = data;
67
68
1.23k
    k  = p[0];
69
1.23k
    k |= p[1] << 8;
70
1.23k
    k |= p[2] << 16;
71
1.23k
    k |= p[3] << 24;
72
73
1.23k
    k *= m;
74
1.23k
    k ^= k >> 24;
75
1.23k
    k *= m;
76
77
1.23k
    h = 0 ^ 4;
78
1.23k
    h *= m;
79
1.23k
    h ^= k;
80
81
1.23k
    h ^= h >> 13;
82
1.23k
    h *= m;
83
1.23k
    h ^= h >> 15;
84
85
1.23k
    return h;
86
1.23k
}