Mention the Borrow guarantee on the Hash implementations for Array and Vec
To remind people like me who forget about it and send PRs to make them different, and to (probably) get a test failure if the code is changed to no longer uphold it.
This commit is contained in:
parent
84b1005bfd
commit
3802d573c3
2 changed files with 34 additions and 0 deletions
|
|
@ -2407,6 +2407,23 @@ impl<T: Clone, A: Allocator + Clone> Clone for Vec<T, A> {
|
|||
}
|
||||
}
|
||||
|
||||
/// The hash of a vector is the same as that of the corresponding slice,
|
||||
/// as required by the `core::borrow::Borrow` implementation.
|
||||
///
|
||||
/// ```
|
||||
/// use std::hash::{BuildHasher, Hash, Hasher};
|
||||
///
|
||||
/// fn hash_of(x: impl Hash, b: &impl BuildHasher) -> u64 {
|
||||
/// let mut h = b.build_hasher();
|
||||
/// x.hash(&mut h);
|
||||
/// h.finish()
|
||||
/// }
|
||||
///
|
||||
/// let b = std::collections::hash_map::RandomState::new();
|
||||
/// let v: Vec<u8> = vec![0xa8, 0x3c, 0x09];
|
||||
/// let s: &[u8] = &[0xa8, 0x3c, 0x09];
|
||||
/// assert_eq!(hash_of(v, &b), hash_of(s, &b));
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: Hash, A: Allocator> Hash for Vec<T, A> {
|
||||
#[inline]
|
||||
|
|
|
|||
|
|
@ -139,6 +139,23 @@ impl<'a, T, const N: usize> TryFrom<&'a mut [T]> for &'a mut [T; N] {
|
|||
}
|
||||
}
|
||||
|
||||
/// The hash of an array is the same as that of the corresponding slice,
|
||||
/// as required by the `Borrow` implementation.
|
||||
///
|
||||
/// ```
|
||||
/// use std::hash::{BuildHasher, Hash, Hasher};
|
||||
///
|
||||
/// fn hash_of(x: impl Hash, b: &impl BuildHasher) -> u64 {
|
||||
/// let mut h = b.build_hasher();
|
||||
/// x.hash(&mut h);
|
||||
/// h.finish()
|
||||
/// }
|
||||
///
|
||||
/// let b = std::collections::hash_map::RandomState::new();
|
||||
/// let a: [u8; 3] = [0xa8, 0x3c, 0x09];
|
||||
/// let s: &[u8] = &[0xa8, 0x3c, 0x09];
|
||||
/// assert_eq!(hash_of(a, &b), hash_of(s, &b));
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl<T: Hash, const N: usize> Hash for [T; N] {
|
||||
fn hash<H: hash::Hasher>(&self, state: &mut H) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue