Struct ResourceTable
pub struct ResourceTable { /* private fields */ }
Expand description
The ResourceTable
type maps a Resource<T>
to its T
.
Implementations§
§impl ResourceTable
impl ResourceTable
pub fn new() -> ResourceTable
pub fn new() -> ResourceTable
Create an empty table
pub fn with_capacity(capacity: usize) -> ResourceTable
pub fn with_capacity(capacity: usize) -> ResourceTable
Create an empty table with at least the specified capacity.
pub 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.
pub 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.
pub fn get<T>(&self, key: &Resource<T>) -> Result<&T, ResourceTableError>where
T: Any,
pub fn get<T>(&self, key: &Resource<T>) -> Result<&T, ResourceTableError>where
T: Any,
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.
pub fn get_mut<T>(
&mut self,
key: &Resource<T>,
) -> Result<&mut T, ResourceTableError>where
T: Any,
pub fn get_mut<T>(
&mut self,
key: &Resource<T>,
) -> Result<&mut T, ResourceTableError>where
T: Any,
Get an mutable reference to a resource of a given type at a given index.
pub fn get_any_mut(
&mut self,
key: u32,
) -> Result<&mut (dyn Any + 'static), ResourceTableError>
pub fn get_any_mut( &mut self, key: u32, ) -> Result<&mut (dyn Any + 'static), ResourceTableError>
Returns the raw Any
at the key
index provided.
pub 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
pub fn iter_entries<'a, T>(
&'a mut self,
map: HashMap<u32, T>,
) -> impl Iterator<Item = (Result<&'a mut (dyn Any + 'static), ResourceTableError>, T)>
pub fn iter_entries<'a, T>( &'a mut self, map: HashMap<u32, T>, ) -> impl Iterator<Item = (Result<&'a mut (dyn Any + 'static), ResourceTableError>, T)>
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.
pub fn iter_children<T>(
&self,
parent: &Resource<T>,
) -> Result<impl Iterator<Item = &(dyn Any + Send + 'static)>, ResourceTableError>where
T: 'static,
pub fn iter_children<T>(
&self,
parent: &Resource<T>,
) -> Result<impl Iterator<Item = &(dyn Any + Send + 'static)>, ResourceTableError>where
T: 'static,
Iterate over all children belonging to the provided parent
Trait Implementations§
§impl Debug for ResourceTable
impl Debug for ResourceTable
§impl Default for ResourceTable
impl Default for ResourceTable
§fn default() -> ResourceTable
fn default() -> 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> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§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> ⓘ
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