use {siphasher::sip::SipHasher24, std::hash::BuildHasher};
#[derive(Debug, Clone)]
pub struct YellowstoneHasherBuilder {
seed: u64,
}
impl YellowstoneHasherBuilder {
pub const fn new(seed: u64) -> Self {
Self { seed }
}
pub const fn seed(&self) -> u64 {
self.seed
}
pub(crate) const fn keys_from_seed(seed: u64) -> (u64, u64) {
(seed, seed.rotate_left(32))
}
}
impl Default for YellowstoneHasherBuilder {
fn default() -> Self {
Self::new(super::constants::DEFAULT_HASH_SEED)
}
}
impl BuildHasher for YellowstoneHasherBuilder {
type Hasher = SipHasher24;
fn build_hasher(&self) -> SipHasher24 {
let (k0, k1) = Self::keys_from_seed(self.seed);
SipHasher24::new_with_keys(k0, k1)
}
}