Implement (HashMap) Entry::insert as per #60142
This commit is contained in:
parent
7870050796
commit
bdcc21cbc4
3 changed files with 66 additions and 4 deletions
|
|
@ -23,7 +23,7 @@ libc = { version = "0.2.51", default-features = false, features = ['rustc-dep-of
|
|||
compiler_builtins = { version = "0.1.16" }
|
||||
profiler_builtins = { path = "../libprofiler_builtins", optional = true }
|
||||
unwind = { path = "../libunwind" }
|
||||
hashbrown = { version = "0.5.0", features = ['rustc-dep-of-std'] }
|
||||
hashbrown = { version = "0.6.1", default-features = false, features = ['rustc-dep-of-std'] }
|
||||
|
||||
[dependencies.backtrace_rs]
|
||||
package = "backtrace"
|
||||
|
|
|
|||
|
|
@ -2030,6 +2030,31 @@ impl<'a, K, V> Entry<'a, K, V> {
|
|||
Vacant(entry) => Vacant(entry),
|
||||
}
|
||||
}
|
||||
|
||||
/// Sets the value of the entry, and returns an OccupiedEntry.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(entry_insert)]
|
||||
/// use std::collections::HashMap;
|
||||
///
|
||||
/// let mut map: HashMap<&str, String> = HashMap::new();
|
||||
/// let entry = map.entry("poneyland").insert("hoho".to_string());
|
||||
///
|
||||
/// assert_eq!(entry.key(), &"poneyland");
|
||||
/// ```
|
||||
#[inline]
|
||||
#[unstable(feature = "entry_insert", issue = "65225")]
|
||||
pub fn insert(self, value: V) -> OccupiedEntry<'a, K, V> {
|
||||
match self {
|
||||
Occupied(mut entry) => {
|
||||
entry.insert(value);
|
||||
entry
|
||||
},
|
||||
Vacant(entry) => entry.insert_entry(value),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, K, V: Default> Entry<'a, K, V> {
|
||||
|
|
@ -2347,6 +2372,28 @@ impl<'a, K: 'a, V: 'a> VacantEntry<'a, K, V> {
|
|||
pub fn insert(self, value: V) -> &'a mut V {
|
||||
self.base.insert(value)
|
||||
}
|
||||
|
||||
/// Sets the value of the entry with the VacantEntry's key,
|
||||
/// and returns an OccupiedEntry.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::collections::HashMap;
|
||||
/// use std::collections::hash_map::Entry;
|
||||
///
|
||||
/// let mut map: HashMap<&str, u32> = HashMap::new();
|
||||
///
|
||||
/// if let Entry::Vacant(o) = map.entry("poneyland") {
|
||||
/// o.insert(37);
|
||||
/// }
|
||||
/// assert_eq!(map["poneyland"], 37);
|
||||
/// ```
|
||||
#[inline]
|
||||
fn insert_entry(self, value: V) -> OccupiedEntry<'a, K, V> {
|
||||
let base = self.base.insert_entry(value);
|
||||
OccupiedEntry { base }
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue