Struct alloc::collections::btree::borrow::DormantMutRef
source · pub struct DormantMutRef<'a, T> {
ptr: NonNull<T>,
_marker: PhantomData<&'a mut T>,
}
Expand description
Models a reborrow of some unique reference, when you know that the reborrow and all its descendants (i.e., all pointers and references derived from it) will not be used any more at some point, after which you want to use the original unique reference again.
The borrow checker usually handles this stacking of borrows for you, but
some control flows that accomplish this stacking are too complicated for
the compiler to follow. A DormantMutRef
allows you to check borrowing
yourself, while still expressing its stacked nature, and encapsulating
the raw pointer code needed to do this without undefined behavior.
Fields§
§ptr: NonNull<T>
§_marker: PhantomData<&'a mut T>
Implementations§
source§impl<'a, T> DormantMutRef<'a, T>
impl<'a, T> DormantMutRef<'a, T>
sourcepub fn new(t: &'a mut T) -> (&'a mut T, Self)
pub fn new(t: &'a mut T) -> (&'a mut T, Self)
Capture a unique borrow, and immediately reborrow it. For the compiler, the lifetime of the new reference is the same as the lifetime of the original reference, but you promise to use it for a shorter period.
sourcepub unsafe fn awaken(self) -> &'a mut T
pub unsafe fn awaken(self) -> &'a mut T
Revert to the unique borrow initially captured.
Safety
The reborrow must have ended, i.e., the reference returned by new
and
all pointers and references derived from it, must not be used anymore.
sourcepub unsafe fn reborrow(&mut self) -> &'a mut T
pub unsafe fn reborrow(&mut self) -> &'a mut T
Borrows a new mutable reference from the unique borrow initially captured.
Safety
The reborrow must have ended, i.e., the reference returned by new
and
all pointers and references derived from it, must not be used anymore.
Borrows a new shared reference from the unique borrow initially captured.
Safety
The reborrow must have ended, i.e., the reference returned by new
and
all pointers and references derived from it, must not be used anymore.