pub struct Table { /* private fields */ }Expand description
A column-oriented structure-of-arrays based storage for Components of entities
in a World.
Conceptually, a Table can be thought of as a 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()
Tmust 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_by_slice_for(
&self,
component_id: ComponentId,
) -> MaybeLocation<Option<&[UnsafeCell<&'static Location<'static>>]>>
pub fn get_changed_by_slice_for( &self, component_id: ComponentId, ) -> MaybeLocation<Option<&[UnsafeCell<&'static Location<'static>>]>>
Fetches the calling locations that last changed the each component
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 fn get_changed_by(
&self,
component_id: ComponentId,
row: TableRow,
) -> MaybeLocation<Option<&UnsafeCell<&'static Location<'static>>>>
pub fn get_changed_by( &self, component_id: ComponentId, row: TableRow, ) -> MaybeLocation<Option<&UnsafeCell<&'static Location<'static>>>>
Get the specific calling location that changed 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) -> u32
pub fn entity_count(&self) -> u32
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 ThinColumns 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>, which can then be
downcast into Box<dyn 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>, which 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.