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
use std::collections::HashMap; use std::hash::{BuildHasherDefault, Hasher}; pub struct IntegerHasher { hash: u64, } impl Default for IntegerHasher { #[inline] fn default() -> IntegerHasher { IntegerHasher { hash: 0 } } } impl Hasher for IntegerHasher { #[inline] fn finish(&self) -> u64 { self.hash } #[inline] fn write(&mut self, bytes: &[u8]) { let mut hash: u64 = 0; for (i, byte) in bytes.iter().enumerate() { hash += u64::from(*byte) << (8 * i); } self.hash = hash; } } pub type IntegerHashMap<K, V> = HashMap<K, V, BuildHasherDefault<IntegerHasher>>;