diff options
| author | Seo Sanghyeon <sanxiyn@gmail.com> | 2016-12-19 16:59:35 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-12-19 16:59:35 +0900 |
| commit | 86cf9222e95ebfcfdfe1a1794c9295075dc16534 (patch) | |
| tree | dda6fd189be3f43e8d2d090da6b3dd4988348547 /src/libcore | |
| parent | cc662efca1e2a070887839a935c3d14de4991526 (diff) | |
| parent | d409fc378ca46fca6fb0b0b986b0f11cfc62eb8f (diff) | |
| download | rust-86cf9222e95ebfcfdfe1a1794c9295075dc16534.tar.gz rust-86cf9222e95ebfcfdfe1a1794c9295075dc16534.zip | |
Rollup merge of #38334 - frewsxcv:BuildHasherDefault, r=GuillaumeGomez
Rewrite, improve documentation for `core::hash::BuildHasherDefault`. Fixes https://github.com/rust-lang/rust/issues/31242.
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/hash/mod.rs | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/libcore/hash/mod.rs b/src/libcore/hash/mod.rs index ac36cbaace7..18b465d85a1 100644 --- a/src/libcore/hash/mod.rs +++ b/src/libcore/hash/mod.rs @@ -255,10 +255,44 @@ pub trait BuildHasher { fn build_hasher(&self) -> Self::Hasher; } -/// A structure which implements `BuildHasher` for all `Hasher` types which also -/// implement `Default`. +/// The `BuildHasherDefault` structure is used in scenarios where one has a +/// type that implements [`Hasher`] and [`Default`], but needs that type to +/// implement [`BuildHasher`]. /// -/// This struct is 0-sized and does not need construction. +/// This structure is zero-sized and does not need construction. +/// +/// # Examples +/// +/// Using `BuildHasherDefault` to specify a custom [`BuildHasher`] for +/// [`HashMap`]: +/// +/// ``` +/// use std::collections::HashMap; +/// use std::hash::{BuildHasherDefault, Hasher}; +/// +/// #[derive(Default)] +/// struct MyHasher; +/// +/// impl Hasher for MyHasher { +/// fn write(&mut self, bytes: &[u8]) { +/// // Your hashing algorithm goes here! +/// unimplemented!() +/// } +/// +/// fn finish(&self) -> u64 { +/// // Your hashing algorithm goes here! +/// unimplemented!() +/// } +/// } +/// +/// type MyBuildHasher = BuildHasherDefault<MyHasher>; +/// +/// let hash_map = HashMap::<u32, u32, MyBuildHasher>::default(); +/// ``` +/// +/// [`BuildHasher`]: trait.BuildHasher.html +/// [`Default`]: ../default/trait.Default.html +/// [`Hasher`]: trait.Hasher.html #[stable(since = "1.7.0", feature = "build_hasher")] pub struct BuildHasherDefault<H>(marker::PhantomData<H>); |
