// Implementation: Demetri Spanos (github.com/demetri/scribbles) // Jai Port: Jesse Coyle (github.com/Zilarrezko) MurMur_Seed : u32 : 0xa3c91521; murmur32 :: inline (s: string, seed: u32 = MurMur_Seed) -> u32 { return murmur32(s.data, s.count, seed); } murmur32 :: inline (x: $T, seed: u32 = MurMur_Seed) -> u32 { return murmur32(*x, size_of(T), seed); } murmur32 :: (key: *void, len: int, seed: u32 = MurMur_Seed) -> u32 { scrambler :: (k: u32) -> u32 #expand { c1: u32 : 0xcc9e2d51; c2: u32 : 0x1b873593; r1: int : 15; k = k*c1; k = k <<< r1; k = k*c2; return k; } h: u32 = seed; tail: *u8 = cast(*u8)key + (len/4)*4; p: *u32 = cast(*u32)key; while cast(*u8)p < tail { k: u32 = <> 16; h *= 0x85ebca6b; h ^= h >> 13; h *= 0xc2b2ae35; h ^= h >> 16; return h; }