Struct OnceBox

Source
pub(crate) struct OnceBox<T> {
    ptr: Atomic<*mut T>,
}

Fields§

§ptr: Atomic<*mut T>

Implementations§

Source§

impl<T> OnceBox<T>

Source

pub const fn new() -> Self

Source

pub unsafe fn get_unchecked(&self) -> Pin<&T>

Gets access to the value, assuming it is already initialized and this initialization has been observed by the current thread.

Since all modifications to the pointer have already been observed, the pointer load in this function can be performed with relaxed ordering, potentially allowing the optimizer to turn code like this:

once_box.get_or_init(|| Box::pin(42));
unsafe { once_box.get_unchecked() }

into

once_box.get_or_init(|| Box::pin(42))
§Safety

This causes undefined behavior if the assumption above is violated.

Source

pub fn get_or_init(&self, f: impl FnOnce() -> Pin<Box<T>>) -> Pin<&T>

Source

pub fn take(&mut self) -> Option<Pin<Box<T>>>

Source

fn initialize(&self, f: impl FnOnce() -> Pin<Box<T>>) -> Pin<&T>

Trait Implementations§

Source§

impl<T> Drop for OnceBox<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<T: Send> Send for OnceBox<T>

Source§

impl<T: Send + Sync> Sync for OnceBox<T>

Auto Trait Implementations§

§

impl<T> !Freeze for OnceBox<T>

§

impl<T> RefUnwindSafe for OnceBox<T>

§

impl<T> Unpin for OnceBox<T>

§

impl<T> UnwindSafe for OnceBox<T>
where T: RefUnwindSafe,

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

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, 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.