Column

Struct Column 

Source
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

Source

pub fn with_capacity(component_info: &ComponentInfo, capacity: usize) -> Self

Create a new Column with the given capacity.

Source

pub unsafe fn get_data_slice<T>(&self, len: usize) -> &[UnsafeCell<T>]

Get a slice to the data stored in this Column.

§Safety
  • T must match the type of data that’s stored in this Column
  • len must match the actual length of this column (number of elements stored)
Source

pub unsafe fn get_added_ticks_slice(&self, len: usize) -> &[UnsafeCell<Tick>]

Get a slice to the added ticks in this Column.

§Safety
  • len must match the actual length of this column (number of elements stored)
Source

pub unsafe fn get_changed_ticks_slice(&self, len: usize) -> &[UnsafeCell<Tick>]

Get a slice to the changed ticks in this Column.

§Safety
  • len must match the actual length of this column (number of elements stored)
Source

pub unsafe fn get_changed_by_slice( &self, len: usize, ) -> MaybeLocation<&[UnsafeCell<&'static Location<'static>>]>

Get a slice to the calling locations that last changed each value in this Column

§Safety
  • len must match the actual length of this column (number of elements stored)
Source

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
  • 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
Source

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()).

Source

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()).

Source

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()).

Source

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()).

Source

pub fn get_drop(&self) -> Option<unsafe fn(OwningPtr<'_>)>

Returns the drop function for elements of the column, or None if they don’t need to be dropped.

Trait Implementations§

Source§

impl Debug for Column

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts 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>

Converts 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)

Converts &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)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoResult<T> for T

Source§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
Source§

impl<A> Is for A
where A: Any,

Source§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more