[−][src]Struct rustc_ap_rustc_data_structures::sync::Once
A type whose inner value can be written once and then will stay read-only
Methods
impl<T> Once<T>
[src]
pub fn new() -> Self
[src]
Creates an Once value which is uninitialized
pub fn into_inner(self) -> Option<T>
[src]
Consumes the value and returns Some(T) if it was initialized
pub fn try_set(&self, value: T) -> Option<T>
[src]
Tries to initialize the inner value to value
.
Returns None
if the inner value was uninitialized and value
was consumed setting it
otherwise if the inner value was already set it returns value
back to the caller
pub fn try_set_same(&self, value: T) -> Option<T> where
T: Eq,
[src]
T: Eq,
Tries to initialize the inner value to value
.
Returns None
if the inner value was uninitialized and value
was consumed setting it
otherwise if the inner value was already set it asserts that value
is equal to the inner
value and then returns value
back to the caller
pub fn set(&self, value: T)
[src]
Tries to initialize the inner value to value
and panics if it was already initialized
ⓘImportant traits for &'_ mut Ipub fn init_locking<F: FnOnce() -> T>(&self, f: F) -> &T
[src]
Initializes the inner value if it wasn't already done by calling the provided closure. It ensures that no-one else can access the value in the mean time by holding a lock for the duration of the closure. A reference to the inner value is returned.
pub fn init_nonlocking<F: FnOnce() -> T>(&self, f: F) -> Option<T>
[src]
Tries to initialize the inner value by calling the closure without ensuring that no-one
else can access it. This mean when this is called from multiple threads, multiple
closures may concurrently be computing a value which the inner value should take.
Only one of these closures are used to actually initialize the value.
If some other closure already set the value,
we return the value our closure computed wrapped in a Option
.
If our closure set the value, None
is returned.
If the value is already initialized, the closure is not called and None
is returned.
pub fn init_nonlocking_same<F: FnOnce() -> T>(&self, f: F) -> Option<T> where
T: Eq,
[src]
T: Eq,
Tries to initialize the inner value by calling the closure without ensuring that no-one
else can access it. This mean when this is called from multiple threads, multiple
closures may concurrently be computing a value which the inner value should take.
Only one of these closures are used to actually initialize the value.
If some other closure already set the value, we assert that it our closure computed
a value equal to the value already set and then
we return the value our closure computed wrapped in a Option
.
If our closure set the value, None
is returned.
If the value is already initialized, the closure is not called and None
is returned.
pub fn try_get(&self) -> Option<&T>
[src]
Tries to get a reference to the inner value, returns None
if it is not yet initialized
ⓘImportant traits for &'_ mut Ipub fn get(&self) -> &T
[src]
Gets reference to the inner value, panics if it is not yet initialized
ⓘImportant traits for &'_ mut Ipub fn borrow(&self) -> &T
[src]
Gets reference to the inner value, panics if it is not yet initialized
Auto Trait Implementations
impl<T> !RefUnwindSafe for Once<T>
impl<T> Send for Once<T> where
T: Send,
T: Send,
impl<T> !Sync for Once<T>
impl<T> Unpin for Once<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for Once<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
ⓘImportant traits for &'_ mut Ifn borrow_mut(&mut self) -> &mut T
[src]
impl<'a, T> Captures<'a> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Erased for T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<E> SpecializationError for E
[src]
default fn not_found<S, T>(
trait_name: &'static str,
method_name: &'static str
) -> E where
T: ?Sized,
[src]
trait_name: &'static str,
method_name: &'static str
) -> E where
T: ?Sized,
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>,