pub fn murmur_hash2(key: &[u8], seed: u32) -> u32 {
const M: u32 = 0x5bd1e995;
const R: u32 = 24;
let mut h = seed ^ (key.len() as u32);
key.chunks_exact(4).for_each(|data| {
let mut k = u32::from_ne_bytes(data.try_into().unwrap_or([0u8; 4]));
k = k.saturating_mul(M);
k ^= k >> R;
k = k.saturating_mul(M);
h = h.saturating_mul(M);
h ^= k;
});
let key_len = key.len();
let mod_len = key_len % 4;
match mod_len {
3 => {
h ^= (key[key_len - 1] as u32) << 16;
h ^= (key[key_len - 2] as u32) << 8;
h ^= key[key_len - 3] as u32;
}
2 => {
h ^= (key[key_len - 1] as u32) << 8;
h ^= key[key_len - 2] as u32;
}
1 => h ^= key[key_len - 1] as u32,
_ => (),
}
h = h.saturating_mul(M);
h ^= h >> 13;
h = h.saturating_mul(M);
h ^= h >> 15;
h
}