Struct MappedMutexGuard
#[must_use = "if unused the Mutex will immediately unlock"]
pub struct MappedMutexGuard<'a, T: ?Sized + 'a> { pub(in ::sync::poison::mutex) data: NonNull<T>, pub(in ::sync::poison::mutex) inner: &'a Mutex, pub(in ::sync::poison::mutex) poison_flag: &'a Flag, pub(in ::sync::poison::mutex) poison: Guard, pub(in ::sync::poison::mutex) _variance: PhantomData<&'a mut T> }
An RAII mutex guard returned by MutexGuard::map, which can point to a
subfield of the protected data. When this structure is dropped (falls out
of scope), the lock will be unlocked.
The main difference between MappedMutexGuard and MutexGuard is that the
former cannot be used with Condvar, since that
could introduce soundness issues if the locked object is modified by another
thread while the Mutex is unlocked.
The data protected by the mutex can be accessed through this guard via its
Deref and DerefMut implementations.
This structure is created by the map and filter_map methods on
MutexGuard.
Fields
data: NonNull<T>inner: &'a Mutexpoison_flag: &'a Flagpoison: Guard_variance: PhantomData<&'a mut T>
Implementations
impl<'a, T: ?Sized> MappedMutexGuard<'a, T>
fn map<U, F>(orig: Self, f: F) -> MappedMutexGuard<'a, U> where F: FnOnce(&mut T) -> &mut U, U: ?Sized,Makes a
MappedMutexGuardfor a component of the borrowed data, e.g. an enum variant.The
Mutexis already locked, so this cannot fail.This is an associated function that needs to be used as
MappedMutexGuard::map(...). A method would interfere with methods of the same name on the contents of theMutexGuardused throughDeref.fn filter_map<U, F>(orig: Self, f: F) -> Result<MappedMutexGuard<'a, U>, Self> where F: FnOnce(&mut T) -> Option<&mut U>, U: ?Sized,Makes a
MappedMutexGuardfor a component of the borrowed data. The original guard is returned as anErr(...)if the closure returnsNone.The
Mutexis already locked, so this cannot fail.This is an associated function that needs to be used as
MappedMutexGuard::filter_map(...). A method would interfere with methods of the same name on the contents of theMutexGuardused throughDeref.
Trait Implementations
impl<T: ?Sized + Debug> Debug for MappedMutexGuard<'_, T>
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl<T: ?Sized + Display> Display for MappedMutexGuard<'_, T>
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl<T: ?Sized + Sync> Sync for MappedMutexGuard<'_, T>
impl<T: ?Sized> !Send for MappedMutexGuard<'_, T>
impl<T: ?Sized> Deref for MappedMutexGuard<'_, T>
type Target = T;fn deref(&self) -> &T
impl<T: ?Sized> DerefMut for MappedMutexGuard<'_, T>
fn deref_mut(&mut self) -> &mut T
impl<T: ?Sized> Drop for MappedMutexGuard<'_, T>
fn drop(&mut self)
Auto Trait Implementations
impl<'a, T> !UnwindSafe for MappedMutexGuard<'a, T>
impl<'a, T> Freeze for MappedMutexGuard<'a, T>
where
NonNull<T>: Freeze,
PhantomData<&'a mut T>: Freeze,
T: ?Sized,
impl<'a, T> RefUnwindSafe for MappedMutexGuard<'a, T>
where
NonNull<T>: RefUnwindSafe,
PhantomData<&'a mut T>: RefUnwindSafe,
T: ?Sized,
impl<'a, T> Unpin for MappedMutexGuard<'a, T>
where
NonNull<T>: Unpin,
PhantomData<&'a mut T>: Unpin,
T: ?Sized,
impl<'a, T> UnsafeUnpin for MappedMutexGuard<'a, T>
where
NonNull<T>: UnsafeUnpin,
PhantomData<&'a mut T>: UnsafeUnpin,
T: ?Sized,
Blanket Implementations
impl<P, T> Receiver for MappedMutexGuard<'a, T>
where
P: Deref<Target = T> + ?Sized,
T: ?Sized,
type Target = T;
impl<T> Any for MappedMutexGuard<'a, T>
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for MappedMutexGuard<'a, T>
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for MappedMutexGuard<'a, T>
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> From<T> for MappedMutexGuard<'a, T>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> SizeHint for MappedMutexGuard<'a, T>
where
T: ?Sized,
fn lower_bound(&self) -> usizefn upper_bound(&self) -> Option<usize>
impl<T> SizedTypeProperties for MappedMutexGuard<'a, T>
impl<T> ToString for MappedMutexGuard<'a, T>
where
T: Display + ?Sized,
fn to_string(&self) -> String
impl<T, U> Into<U> for MappedMutexGuard<'a, T>
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for MappedMutexGuard<'a, T>
where
U: Into<T>,
type Error = Infallible;fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for MappedMutexGuard<'a, T>
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>