pub mod sixty_four { use crate::XxHash64; use core::hash::BuildHasher; use rand::{self, Rng}; #[derive(Clone)] /// Constructs a randomized seed and reuses it for multiple hasher instances. pub struct RandomXxHashBuilder64(u64); impl RandomXxHashBuilder64 { fn new() -> RandomXxHashBuilder64 { RandomXxHashBuilder64(rand::thread_rng().gen()) } } impl Default for RandomXxHashBuilder64 { fn default() -> RandomXxHashBuilder64 { RandomXxHashBuilder64::new() } } impl BuildHasher for RandomXxHashBuilder64 { type Hasher = XxHash64; fn build_hasher(&self) -> XxHash64 { XxHash64::with_seed(self.0) } } } pub mod thirty_two { use crate::XxHash32; use core::hash::BuildHasher; use rand::{self, Rng}; #[derive(Clone)] /// Constructs a randomized seed and reuses it for multiple hasher instances. See the usage warning on `XxHash32`. pub struct RandomXxHashBuilder32(u32); impl RandomXxHashBuilder32 { fn new() -> RandomXxHashBuilder32 { RandomXxHashBuilder32(rand::thread_rng().gen()) } } impl Default for RandomXxHashBuilder32 { fn default() -> RandomXxHashBuilder32 { RandomXxHashBuilder32::new() } } impl BuildHasher for RandomXxHashBuilder32 { type Hasher = XxHash32; fn build_hasher(&self) -> XxHash32 { XxHash32::with_seed(self.0) } } } pub mod xxh3 { use crate::xxh3::{Hash128, Hash64}; use core::hash::BuildHasher; use rand::{self, Rng}; #[derive(Clone)] /// Constructs a randomized seed and reuses it for multiple hasher instances. pub struct RandomHashBuilder64(u64); impl RandomHashBuilder64 { fn new() -> RandomHashBuilder64 { RandomHashBuilder64(rand::thread_rng().gen()) } } impl Default for RandomHashBuilder64 { fn default() -> RandomHashBuilder64 { RandomHashBuilder64::new() } } impl BuildHasher for RandomHashBuilder64 { type Hasher = Hash64; fn build_hasher(&self) -> Hash64 { Hash64::with_seed(self.0) } } #[derive(Clone)] /// Constructs a randomized seed and reuses it for multiple hasher instances. pub struct RandomHashBuilder128(u64); impl RandomHashBuilder128 { fn new() -> RandomHashBuilder128 { RandomHashBuilder128(rand::thread_rng().gen()) } } impl Default for RandomHashBuilder128 { fn default() -> RandomHashBuilder128 { RandomHashBuilder128::new() } } impl BuildHasher for RandomHashBuilder128 { type Hasher = Hash128; fn build_hasher(&self) -> Hash128 { Hash128::with_seed(self.0) } } }