pub struct Table { /* private fields */ }
Expand description
A column-oriented structure-of-arrays based storage for Component
s of entities
in a World
.
Conceptually, a Table
can be thought of as an HashMap<ComponentId, Column>
, where
each ThinColumn
is a type-erased Vec<T: Component>
. Each row corresponds to a single entity
(i.e. index 3 in Column A and index 3 in Column B point to different components on the same
entity). Fetching components from a table involves fetching the associated column for a
component type (via its ComponentId
), then fetching the entity’s row within that column.
Implementations§
Source§impl Table
impl Table
Sourcepub fn entities(&self) -> &[Entity]
pub fn entities(&self) -> &[Entity]
Fetches a read-only slice of the entities stored within the Table
.
Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Get the capacity of this table, in entities. Note that if an allocation is in process, this might not match the actual capacity of the columns, but it should once the allocation ends.
Sourcepub unsafe fn get_data_slice_for<T>(
&self,
component_id: ComponentId,
) -> Option<&[UnsafeCell<T>]>
pub unsafe fn get_data_slice_for<T>( &self, component_id: ComponentId, ) -> Option<&[UnsafeCell<T>]>
Get the data of the column matching component_id
as a slice.
§Safety
row.as_usize()
< self.len()
T
must match thecomponent_id
Sourcepub fn get_added_ticks_slice_for(
&self,
component_id: ComponentId,
) -> Option<&[UnsafeCell<Tick>]>
pub fn get_added_ticks_slice_for( &self, component_id: ComponentId, ) -> Option<&[UnsafeCell<Tick>]>
Get the added ticks of the column matching component_id
as a slice.
Sourcepub fn get_changed_ticks_slice_for(
&self,
component_id: ComponentId,
) -> Option<&[UnsafeCell<Tick>]>
pub fn get_changed_ticks_slice_for( &self, component_id: ComponentId, ) -> Option<&[UnsafeCell<Tick>]>
Get the changed ticks of the column matching component_id
as a slice.
Sourcepub fn get_changed_tick(
&self,
component_id: ComponentId,
row: TableRow,
) -> Option<&UnsafeCell<Tick>>
pub fn get_changed_tick( &self, component_id: ComponentId, row: TableRow, ) -> Option<&UnsafeCell<Tick>>
Get the specific change tick
of the component matching component_id
in row
.
Sourcepub fn get_added_tick(
&self,
component_id: ComponentId,
row: TableRow,
) -> Option<&UnsafeCell<Tick>>
pub fn get_added_tick( &self, component_id: ComponentId, row: TableRow, ) -> Option<&UnsafeCell<Tick>>
Get the specific added tick
of the component matching component_id
in row
.
Sourcepub unsafe fn get_ticks_unchecked(
&self,
component_id: ComponentId,
row: TableRow,
) -> Option<ComponentTicks>
pub unsafe fn get_ticks_unchecked( &self, component_id: ComponentId, row: TableRow, ) -> Option<ComponentTicks>
Get the ComponentTicks
of the component matching component_id
in row
.
§Safety
row.as_usize()
<self.len()
Sourcepub fn get_column(&self, component_id: ComponentId) -> Option<&ThinColumn>
pub fn get_column(&self, component_id: ComponentId) -> Option<&ThinColumn>
Fetches a read-only reference to the ThinColumn
for a given Component
within the table.
Returns None
if the corresponding component does not belong to the table.
Sourcepub fn has_column(&self, component_id: ComponentId) -> bool
pub fn has_column(&self, component_id: ComponentId) -> bool
Checks if the table contains a ThinColumn
for a given Component
.
Returns true
if the column is present, false
otherwise.
Sourcepub fn entity_count(&self) -> usize
pub fn entity_count(&self) -> usize
Gets the number of entities currently being stored in the table.
Sourcepub fn get_drop_for(
&self,
component_id: ComponentId,
) -> Option<unsafe fn(_: OwningPtr<'_>)>
pub fn get_drop_for( &self, component_id: ComponentId, ) -> Option<unsafe fn(_: OwningPtr<'_>)>
Get the drop function for some component that is stored in this table.
Sourcepub fn component_count(&self) -> usize
pub fn component_count(&self) -> usize
Gets the number of components being stored in the table.
Sourcepub fn entity_capacity(&self) -> usize
pub fn entity_capacity(&self) -> usize
Gets the maximum number of entities the table can currently store without reallocating the underlying memory.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Checks if the Table
is empty or not.
Returns true
if the table contains no entities, false
otherwise.
Sourcepub fn iter_columns(&self) -> impl Iterator<Item = &ThinColumn>
pub fn iter_columns(&self) -> impl Iterator<Item = &ThinColumn>
Iterates over the ThinColumn
s of the Table
.
Sourcepub unsafe fn get_component(
&self,
component_id: ComponentId,
row: TableRow,
) -> Option<Ptr<'_>>
pub unsafe fn get_component( &self, component_id: ComponentId, row: TableRow, ) -> Option<Ptr<'_>>
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Table
impl !RefUnwindSafe for Table
impl !Send for Table
impl !Sync for Table
impl Unpin for Table
impl !UnwindSafe for Table
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> 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.