Skip to main content

KeyedLazyLock

Struct KeyedLazyLock 

Source
pub struct KeyedLazyLock<K, V, F = fn(&K) -> V> { /* private fields */ }
Expand description

Lazily initializes values per key.

The first call to KeyedLazyLock::get for a key creates the value using init. Later calls return the same value.

Initialization for each key happens at most once.

Implementations§

Source§

impl<K, V, F> KeyedLazyLock<K, V, F>

Source

pub const fn new(init: F) -> Self

Source§

impl<K, V, F> KeyedLazyLock<K, V, F>
where K: Eq + Hash + Clone, F: Fn(&K) -> V,

Source

pub fn get(&self, key: &K) -> &V

Returns the lazily initialized value for key.

If the key has not been accessed before, init(key) will run exactly once. Concurrent callers requesting the same key will wait for initialization.

§Deadlocks

init must not call get with the same key.

Auto Trait Implementations§

§

impl<K, V, F = fn(&K) -> V> !Freeze for KeyedLazyLock<K, V, F>

§

impl<K, V, F = fn(&K) -> V> !RefUnwindSafe for KeyedLazyLock<K, V, F>

§

impl<K, V, F> Send for KeyedLazyLock<K, V, F>
where F: Send, K: Send, V: Send,

§

impl<K, V, F> Sync for KeyedLazyLock<K, V, F>
where F: Sync, K: Send + Sync, V: Send + Sync,

§

impl<K, V, F> Unpin for KeyedLazyLock<K, V, F>
where F: Unpin, K: Unpin,

§

impl<K, V, F> UnsafeUnpin for KeyedLazyLock<K, V, F>
where F: UnsafeUnpin,

§

impl<K, V, F> UnwindSafe for KeyedLazyLock<K, V, F>
where F: UnwindSafe, K: UnwindSafe, V: UnwindSafe,

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

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.