Struct left_right::ReadGuard
source · [−]pub struct ReadGuard<'rh, T: ?Sized> { /* private fields */ }
Expand description
A guard wrapping a live reference into a left-right protected T
.
As long as this guard lives, the T
being read cannot change. If a writer attempts to call
WriteHandle::publish
, that call will block until this guard is
dropped.
To scope the guard to a subset of the data in T
, use map
and
try_map
.
Implementations
sourceimpl<'rh, T: ?Sized> ReadGuard<'rh, T>
impl<'rh, T: ?Sized> ReadGuard<'rh, T>
sourcepub fn map<F, U: ?Sized>(orig: Self, f: F) -> ReadGuard<'rh, U> where
F: for<'a> FnOnce(&'a T) -> &'a U,
pub fn map<F, U: ?Sized>(orig: Self, f: F) -> ReadGuard<'rh, U> where
F: for<'a> FnOnce(&'a T) -> &'a U,
Makes a new ReadGuard
for a component of the borrowed data.
This is an associated function that needs to be used as ReadGuard::map(...)
, since
a method would interfere with methods of the same name on the contents of a Readguard
used through Deref
.
Examples
use left_right::{ReadGuard, ReadHandle};
fn get_str(handle: &ReadHandle<Vec<(String, i32)>>, i: usize) -> Option<ReadGuard<'_, str>> {
handle.enter().map(|guard| {
ReadGuard::map(guard, |t| {
&*t[i].0
})
})
}
sourcepub fn try_map<F, U: ?Sized>(orig: Self, f: F) -> Option<ReadGuard<'rh, U>> where
F: for<'a> FnOnce(&'a T) -> Option<&'a U>,
pub fn try_map<F, U: ?Sized>(orig: Self, f: F) -> Option<ReadGuard<'rh, U>> where
F: for<'a> FnOnce(&'a T) -> Option<&'a U>,
Makes a new ReadGuard
for a component of the borrowed data that may not exist.
This method differs from map
in that it drops the guard if the closure maps
to None
. This allows you to “lift” a ReadGuard<Option<T>>
into an
Option<ReadGuard<T>>
.
This is an associated function that needs to be used as ReadGuard::try_map(...)
, since
a method would interfere with methods of the same name on the contents of a Readguard
used through Deref
.
Examples
use left_right::{ReadGuard, ReadHandle};
fn try_get_str(handle: &ReadHandle<Vec<(String, i32)>>, i: usize) -> Option<ReadGuard<'_, str>> {
handle.enter().and_then(|guard| {
ReadGuard::try_map(guard, |t| {
t.get(i).map(|v| &*v.0)
})
})
}
Trait Implementations
Auto Trait Implementations
impl<'rh, T> !RefUnwindSafe for ReadGuard<'rh, T>
impl<'rh, T> !Send for ReadGuard<'rh, T>
impl<'rh, T> !Sync for ReadGuard<'rh, T>
impl<'rh, T: ?Sized> Unpin for ReadGuard<'rh, T>
impl<'rh, T> !UnwindSafe for ReadGuard<'rh, T>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more