pub(crate) struct InternCache<T: ?Sized> {
cache: OnceLock<Mutex<WeakHashSet<Weak<T>>>>,
}
Expand description
An InternCache is a lazily-constructed weak set of objects.
Let’s break that down! It’s “lazily constructed” because it
doesn’t actually allocate anything until you use it for the first
time. That allows it to have a const new
method, so you can make these static.
It’s “weak” because it only holds weak references to its objects; once every strong reference is gone, the object is unallocated. Later, the hash entry is (lazily) removed.
Fields§
§cache: OnceLock<Mutex<WeakHashSet<Weak<T>>>>
Underlying hashset for interned objects
Implementations§
Source§impl<T: ?Sized> InternCache<T>
impl<T: ?Sized> InternCache<T>
Source§impl<T: Eq + Hash + ?Sized> InternCache<T>
impl<T: Eq + Hash + ?Sized> InternCache<T>
Sourcefn cache(&self) -> MutexGuard<'_, WeakHashSet<Weak<T>>>
fn cache(&self) -> MutexGuard<'_, WeakHashSet<Weak<T>>>
Helper: initialize the cache if needed, then lock it.
Source§impl<T: Eq + Hash> InternCache<T>
impl<T: Eq + Hash> InternCache<T>
Auto Trait Implementations§
impl<T> !Freeze for InternCache<T>
impl<T> RefUnwindSafe for InternCache<T>where
T: ?Sized,
impl<T> Send for InternCache<T>
impl<T> Sync for InternCache<T>
impl<T> Unpin for InternCache<T>where
T: ?Sized,
impl<T> UnwindSafe for InternCache<T>where
T: ?Sized,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more