Skip to main content

ManagedRef

Struct ManagedRef 

Source
pub struct ManagedRef<T: ?Sized> { /* private fields */ }
Expand description

Shared handle to a value owned by a Managed, the runtime &T.

Keeps its claim until dropped, and reports a dead owner by returning None from ManagedRef::read.

Implementations§

Source§

impl<T: ?Sized> ManagedRef<T>

Source

pub fn new(data: &T, lifetime: LifetimeRef) -> Self

Pairs a reference with a shared borrow taken from its lifetime.

Source

pub unsafe fn new_raw(data: *const T, lifetime: LifetimeRef) -> Option<Self>

ManagedRef::new over a raw pointer. A null pointer yields None.

§Safety

data must stay valid for as long as lifetime says it does, and lifetime must be the borrow state that guards it.

Source

pub fn make(data: &T) -> (Self, Lifetime)

Builds a handle to a plain reference along with the lifetime that backs it.

The caller has to keep the returned Lifetime alive for at least as long as the handle.

Source

pub unsafe fn make_raw(data: *const T) -> Option<(Self, Lifetime)>

ManagedRef::make over a raw pointer.

§Safety

data must stay valid for as long as the returned handle lives.

Source

pub fn into_inner(self) -> (LifetimeRef, *const T)

Splits into the borrow token and the pointer.

Source

pub fn into_dynamic(self) -> DynamicManagedRef

Erases the type, keeping the same claim.

Source

pub fn lifetime(&self) -> &LifetimeRef

Returns the borrow token.

Source

pub fn borrow(&self) -> Option<ManagedRef<T>>

Takes another shared handle to the same value.

Source

pub unsafe fn lazy_immutable(&self) -> ManagedLazy<T>

Turns this shared handle into an unclaimed one that can also write.

§Safety

The value was only borrowed immutably, so writing through the result is only sound when nothing else holds a &T to it.

Source

pub fn read(&self) -> Option<ValueReadAccess<'_, T>>

Guards the value for reading, or returns None when it is written or the owner is gone.

Source

pub unsafe fn map<U>(self, f: impl FnOnce(&T) -> &U) -> ManagedRef<U>

Narrows this handle down to a part of the value, such as one field.

§Safety

f must return a reference into the same value, and the owner must still be alive.

Source

pub unsafe fn try_map<U>( self, f: impl FnOnce(&T) -> Option<&U>, ) -> Option<ManagedRef<U>>

ManagedRef::map that can decline.

§Safety

Same as ManagedRef::map.

Source

pub unsafe fn as_ptr(&self) -> Option<*const T>

Returns the pointer while the owner is alive, bypassing access checks.

§Safety

The caller takes over checking for conflicting access.

Trait Implementations§

Source§

impl<T> From<ManagedRef<T>> for ManagedValue<T>

Source§

fn from(value: ManagedRef<T>) -> Self

Converts to this type from the input type.
Source§

impl<T> Send for ManagedRef<T>
where T: Send + ?Sized,

Source§

impl<T> Sync for ManagedRef<T>
where T: Sync + ?Sized,

Source§

impl<T> TryFrom<ManagedValue<T>> for ManagedRef<T>

Source§

type Error = ()

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

fn try_from(value: ManagedValue<T>) -> Result<Self, Self::Error>

Performs the conversion.

Auto Trait Implementations§

§

impl<T> Freeze for ManagedRef<T>
where *const T: Freeze, T: ?Sized,

§

impl<T> RefUnwindSafe for ManagedRef<T>

§

impl<T> Unpin for ManagedRef<T>
where *const T: Unpin, T: ?Sized,

§

impl<T> UnsafeUnpin for ManagedRef<T>

§

impl<T> UnwindSafe for ManagedRef<T>

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> Finalize for T

Source§

unsafe fn finalize_raw(data: *mut ())

Drops the value stored at data in place. 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<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.