Struct once_cell::imp::OnceCell

source ·
pub(crate) struct OnceCell<T> {
    queue: AtomicPtr<Waiter>,
    value: UnsafeCell<Option<T>>,
}

Fields§

§queue: AtomicPtr<Waiter>§value: UnsafeCell<Option<T>>

Implementations§

source§

impl<T> OnceCell<T>

source

pub(crate) const fn new() -> OnceCell<T>

source

pub(crate) const fn with_value(value: T) -> OnceCell<T>

source

pub(crate) fn is_initialized(&self) -> bool

Safety: synchronizes with store to value via Release/(Acquire|SeqCst).

source

pub(crate) fn initialize<F, E>(&self, f: F) -> Result<(), E>
where F: FnOnce() -> Result<T, E>,

Safety: synchronizes with store to value via SeqCst read from state, writes value only once because we never get to INCOMPLETE state after a successful write.

source

pub(crate) fn wait(&self)

source

pub(crate) unsafe fn get_unchecked(&self) -> &T

Get the reference to the underlying value, without checking if the cell is initialized.

§Safety

Caller must ensure that the cell is in initialized state, and that the contents are acquired by (synchronized to) this thread.

source

pub(crate) fn get_mut(&mut self) -> Option<&mut T>

Gets the mutable reference to the underlying value. Returns None if the cell is empty.

source

pub(crate) fn into_inner(self) -> Option<T>

Consumes this OnceCell, returning the wrapped value. Returns None if the cell was empty.

Trait Implementations§

source§

impl<T: Debug> Debug for OnceCell<T>

source§

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

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

impl<T: RefUnwindSafe + UnwindSafe> RefUnwindSafe for OnceCell<T>

source§

impl<T: Send> Send for OnceCell<T>

source§

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

source§

impl<T: UnwindSafe> UnwindSafe for OnceCell<T>

Auto Trait Implementations§

§

impl<T> !Freeze for OnceCell<T>

§

impl<T> Unpin for OnceCell<T>
where T: Unpin,

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, U> TryFrom<U> for T
where U: Into<T>,

§

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

§

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.