Skip to content

Commit bee161d

Browse files
committed
Make compute_hash more general
1 parent 1e619ef commit bee161d

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

src/map.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1897,18 +1897,18 @@ impl<K, V, S, A: Allocator + Clone> HashMap<K, V, S, A> {
18971897
/// # Examples
18981898
///
18991899
/// ```
1900-
/// use hashbrown::{HashMap, hash_map::RawEntryMut};
1900+
/// use core::hash::{BuildHasher, Hash};
1901+
/// use hashbrown::hash_map::{HashMap, RawEntryMut};
19011902
///
19021903
/// let mut map = HashMap::new();
19031904
/// map.extend([("a", 100), ("b", 200), ("c", 300)]);
19041905
///
1905-
/// let compute_hash = |map: &HashMap<&str, i32>, k: &str| -> u64 {
1906-
/// use core::hash::{BuildHasher, Hash, Hasher};
1907-
///
1908-
/// let mut hasher = map.hasher().build_hasher();
1909-
/// k.hash(&mut hasher);
1910-
/// hasher.finish()
1911-
/// };
1906+
/// fn compute_hash<K: Hash + ?Sized, S: BuildHasher>(hash_builder: &S, key: &K) -> u64 {
1907+
/// use core::hash::Hasher;
1908+
/// let mut state = hash_builder.build_hasher();
1909+
/// key.hash(&mut state);
1910+
/// state.finish()
1911+
/// }
19121912
///
19131913
/// // Existing key (insert and update)
19141914
/// match map.raw_entry_mut().from_key(&"a") {
@@ -1926,7 +1926,7 @@ impl<K, V, S, A: Allocator + Clone> HashMap<K, V, S, A> {
19261926
/// assert_eq!(map.len(), 3);
19271927
///
19281928
/// // Existing key (take)
1929-
/// let hash = compute_hash(&map, &"c");
1929+
/// let hash = compute_hash(map.hasher(), &"c");
19301930
/// match map.raw_entry_mut().from_key_hashed_nocheck(hash, &"c") {
19311931
/// RawEntryMut::Vacant(_) => unreachable!(),
19321932
/// RawEntryMut::Occupied(view) => {
@@ -1938,7 +1938,7 @@ impl<K, V, S, A: Allocator + Clone> HashMap<K, V, S, A> {
19381938
///
19391939
/// // Nonexistent key (insert and update)
19401940
/// let key = "d";
1941-
/// let hash = compute_hash(&map, &key);
1941+
/// let hash = compute_hash(map.hasher(), &key);
19421942
/// match map.raw_entry_mut().from_hash(hash, |q| *q == key) {
19431943
/// RawEntryMut::Occupied(_) => unreachable!(),
19441944
/// RawEntryMut::Vacant(view) => {
@@ -1983,21 +1983,21 @@ impl<K, V, S, A: Allocator + Clone> HashMap<K, V, S, A> {
19831983
/// # Examples
19841984
///
19851985
/// ```
1986+
/// use core::hash::{BuildHasher, Hash};
19861987
/// use hashbrown::HashMap;
19871988
///
19881989
/// let mut map = HashMap::new();
19891990
/// map.extend([("a", 100), ("b", 200), ("c", 300)]);
19901991
///
1991-
/// let compute_hash = |map: &HashMap<&str, i32>, k: &str| -> u64 {
1992-
/// use core::hash::{BuildHasher, Hash, Hasher};
1993-
///
1994-
/// let mut hasher = map.hasher().build_hasher();
1995-
/// k.hash(&mut hasher);
1996-
/// hasher.finish()
1997-
/// };
1992+
/// fn compute_hash<K: Hash + ?Sized, S: BuildHasher>(hash_builder: &S, key: &K) -> u64 {
1993+
/// use core::hash::Hasher;
1994+
/// let mut state = hash_builder.build_hasher();
1995+
/// key.hash(&mut state);
1996+
/// state.finish()
1997+
/// }
19981998
///
19991999
/// for k in ["a", "b", "c", "d", "e", "f"] {
2000-
/// let hash = compute_hash(&map, k);
2000+
/// let hash = compute_hash(map.hasher(), k);
20012001
/// let v = map.get(&k).cloned();
20022002
/// let kv = v.as_ref().map(|v| (&k, v));
20032003
///

0 commit comments

Comments
 (0)