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 Vec<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 its data at index 3 and its change detection ticks at
index 3). A slice to these contiguous blocks of memory can be fetched
via Column::get_data_slice
, Column::get_added_ticks_slice
, and
Column::get_changed_ticks_slice
.
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
.
Implementations§
source§impl Column
impl Column
sourcepub fn item_layout(&self) -> Layout
pub fn item_layout(&self) -> Layout
Fetches the Layout
for the underlying type.
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Checks if the column is empty. Returns true
if there are no elements, false
otherwise.
sourcepub fn get_data_ptr(&self) -> Ptr<'_>
pub fn get_data_ptr(&self) -> Ptr<'_>
Fetches the data pointer to the first element of the Column
.
The pointer is type erased, so using this function to fetch anything
other than the first element will require computing the offset using
Column::item_layout
.
sourcepub unsafe fn get_data_slice<T>(&self) -> &[UnsafeCell<T>]
pub unsafe fn get_data_slice<T>(&self) -> &[UnsafeCell<T>]
Fetches the slice to the Column
’s data cast to a given type.
Note: The values stored within are UnsafeCell
.
Users of this API must ensure that accesses to each individual element
adhere to the safety invariants of UnsafeCell
.
§Safety
The type T
must be the type of the items in this column.
sourcepub fn get_added_ticks_slice(&self) -> &[UnsafeCell<Tick>]
pub fn get_added_ticks_slice(&self) -> &[UnsafeCell<Tick>]
Fetches the slice to the Column
’s “added” change detection ticks.
Note: The values stored within are UnsafeCell
.
Users of this API must ensure that accesses to each individual element
adhere to the safety invariants of UnsafeCell
.
sourcepub fn get_changed_ticks_slice(&self) -> &[UnsafeCell<Tick>]
pub fn get_changed_ticks_slice(&self) -> &[UnsafeCell<Tick>]
Fetches the slice to the Column
’s “changed” change detection ticks.
Note: The values stored within are UnsafeCell
.
Users of this API must ensure that accesses to each individual element
adhere to the safety invariants of UnsafeCell
.
sourcepub fn get(&self, row: TableRow) -> Option<(Ptr<'_>, TickCells<'_>)>
pub fn get(&self, row: TableRow) -> Option<(Ptr<'_>, TickCells<'_>)>
Fetches a reference to the data and change detection ticks at row
.
Returns None
if row
is out of bounds.
sourcepub fn get_data(&self, row: TableRow) -> Option<Ptr<'_>>
pub fn get_data(&self, row: TableRow) -> Option<Ptr<'_>>
Fetches a read-only reference to the data at row
.
Returns None
if row
is out of bounds.
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
. Unlike Column::get
this does not
do any bounds checking.
§Safety
row
must 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 fn get_data_mut(&mut self, row: TableRow) -> Option<PtrMut<'_>>
pub fn get_data_mut(&mut self, row: TableRow) -> Option<PtrMut<'_>>
Fetches a mutable reference to the data at row
.
Returns None
if row
is out of bounds.
sourcepub fn get_added_tick(&self, row: TableRow) -> Option<&UnsafeCell<Tick>>
pub fn get_added_tick(&self, row: TableRow) -> Option<&UnsafeCell<Tick>>
Fetches the “added” change detection tick for the value at row
.
Returns None
if row
is out of bounds.
Note: The values stored within are UnsafeCell
.
Users of this API must ensure that accesses to each individual element
adhere to the safety invariants of UnsafeCell
.
sourcepub fn get_changed_tick(&self, row: TableRow) -> Option<&UnsafeCell<Tick>>
pub fn get_changed_tick(&self, row: TableRow) -> Option<&UnsafeCell<Tick>>
Fetches the “changed” change detection tick for the value at row
.
Returns None
if row
is out of bounds.
Note: The values stored within are UnsafeCell
.
Users of this API must ensure that accesses to each individual element
adhere to the safety invariants of UnsafeCell
.
sourcepub fn get_ticks(&self, row: TableRow) -> Option<ComponentTicks>
pub fn get_ticks(&self, row: TableRow) -> Option<ComponentTicks>
Fetches the change detection ticks for the value at row
.
Returns None
if row
is out of bounds.
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
. Unlike Column::get_added_tick
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
. Unlike Column::get_changed_tick
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
. Unlike Column::get_ticks
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>
. 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.