pub struct VacantEntry<'a, K, V>where
K: Key,{ /* private fields */ }Expand description
A view into a vacant entry in a SecondaryMap. It is part of the
Entry enum.
Implementations§
Source§impl<'a, K, V> VacantEntry<'a, K, V>where
K: Key,
impl<'a, K, V> VacantEntry<'a, K, V>where
K: Key,
Sourcepub fn key(&self) -> K
pub fn key(&self) -> K
Gets the key that would be used when inserting a value through the
VacantEntry.
§Examples
let mut sm = SlotMap::new();
let mut sec: SecondaryMap<_, ()> = SecondaryMap::new();
let k = sm.insert(1);
if let Entry::Vacant(v) = sec.entry(k).unwrap() {
assert_eq!(v.key(), k);
}Sourcepub fn insert(self, value: V) -> &'a mut V
pub fn insert(self, value: V) -> &'a mut V
Sets the value of the entry with the VacantEntry’s key, and returns
a mutable reference to it.
§Examples
let mut sm = SlotMap::new();
let mut sec = SecondaryMap::new();
let k = sm.insert(1);
if let Entry::Vacant(v) = sec.entry(k).unwrap() {
let new_val = v.insert(3);
assert_eq!(new_val, &mut 3);
}Sourcepub fn remove_stale_entry(&mut self) -> Option<(K, V)>
pub fn remove_stale_entry(&mut self) -> Option<(K, V)>
Returns the stale key and data, if any, which would be overwritten by
inserting using this VacantEntry.
This situation arises if the stale key was removed from the primary map, and a subsequent insert into the primary map reused the slot.
remove_stale_entry can be used to handle this situation specially —
for example, if the application wants to lazily clean up tertiary data
in another data structure indexed by the now-stale key, or by the value
stored in the SecondaryMap.
Most applications will not need this.
§Examples
let mut pri = SlotMap::new();
let mut sec = SecondaryMap::new();
let k1 = pri.insert(1);
let ent = sec.entry(k1);
let mut vacant = match ent { Some(Entry::Vacant(vac)) => vac, _ => panic!("1. {:?}", &ent) };
assert_eq!(vacant.remove_stale_entry(), None);
sec.insert(k1, 'a');
pri.remove(k1);
// Imagine we don't keep a note of k1, after this.
let k2 = pri.insert(2);
let ent = sec.entry(k2);
let mut vacant = match ent { Some(Entry::Vacant(vac)) => vac, _ => panic!("2. {:?}", &ent) };
// Now we have recovered k1 and the associated data:
assert_eq!(vacant.remove_stale_entry(), Some((k1, 'a')));
assert_eq!(vacant.remove_stale_entry(), None);
vacant.insert('b');
assert!(sec.entry(k1).is_none());Trait Implementations§
Auto Trait Implementations§
impl<'a, K, V> Freeze for VacantEntry<'a, K, V>
impl<'a, K, V> RefUnwindSafe for VacantEntry<'a, K, V>where
V: RefUnwindSafe,
impl<'a, K, V> Send for VacantEntry<'a, K, V>where
V: Send,
impl<'a, K, V> Sync for VacantEntry<'a, K, V>where
V: Sync,
impl<'a, K, V> Unpin for VacantEntry<'a, K, V>
impl<'a, K, V> UnsafeUnpin for VacantEntry<'a, K, V>
impl<'a, K, V> !UnwindSafe for VacantEntry<'a, K, V>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<A> DynCastExt for A
impl<A> DynCastExt for A
Source§fn dyn_cast<T>(
self,
) -> Result<<A as DynCastExtHelper<T>>::Target, <A as DynCastExtHelper<T>>::Source>where
A: DynCastExtHelper<T>,
T: ?Sized,
fn dyn_cast<T>(
self,
) -> Result<<A as DynCastExtHelper<T>>::Target, <A as DynCastExtHelper<T>>::Source>where
A: DynCastExtHelper<T>,
T: ?Sized,
Source§fn dyn_upcast<T>(self) -> <A as DynCastExtAdvHelper<T, T>>::Target
fn dyn_upcast<T>(self) -> <A as DynCastExtAdvHelper<T, T>>::Target
Source§fn dyn_cast_adv<F, T>(
self,
) -> Result<<A as DynCastExtAdvHelper<F, T>>::Target, <A as DynCastExtAdvHelper<F, T>>::Source>
fn dyn_cast_adv<F, T>( self, ) -> Result<<A as DynCastExtAdvHelper<F, T>>::Target, <A as DynCastExtAdvHelper<F, T>>::Source>
Source§fn dyn_cast_with_config<C>(
self,
) -> Result<<A as DynCastExtAdvHelper<<C as DynCastConfig>::Source, <C as DynCastConfig>::Target>>::Target, <A as DynCastExtAdvHelper<<C as DynCastConfig>::Source, <C as DynCastConfig>::Target>>::Source>where
C: DynCastConfig,
A: DynCastExtAdvHelper<<C as DynCastConfig>::Source, <C as DynCastConfig>::Target>,
fn dyn_cast_with_config<C>(
self,
) -> Result<<A as DynCastExtAdvHelper<<C as DynCastConfig>::Source, <C as DynCastConfig>::Target>>::Target, <A as DynCastExtAdvHelper<<C as DynCastConfig>::Source, <C as DynCastConfig>::Target>>::Source>where
C: DynCastConfig,
A: DynCastExtAdvHelper<<C as DynCastConfig>::Source, <C as DynCastConfig>::Target>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more