Skip to main content

MappedMutexGuard

Struct MappedMutexGuard 

Source
pub struct MappedMutexGuard<'a, T: ?Sized + 'a> {
    data: NonNull<T>,
    inner: &'a Mutex,
    _variance: PhantomData<&'a mut T>,
}
🔬This is a nightly-only experimental API. (mapped_lock_guards #117108)
Expand description

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>
🔬This is a nightly-only experimental API. (mapped_lock_guards #117108)
§inner: &'a Mutex
🔬This is a nightly-only experimental API. (mapped_lock_guards #117108)
§_variance: PhantomData<&'a mut T>
🔬This is a nightly-only experimental API. (mapped_lock_guards #117108)

Implementations§

Source§

impl<'a, T: ?Sized> MappedMutexGuard<'a, T>

Source

pub fn map<U, F>(orig: Self, f: F) -> MappedMutexGuard<'a, U>
where F: FnOnce(&mut T) -> &mut U, U: ?Sized,

🔬This is a nightly-only experimental API. (mapped_lock_guards #117108)

Makes a MappedMutexGuard for a component of the borrowed data, e.g. an enum variant.

The Mutex is 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 the MutexGuard used through Deref.

Source

pub fn filter_map<U, F>( orig: Self, f: F, ) -> Result<MappedMutexGuard<'a, U>, Self>
where F: FnOnce(&mut T) -> Option<&mut U>, U: ?Sized,

🔬This is a nightly-only experimental API. (mapped_lock_guards #117108)

Makes a MappedMutexGuard for a component of the borrowed data. The original guard is returned as an Err(...) if the closure returns None.

The Mutex is 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 the MutexGuard used through Deref.

Trait Implementations§

Source§

impl<T: ?Sized> !Send for MappedMutexGuard<'_, T>

Source§

impl<T: ?Sized + Debug> Debug for MappedMutexGuard<'_, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: ?Sized> Deref for MappedMutexGuard<'_, T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &T

Dereferences the value.
Source§

impl<T: ?Sized> DerefMut for MappedMutexGuard<'_, T>

Source§

fn deref_mut(&mut self) -> &mut T

Mutably dereferences the value.
Source§

impl<T: ?Sized + Display> Display for MappedMutexGuard<'_, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: ?Sized> Drop for MappedMutexGuard<'_, T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics #130494)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl<T: ?Sized + Sync> Sync for MappedMutexGuard<'_, T>

Auto Trait Implementations§

§

impl<'a, T> !UnwindSafe for MappedMutexGuard<'a, T>

§

impl<'a, T> Freeze for MappedMutexGuard<'a, T>
where T: ?Sized,

§

impl<'a, T> RefUnwindSafe for MappedMutexGuard<'a, T>
where T: RefUnwindSafe + ?Sized,

§

impl<'a, T> Unpin for MappedMutexGuard<'a, T>
where T: ?Sized,

§

impl<'a, T> UnsafeUnpin for MappedMutexGuard<'a, T>
where T: ?Sized,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types #44874)
The target type on which the method may be called.
Source§

impl<T> SizeHint for T
where T: ?Sized,

Source§

default fn lower_bound(&self) -> usize

🔬This is a nightly-only experimental API. (core_io_internals)
Returns a lower bound on the number of elements this container-like item contains. For example, an array [u8; 12] could return any value between 0 and 12 inclusively as a correct implementation. Read more
Source§

default fn upper_bound(&self) -> Option<usize>

🔬This is a nightly-only experimental API. (core_io_internals)
Returns an upper bound on the number of elements this container-like item contains if it can be determined, otherwise None. Read more
Source§

final fn size_hint(&self) -> (usize, Option<usize>)

🔬This is a nightly-only experimental API. (core_io_internals)
Returns an estimate for the number of elements this container like type contains. Read more
Source§

impl<T> SizedTypeProperties for T

Source§

#[doc(hidden)]
const SIZE: usize = _

🔬This is a nightly-only experimental API. (sized_type_properties)
Source§

#[doc(hidden)]
const ALIGN: usize = _

🔬This is a nightly-only experimental API. (sized_type_properties)
Source§

#[doc(hidden)]
const ALIGNMENT: Alignment = _

🔬This is a nightly-only experimental API. (ptr_alignment_type #102070)
Source§

#[doc(hidden)]
const IS_ZST: bool = _

🔬This is a nightly-only experimental API. (sized_type_properties)
true if this type requires no storage. false if its size is greater than zero. Read more
Source§

#[doc(hidden)]
const LAYOUT: Layout = _

🔬This is a nightly-only experimental API. (sized_type_properties)
Source§

#[doc(hidden)]
const MAX_SLICE_LEN: usize = _

🔬This is a nightly-only experimental API. (sized_type_properties)
The largest safe length for a [Self]. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.