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 library itself.
Zig › std/ › hash/ › murmur.zig › Murmur2_32
Murmur2_32
murmur.Murmur2_32
pub const Murmur2_32 = struct
File
Code
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 ;
}
}