rust/compiler/rustc_data_structures/src/unhash.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

30 lines
788 B
Rust
Raw Normal View History

use std::collections::{HashMap, HashSet};
use std::hash::{BuildHasherDefault, Hasher};
pub type UnhashMap<K, V> = HashMap<K, V, BuildHasherDefault<Unhasher>>;
pub type UnhashSet<V> = HashSet<V, BuildHasherDefault<Unhasher>>;
/// This no-op hasher expects only a single `write_u64` call. It's intended for
/// map keys that already have hash-like quality, like `Fingerprint`.
#[derive(Default)]
pub struct Unhasher {
value: u64,
}
impl Hasher for Unhasher {
#[inline]
fn finish(&self) -> u64 {
self.value
}
fn write(&mut self, _bytes: &[u8]) {
unimplemented!("use write_u64");
}
#[inline]
fn write_u64(&mut self, value: u64) {
debug_assert_eq!(0, self.value, "Unhasher doesn't mix values!");
self.value = value;
}
}