pub struct Column { /* private fields */ }Expand description
A type-erased contiguous container for data of a homogeneous type.
Conceptually, a Column is very similar to a type-erased Box<[T]>.
It also stores the change detection ticks for its components, kept in two separate
contiguous buffers internally. An element shares its data across these buffers by using the
same index (i.e. the entity at row 3 has it’s data at index 3 and its change detection ticks at index 3).
Like many other low-level storage types, Column has a limited and highly unsafe
interface. It’s highly advised to use higher level types and their safe abstractions
instead of working directly with Column.
For performance reasons, Column does not does not store it’s capacity and length.
This type is used by Table and ComponentSparseSet, where the corresponding capacity
and length can be found.
Implementations§
Source§impl Column
impl Column
Sourcepub fn with_capacity(component_info: &ComponentInfo, capacity: usize) -> Self
pub fn with_capacity(component_info: &ComponentInfo, capacity: usize) -> Self
Create a new Column with the given capacity.
Sourcepub unsafe fn get_data_slice<T>(&self, len: usize) -> &[UnsafeCell<T>]
pub unsafe fn get_data_slice<T>(&self, len: usize) -> &[UnsafeCell<T>]
Sourcepub unsafe fn get_added_ticks_slice(&self, len: usize) -> &[UnsafeCell<Tick>]
pub unsafe fn get_added_ticks_slice(&self, len: usize) -> &[UnsafeCell<Tick>]
Sourcepub unsafe fn get_changed_ticks_slice(&self, len: usize) -> &[UnsafeCell<Tick>]
pub unsafe fn get_changed_ticks_slice(&self, len: usize) -> &[UnsafeCell<Tick>]
Sourcepub unsafe fn get_changed_by_slice(
&self,
len: usize,
) -> MaybeLocation<&[UnsafeCell<&'static Location<'static>>]>
pub unsafe fn get_changed_by_slice( &self, len: usize, ) -> MaybeLocation<&[UnsafeCell<&'static Location<'static>>]>
Sourcepub unsafe fn get_data_unchecked(&self, row: TableRow) -> Ptr<'_>
pub unsafe fn get_data_unchecked(&self, row: TableRow) -> Ptr<'_>
Fetches a read-only reference to the data at row. This does not
do any bounds checking.
§Safety
rowmust be within the range[0, self.len()).- no other mutable reference to the data of the same row can exist at the same time
Sourcepub unsafe fn get_changed_by_unchecked(
&self,
row: TableRow,
) -> MaybeLocation<&UnsafeCell<&'static Location<'static>>>
pub unsafe fn get_changed_by_unchecked( &self, row: TableRow, ) -> MaybeLocation<&UnsafeCell<&'static Location<'static>>>
Fetches the calling location that last changed the value at row.
This function does not do any bounds checking.
§Safety
row must be within the range [0, self.len()).
Sourcepub unsafe fn get_added_tick_unchecked(
&self,
row: TableRow,
) -> &UnsafeCell<Tick>
pub unsafe fn get_added_tick_unchecked( &self, row: TableRow, ) -> &UnsafeCell<Tick>
Fetches the “added” change detection tick for the value at row.
This function does not do any bounds checking.
§Safety
row must be within the range [0, self.len()).
Sourcepub unsafe fn get_changed_tick_unchecked(
&self,
row: TableRow,
) -> &UnsafeCell<Tick>
pub unsafe fn get_changed_tick_unchecked( &self, row: TableRow, ) -> &UnsafeCell<Tick>
Fetches the “changed” change detection tick for the value at row
This function does not do any bounds checking.
§Safety
row must be within the range [0, self.len()).
Sourcepub unsafe fn get_ticks_unchecked(&self, row: TableRow) -> ComponentTicks
pub unsafe fn get_ticks_unchecked(&self, row: TableRow) -> ComponentTicks
Fetches the change detection ticks for the value at row.
This function does not do any bounds checking.
§Safety
row must be within the range [0, self.len()).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Column
impl !RefUnwindSafe for Column
impl !Send for Column
impl !Sync for Column
impl Unpin for Column
impl !UnwindSafe for Column
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.