Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › hash › murmur › Murmur2_32 Public Namespace Murmur2_32 Doc Source Public Namespace std.hash.murmur.Murmur2_32
pub const Murmur2_32 = struct Namespaces Functions File hash/murmur.zig: 8
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 pub const Murmur2_32 = struct {
const Self = @This ();
pub fn hash (str : []const u8 ) u32 {
return @call (.always_inline , Self .hashWithSeed , .{ str , default_seed });
}
pub fn hashWithSeed (str : []const u8 , seed : u32 ) u32 {
const m : u32 = 0x5bd1e995 ;
const len : u32 = @truncate (str .len );
var h1 : u32 = seed ^ len ;
for (@as ([*]align (1 ) const u32 , @ptrCast (str .ptr ))[0 ..(len >> 2 )]) |v | {
var k1 : u32 = v ;
if (native_endian == .big )
k1 = @byteSwap (k1 );
k1 *%= m ;
k1 ^= k1 >> 24 ;
k1 *%= m ;
h1 *%= m ;
h1 ^= k1 ;
}
const offset = len & 0xfffffffc ;
const rest = len & 3 ;
if (rest >= 3 ) {
h1 ^= @as (u32 , @intCast (str [offset + 2 ])) << 16 ;
}
if (rest >= 2 ) {
h1 ^= @as (u32 , @intCast (str [offset + 1 ])) << 8 ;
}
if (rest >= 1 ) {
h1 ^= @as (u32 , @intCast (str [offset + 0 ]));
h1 *%= m ;
}
h1 ^= h1 >> 13 ;
h1 *%= m ;
h1 ^= h1 >> 15 ;
return h1 ;
}
pub fn hashUint32 (v : u32 ) u32 {
return @call (.always_inline , Self .hashUint32WithSeed , .{ v , default_seed });
}
pub fn hashUint32WithSeed (v : u32 , seed : u32 ) u32 {
const m : u32 = 0x5bd1e995 ;
const len : u32 = 4 ;
var h1 : u32 = seed ^ len ;
var k1 : u32 = undefined ;
k1 = v *% m ;
k1 ^= k1 >> 24 ;
k1 *%= m ;
h1 *%= m ;
h1 ^= k1 ;
h1 ^= h1 >> 13 ;
h1 *%= m ;
h1 ^= h1 >> 15 ;
return h1 ;
}
pub fn hashUint64 (v : u64 ) u32 {
return @call (.always_inline , Self .hashUint64WithSeed , .{ v , default_seed });
}
pub fn hashUint64WithSeed (v : u64 , seed : u32 ) u32 {
const m : u32 = 0x5bd1e995 ;
const len : u32 = 8 ;
var h1 : u32 = seed ^ len ;
var k1 : u32 = undefined ;
k1 = @as (u32 , @truncate (v )) *% m ;
k1 ^= k1 >> 24 ;
k1 *%= m ;
h1 *%= m ;
h1 ^= k1 ;
k1 = @as (u32 , @truncate (v >> 32 )) *% m ;
k1 ^= k1 >> 24 ;
k1 *%= m ;
h1 *%= m ;
h1 ^= k1 ;
h1 ^= h1 >> 13 ;
h1 *%= m ;
h1 ^= h1 >> 15 ;
return h1 ;
}
}