1 2 3 4 5 6 7 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
//! An inlined version of rust-fnv crate use std::hash::{BuildHasherDefault, Hasher}; pub struct FnvHasher(u64); impl Default for FnvHasher { #[inline] fn default() -> FnvHasher { FnvHasher(0xcbf29ce484222325) } } impl Hasher for FnvHasher { #[inline] fn finish(&self) -> u64 { self.0 } #[inline] fn write(&mut self, bytes: &[u8]) { let FnvHasher(mut hash) = *self; for byte in bytes.iter() { hash ^= *byte as u64; hash = hash.wrapping_mul(0x100000001b3); } *self = FnvHasher(hash); } } /// A builder for default FNV hashers. pub type FnvBuildHasher = BuildHasherDefault<FnvHasher>;