zig/lib/std / hash.zig

const adler = @import("hash/adler.zig");

Adler32

pub const Adler32 = adler.Adler32;

const auto_hash = @import("hash/auto_hash.zig");

autoHash

pub const autoHash = auto_hash.autoHash;

autoHashStrat

pub const autoHashStrat = auto_hash.hash;

Strategy

pub const Strategy = auto_hash.HashStrategy;

// pub for polynomials + generic crc32 construction

crc

hash/crc.zig
pub const crc = @import("hash/crc.zig");

Crc32

pub const Crc32 = crc.Crc32;

const fnv = @import("hash/fnv.zig");

Fnv1a_32

pub const Fnv1a_32 = fnv.Fnv1a_32;

Fnv1a_64

pub const Fnv1a_64 = fnv.Fnv1a_64;

Fnv1a_128

pub const Fnv1a_128 = fnv.Fnv1a_128;

const siphash = @import("crypto/siphash.zig");

SipHash64

pub const SipHash64 = siphash.SipHash64;

SipHash128

pub const SipHash128 = siphash.SipHash128;

murmur

hash/murmur.zig
pub const murmur = @import("hash/murmur.zig");

Murmur2_32

pub const Murmur2_32 = murmur.Murmur2_32;

Murmur2_64

pub const Murmur2_64 = murmur.Murmur2_64;

Murmur3_32

pub const Murmur3_32 = murmur.Murmur3_32;

cityhash

hash/cityhash.zig
pub const cityhash = @import("hash/cityhash.zig");

CityHash32

pub const CityHash32 = cityhash.CityHash32;

CityHash64

pub const CityHash64 = cityhash.CityHash64;

const wyhash = @import("hash/wyhash.zig");

Wyhash

pub const Wyhash = wyhash.Wyhash;

const xxhash = @import("hash/xxhash.zig");

XxHash3

pub const XxHash3 = xxhash.XxHash3;

XxHash64

pub const XxHash64 = xxhash.XxHash64;

XxHash32

pub const XxHash32 = xxhash.XxHash32;

uint32()

This is handy if you have a u32 and want a u32 and don't want to take a detour through many layers of abstraction elsewhere in the std.hash namespace. Copied from https://nullprogram.com/blog/2018/07/31/

pub fn uint32(input: u32) u32 {
    var x: u32 = input;
    x ^= x >> 16;
    x *%= 0x7feb352d;
    x ^= x >> 15;
    x *%= 0x846ca68b;
    x ^= x >> 16;
    return x;
}

test {
    _ = adler;
    _ = auto_hash;
    _ = crc;
    _ = fnv;
    _ = murmur;
    _ = cityhash;
    _ = wyhash;
    _ = xxhash;
}