[−][src]Struct double_checked_cell::DoubleCheckedCell
A thread-safe lazily initialized cell.
The cell is immutable once it is initialized. See the module-level documentation for more.
Methods
impl<T> DoubleCheckedCell<T>
[src]
pub const fn new() -> DoubleCheckedCell<T>
[src]
Creates a new uninitialized DoubleCheckedCell
.
Examples
use double_checked_cell::DoubleCheckedCell; let cell = DoubleCheckedCell::<u32>::new(); assert_eq!(cell.get(), None);
pub fn get(&self) -> Option<&T>
[src]
Borrows the value if the cell is initialized.
Examples
use double_checked_cell::DoubleCheckedCell; let cell = DoubleCheckedCell::from("hello"); assert_eq!(cell.get(), Some(&"hello"));
pub fn get_or_init<F>(&self, init: F) -> &T where
F: FnOnce() -> T,
[src]
F: FnOnce() -> T,
Borrows the value if the cell is initialized or initializes it from a closure.
Panics
Panics or deadlocks when trying to access the cell from the initilization closure.
Examples
use double_checked_cell::DoubleCheckedCell; let cell = DoubleCheckedCell::new(); // Initialize the cell. let value = cell.get_or_init(|| 1 + 2); assert_eq!(*value, 3); // The cell is now immutable. let value = cell.get_or_init(|| 42); assert_eq!(*value, 3);
pub fn get_or_try_init<F, E>(&self, init: F) -> Result<&T, E> where
F: FnOnce() -> Result<T, E>,
[src]
F: FnOnce() -> Result<T, E>,
Borrows the value if the cell is initialized or attempts to initialize it from a closure.
Errors
Forwards any error from the closure if the cell is not yet initialized. The cell then remains uninitialized.
Panics
Panics or deadlocks when trying to access the cell from the initilization closure.
Examples
use double_checked_cell::DoubleCheckedCell; let cell = DoubleCheckedCell::new(); let result = cell.get_or_try_init(|| "not an integer".parse()); assert!(result.is_err()); let result = cell.get_or_try_init(|| "42".parse()); assert_eq!(result, Ok(&42)); let result = cell.get_or_try_init(|| "irrelevant".parse()); assert_eq!(result, Ok(&42));
pub fn into_inner(self) -> Option<T>
[src]
Unwraps the value.
Examples
use double_checked_cell::DoubleCheckedCell; let cell = DoubleCheckedCell::from(42); let contents = cell.into_inner(); assert_eq!(contents, Some(42));
Trait Implementations
impl<T: Send + Sync> Sync for DoubleCheckedCell<T>
[src]
impl<T> Default for DoubleCheckedCell<T>
[src]
fn default() -> DoubleCheckedCell<T>
[src]
impl<T> From<T> for DoubleCheckedCell<T>
[src]
fn from(t: T) -> DoubleCheckedCell<T>
[src]
impl<T: Debug> Debug for DoubleCheckedCell<T>
[src]
impl<T> RefUnwindSafe for DoubleCheckedCell<T>
[src]
Auto Trait Implementations
impl<T> Send for DoubleCheckedCell<T> where
T: Send,
T: Send,
impl<T> Unpin for DoubleCheckedCell<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for DoubleCheckedCell<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,