1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
//! `NthHash` trait and its default implementation. use std::hash::{Hash, Hasher}; use siphasher::sip::SipHasher13; /// Hash function for bloom filters. pub trait NthHash { /// Calculates the `nth` hash value of `data`. fn nth_hash<T: Hash + ?Sized>(&self, data: &T, nth: usize) -> u64; } /// The default implementation of `NthHash` trait. #[derive(Debug)] pub struct DefaultHasher; impl NthHash for DefaultHasher { fn nth_hash<T: Hash + ?Sized>(&self, data: &T, nth: usize) -> u64 { let mut hasher = SipHasher13::new(); (nth, data).hash(&mut hasher); hasher.finish() } }