pub struct Registry<H> { /* private fields */ }Expand description
A retained-handle registry keyed by SlotId, generic over the
concrete platform handle type H so its core contract is host-testable
with no FFI dependency (see the module doc, and this module’s tests).
Implementations§
Source§impl<H> Registry<H>
impl<H> Registry<H>
Sourcepub fn insert(&mut self, slot_id: SlotId, handle: H) -> Option<H>
pub fn insert(&mut self, slot_id: SlotId, handle: H) -> Option<H>
Record a freshly created handle for slot_id, replacing
(never panicking on) any handle already live under the same id —
the surface-recreate-replay / rapid-recreate race this registry
must handle. Returns the replaced handle, if any,
so a caller can log the unexpected-replace path; dropping it
releases its resources exactly like an explicit Self::remove
would (the registry “treats attach-for-live-slot-id as replace-
and-release-old”).
Sourcepub fn remove(&mut self, slot_id: SlotId) -> Option<H>
pub fn remove(&mut self, slot_id: SlotId) -> Option<H>
Release the handle for slot_id directly, by the slot id itself —
for a caller that already knows exactly which slot it means (a
future widget-teardown path), as opposed
to Self::remove_matching’s identity-based lookup for the real
platform dispose export, which never receives a slot id at all. A
dispose for a slot id that was already replaced or already removed
is a silent no-op (late/duplicate dispose, both expected once
dispose can arrive idle-deferred — see the module doc),
never an error.
Sourcepub fn remove_matching(
&mut self,
is_match: impl FnMut(&H) -> bool,
) -> Option<(SlotId, H)>
pub fn remove_matching( &mut self, is_match: impl FnMut(&H) -> bool, ) -> Option<(SlotId, H)>
Find and remove the entry whose handle satisfies is_match, by
identity — the real disposal contract every platform backend
uses (Android: Env::is_same_object against the JObject the
nativeDisposeControl(view) export receives, which carries no slot
id at all). Never assumes “whichever
slot was created most recently” is the one being disposed: a match
against a handle that was already replaced (the module doc’s
idle-deferred-dispose case) or already removed finds nothing and is
a silent no-op, leaving whatever handle currently occupies that
slot (if any) untouched.
Sourcepub fn get(&self, slot_id: SlotId) -> Option<&H>
pub fn get(&self, slot_id: SlotId) -> Option<&H>
The handle currently live under slot_id, if any — what a caller
holding a slot id (an UpdateParams command, a listener callback
carrying its own slot id) resolves against, as opposed to
Self::remove_matching’s identity lookup for a dispose that carries
none.
Sourcepub fn get_mut(&mut self, slot_id: SlotId) -> Option<&mut H>
pub fn get_mut(&mut self, slot_id: SlotId) -> Option<&mut H>
Self::get’s mutable counterpart, for a caller that mutates the
handle in place (the runtime’s per-instance props/state).
Sourcepub fn live_count(&self) -> usize
pub fn live_count(&self) -> usize
The number of live handles — the leak bar every create/dispose
cycle must return to 0.
Trait Implementations§
Auto Trait Implementations§
impl<H> Freeze for Registry<H>
impl<H> RefUnwindSafe for Registry<H>
impl<H> Send for Registry<H>
impl<H> Sync for Registry<H>
impl<H> Unpin for Registry<H>
impl<H> UnsafeUnpin for Registry<H>
impl<H> UnwindSafe for Registry<H>
Blanket Implementations§
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.