pub struct ResourceTable { /* private fields */ }
runtime
and component-model
only.Expand description
The ResourceTable
type maps a Resource<T>
to its T
.
Implementations§
Source§impl ResourceTable
impl ResourceTable
Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Create an empty table with at least the specified capacity.
Sourcepub fn push<T>(&mut self, entry: T) -> Result<Resource<T>, ResourceTableError>where
T: Send + 'static,
pub fn push<T>(&mut self, entry: T) -> Result<Resource<T>, ResourceTableError>where
T: Send + 'static,
Inserts a new value T
into this table, returning a corresponding
Resource<T>
which can be used to refer to it after it was inserted.
Sourcepub fn push_child<T, U>(
&mut self,
entry: T,
parent: &Resource<U>,
) -> Result<Resource<T>, ResourceTableError>where
T: Send + 'static,
U: 'static,
pub fn push_child<T, U>(
&mut self,
entry: T,
parent: &Resource<U>,
) -> Result<Resource<T>, ResourceTableError>where
T: Send + 'static,
U: 'static,
Insert a resource at the next available index, and track that it has a parent resource.
The parent must exist to create a child. All children resources must
be destroyed before a parent can be destroyed - otherwise
ResourceTable::delete
will fail with
ResourceTableError::HasChildren
.
Parent-child relationships are tracked inside the table to ensure that
a parent resource is not deleted while it has live children. This
allows child resources to hold “references” to a parent by table
index, to avoid needing e.g. an Arc<Mutex<parent>>
and the associated
locking overhead and design issues, such as child existence extending
lifetime of parent referent even after parent resource is destroyed,
possibility for deadlocks.
Parent-child relationships may not be modified once created. There
is no way to observe these relationships through the ResourceTable
methods except for erroring on deletion, or the std::fmt::Debug
impl.
Sourcepub fn get<T: Any + Sized>(
&self,
key: &Resource<T>,
) -> Result<&T, ResourceTableError>
pub fn get<T: Any + Sized>( &self, key: &Resource<T>, ) -> Result<&T, ResourceTableError>
Get an immutable reference to a resource of a given type at a given index.
Multiple shared references can be borrowed at any given time.
Sourcepub fn get_mut<T: Any + Sized>(
&mut self,
key: &Resource<T>,
) -> Result<&mut T, ResourceTableError>
pub fn get_mut<T: Any + Sized>( &mut self, key: &Resource<T>, ) -> Result<&mut T, ResourceTableError>
Get an mutable reference to a resource of a given type at a given index.
Sourcepub fn get_any_mut(
&mut self,
key: u32,
) -> Result<&mut dyn Any, ResourceTableError>
pub fn get_any_mut( &mut self, key: u32, ) -> Result<&mut dyn Any, ResourceTableError>
Returns the raw Any
at the key
index provided.
Sourcepub fn delete<T>(
&mut self,
resource: Resource<T>,
) -> Result<T, ResourceTableError>where
T: Any,
pub fn delete<T>(
&mut self,
resource: Resource<T>,
) -> Result<T, ResourceTableError>where
T: Any,
Same as delete
, but typed
Sourcepub fn iter_entries<'a, T>(
&'a mut self,
map: HashMap<u32, T>,
) -> impl Iterator<Item = (Result<&'a mut dyn Any, ResourceTableError>, T)>
Available on crate feature std
only.
pub fn iter_entries<'a, T>( &'a mut self, map: HashMap<u32, T>, ) -> impl Iterator<Item = (Result<&'a mut dyn Any, ResourceTableError>, T)>
std
only.Zip the values of the map with mutable references to table entries corresponding to each
key. As the keys in the HashMap
are unique, this iterator can give mutable references
with the same lifetime as the mutable reference to the ResourceTable.
Sourcepub fn iter_children<T>(
&self,
parent: &Resource<T>,
) -> Result<impl Iterator<Item = &(dyn Any + Send)>, ResourceTableError>where
T: 'static,
pub fn iter_children<T>(
&self,
parent: &Resource<T>,
) -> Result<impl Iterator<Item = &(dyn Any + Send)>, ResourceTableError>where
T: 'static,
Iterate over all children belonging to the provided parent
Trait Implementations§
Source§impl Debug for ResourceTable
impl Debug for ResourceTable
Auto Trait Implementations§
impl Freeze for ResourceTable
impl !RefUnwindSafe for ResourceTable
impl Send for ResourceTable
impl !Sync for ResourceTable
impl Unpin for ResourceTable
impl !UnwindSafe for ResourceTable
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
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>
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>
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