soagen::examples::entities class

entities

Public types

using allocator_type = soagen::allocator_type<entities>
The allocator type used by this class.
template <auto Column>
using column_traits = /* ... */
Gets the soagen::column_traits for a specific column of the table.
template <auto Column>
using column_type = /* ... */
Gets the type of a specific column in the table.
using columns = /* ... */
Named index constants for all of the columns in the table.
using const_iterator = soagen::const_iterator_type<entities>
Row iterators returned by const-qualified iterator functions.
using const_row_type = soagen::const_row_type<entities>
Const row type used by this class.
using const_span_type = soagen::const_span_type<entities>
Const-qualified span type.
using difference_type = std::ptrdiff_t
The signed integer difference type used by this class.
using iterator = soagen::iterator_type<entities>
Row iterators returned by iterator functions.
using row_type = soagen::row_type<entities>
Regular (lvalue-qualified) row type used by this class.
using rvalue_iterator = soagen::iterator_type<entities && >
Row iterators returned by rvalue-qualified iterator functions.
using rvalue_row_type = soagen::row_type<entities && >
Rvalue row type used by this class.
using rvalue_span_type = soagen::span_type<entities && >
Rvalue-qualified span type.
using size_type = std::size_t
The unsigned integer size type used by this class.
using span_type = soagen::span_type<entities>
Regular (lvalue-qualified) span type.
using table_traits = soagen::table_traits_type<entities>
The soagen::table_traits for the underlying table.
using table_type = soagen::table_type<entities>
This class's underlying soagen::table type.

Public static variables

static size_type aligned_stride constexpr
The number of rows to advance to maintain the requested alignment for every column.
static size_type column_count constexpr
The number of columns in the table.
template <auto Column>
static auto& column_name constexpr
Gets the name of the specified column as a null-terminated string.

Constructors, destructors, conversion operators

entities() defaulted
Default constructor.
entities(entities&&) defaulted
Move constructor.
entities(const entities&) defaulted
Copy constructor.
entities(const allocator_type& alloc) explicit constexpr noexcept
Constructs with the given allocator.
entities(allocator_type&& alloc) explicit constexpr noexcept
Constructs with the given allocator.
~entities() defaulted
Destructor.

Public functions

auto get_allocator() const -> allocator_type constexpr noexcept
Returns the allocator being used by the table.
auto operator=(entities&&) -> entities& defaulted
Move-assignment operator.
auto operator=(const entities&) -> entities& defaulted
Copy-assignment operator.

Adding rows

template <typename Id, typename Name = column_traits<1>::default_emplace_type, typename Pos = column_traits<2>::default_emplace_type, typename Orient = column_traits<3>::default_emplace_type>
auto emplace_back(Id&& id, Name&& name = "", Pos&& pos = {}, Orient&& orient = { 1, 0, 0, 0 }) -> entities& constexpr noexcept(…)
Constructs a new row directly in-place at the end of the table.
template <typename Tuple>
auto emplace_back(Tuple&& tuple_) -> entities& constexpr noexcept(…)
Constructs a new row directly in-place at the end of the table by unpacking a tuple-like object.
auto push_back(column_traits<0>::param_type id, column_traits<1>::param_type name = "", column_traits<2>::param_type pos = {}, column_traits<3>::param_type orient = { 1, 0, 0, 0 }) -> entities& constexpr noexcept(…)
Adds a new row at the end of the table.
auto push_back(column_traits<0>::rvalue_type id, column_traits<1>::rvalue_type name = "", column_traits<2>::rvalue_type pos = {}, column_traits<3>::rvalue_type orient = { 1, 0, 0, 0 }) -> entities& constexpr noexcept(…)
Adds a new row at the end of the table (rvalue overload).

Capacity

auto allocation_size() const -> size_type constexpr noexcept
Returns the size of the current underlying buffer allocation in bytes.
auto empty() const -> bool constexpr noexcept
Returns true if the number of rows is zero.
auto max_size() const -> size_type constexpr noexcept
Returns the maximum possible number of rows.
auto reserve(size_type new_cap) const -> entities& noexcept
Reserves storage for (at least) the given number of rows.
auto shrink_to_fit() -> entities& noexcept(…)
Frees unused capacity.
auto size() const -> size_type constexpr noexcept
Returns the current number of rows.

Columns

template <auto Column>
auto column() -> column_type<Column>* constexpr noexcept
Returns a pointer to the elements of a specific column.
template <auto Column>
auto column() const -> std::add_const_t<column_type<Column>>* constexpr noexcept
Returns a pointer to the elements of a specific column.
auto data() -> std::byte* constexpr noexcept
Returns a pointer to the raw byte backing array.
auto data() -> conststd::byte*const constexpr noexcept
Returns a pointer to the raw byte backing array.
template <typename Func>
void for_each_column(Func&& func) constexpr noexcept(…)
Invokes a function once for each column data pointer.
template <typename Func>
void for_each_column(Func&& func) const constexpr noexcept(…)
Invokes a function once for each column data pointer.
auto id() -> unsigned* constexpr noexcept
Returns a pointer to the elements in column [0]: id.
auto id() const -> const unsigned* constexpr noexcept
Returns a pointer to the elements in column [0]: id.
auto name() -> std::string* constexpr noexcept
Returns a pointer to the elements in column [1]: name.
auto name() const -> conststd::string* constexpr noexcept
Returns a pointer to the elements in column [1]: name.
auto orient() -> quaternion* constexpr noexcept
Returns a pointer to the elements in column [3]: orient.
auto orient() const -> const quaternion* constexpr noexcept
Returns a pointer to the elements in column [3]: orient.
auto pos() -> vec3* constexpr noexcept
Returns a pointer to the elements in column [2]: pos.
auto pos() const -> const vec3* constexpr noexcept
Returns a pointer to the elements in column [2]: pos.

Comparison

auto operator<(const entities& lhs, const entities& rhs) -> bool constexpr noexcept(…)
Returns true if the LHS table is ordered lexicographically less-than the RHS table.
auto operator<=(const entities& lhs, const entities& rhs) -> bool constexpr noexcept(…)
Returns true if the LHS table is ordered lexicographically less-than-or-equal-to the RHS table.
auto operator>(const entities& lhs, const entities& rhs) -> bool constexpr noexcept(…)
Returns true if the LHS table is ordered lexicographically greater-than the RHS table.
auto operator>=(const entities& lhs, const entities& rhs) -> bool constexpr noexcept(…)
Returns true if the LHS table is ordered lexicographically greater-than-or-equal-to the RHS table.

Equality

auto operator!=(const entities& lhs, const entities& rhs) -> bool constexpr noexcept(…)
Returns true if not all of the elements in two tables are equal.
auto operator==(const entities& lhs, const entities& rhs) -> bool constexpr noexcept(…)
Returns true if all of the elements in two tables are equal.

Inserting rows

template <typename Id, typename Name = column_traits<1>::default_emplace_type, typename Pos = column_traits<2>::default_emplace_type, typename Orient = column_traits<3>::default_emplace_type>
auto emplace(size_type index_, Id&& id, Name&& name = "", Pos&& pos = {}, Orient&& orient = { 1, 0, 0, 0 }) -> entities& constexpr noexcept(…)
Constructs a new row directly in-place at an arbitrary position in the table.
template <typename Tuple>
auto emplace(size_type index_, Tuple&& tuple_) -> entities& constexpr noexcept(…)
Constructs a new row directly in-place at an arbitrary position in the table by unpacking a tuple-like object.
template <typename Id, typename Name = column_traits<1>::default_emplace_type, typename Pos = column_traits<2>::default_emplace_type, typename Orient = column_traits<3>::default_emplace_type>
auto emplace(iterator iter_, Id&& id, Name&& name = "", Pos&& pos = {}, Orient&& orient = { 1, 0, 0, 0 }) -> iterator constexpr noexcept(…)
Constructs a new row directly in-place at an arbitrary position in the table.
template <typename Tuple>
auto emplace(iterator iter_, Tuple&& tuple_) -> iterator constexpr noexcept(…)
Constructs a new row directly in-place at an arbitrary position in the table by unpacking a tuple-like object.
template <typename Id, typename Name = column_traits<1>::default_emplace_type, typename Pos = column_traits<2>::default_emplace_type, typename Orient = column_traits<3>::default_emplace_type>
auto emplace(const_iterator iter_, Id&& id, Name&& name = "", Pos&& pos = {}, Orient&& orient = { 1, 0, 0, 0 }) -> const_iterator constexpr noexcept(…)
Constructs a new row directly in-place at an arbitrary position in the table.
template <typename Tuple>
auto emplace(const_iterator iter_, Tuple&& tuple_) -> const_iterator constexpr noexcept(…)
Constructs a new row directly in-place at an arbitrary position in the table by unpacking a tuple-like object.
auto insert(size_type index_, column_traits<0>::param_type id, column_traits<1>::param_type name = "", column_traits<2>::param_type pos = {}, column_traits<3>::param_type orient = { 1, 0, 0, 0 }) -> entities& constexpr noexcept(…)
Inserts a new row at an arbitrary position in the table.
auto insert(size_type index_, column_traits<0>::rvalue_type id, column_traits<1>::rvalue_type name = "", column_traits<2>::rvalue_type pos = {}, column_traits<3>::rvalue_type orient = { 1, 0, 0, 0 }) -> entities& constexpr noexcept(…)
Inserts a new row at an arbitrary position in the table (rvalue overload).
auto insert(iterator iter_, column_traits<0>::param_type id, column_traits<1>::param_type name = "", column_traits<2>::param_type pos = {}, column_traits<3>::param_type orient = { 1, 0, 0, 0 }) -> iterator constexpr noexcept(…)
Inserts a new row at an arbitrary position in the table.
auto insert(const_iterator iter_, column_traits<0>::param_type id, column_traits<1>::param_type name = "", column_traits<2>::param_type pos = {}, column_traits<3>::param_type orient = { 1, 0, 0, 0 }) -> const_iterator constexpr noexcept(…)
Inserts a new row at an arbitrary position in the table.
auto insert(iterator iter_, column_traits<0>::rvalue_type id, column_traits<1>::rvalue_type name = "", column_traits<2>::rvalue_type pos = {}, column_traits<3>::rvalue_type orient = { 1, 0, 0, 0 }) -> iterator constexpr noexcept(…)
Inserts a new row at an arbitrary position in the table (rvalue overload).
auto insert(const_iterator iter_, column_traits<0>::rvalue_type id, column_traits<1>::rvalue_type name = "", column_traits<2>::rvalue_type pos = {}, column_traits<3>::rvalue_type orient = { 1, 0, 0, 0 }) -> const_iterator constexpr noexcept(…)
Inserts a new row at an arbitrary position in the table (rvalue overload).

Iterators

template <auto... Cols>
auto begin() & -> soagen::iterator_type<entities, Cols...> constexpr noexcept
Returns an iterator to the first row in the table.
template <auto... Cols>
auto begin() && -> soagen::iterator_type<entities && , Cols...> constexpr noexcept
Returns an iterator to the first row in the table.
template <auto... Cols>
auto begin() const & -> soagen::const_iterator_type<entities, Cols...> constexpr noexcept
Returns an iterator to the first row in the table.
template <auto... Cols>
auto cbegin() const -> soagen::const_iterator_type<entities, Cols...> constexpr noexcept
Returns an iterator to the first row in the table.
template <auto... Cols>
auto cend() const -> soagen::const_iterator_type<entities, Cols...> constexpr noexcept
Returns an iterator to one-past-the-last row in the table.
template <auto... Cols>
auto end() & -> soagen::iterator_type<entities, Cols...> constexpr noexcept
Returns an iterator to one-past-the-last row in the table.
template <auto... Cols>
auto end() && -> soagen::iterator_type<entities && , Cols...> constexpr noexcept
Returns an iterator to one-past-the-last row in the table.
template <auto... Cols>
auto end() const & -> soagen::const_iterator_type<entities, Cols...> constexpr noexcept
Returns an iterator to one-past-the-last row in the table.

Modifiers

auto clear() -> entities& noexcept
Removes all rows from table.
auto erase(size_type pos) -> entities& constexpr noexcept(…)
Erases the row at the given position.
auto erase(iterator pos) -> iterator constexpr noexcept(…)
Erases the row at the given iterator.
auto erase(const_iterator pos) -> const_iterator constexpr noexcept(…)
Erases the row at the given iterator.
auto pop_back(size_type num = 1) -> entities& noexcept(…)
Removes the last row(s) from the table.
auto resize(size_type new_size) -> entities& noexcept(…)
Resizes the table to the given number of rows.
void swap(entities& other) constexpr noexcept(…)
Swaps the contents of the table with another.
template <auto A, auto B>
auto swap_columns() -> entities& constexpr noexcept(…)
Swaps two columns.
auto unordered_erase(size_type pos) -> soagen::optional<size_type> constexpr noexcept(…)
Erases the row at the given position without preserving order.
auto unordered_erase(iterator pos) -> soagen::optional<iterator> constexpr noexcept(…)
Erases the row at the given position without preserving order.
auto unordered_erase(const_iterator pos) -> soagen::optional<const_iterator> constexpr noexcept(…)
Erases the row at the given position without preserving order.

Rows

template <auto... Cols>
auto at(size_type index) & -> soagen::row_type<entities, Cols...>
Returns the row at the given index.
template <auto... Cols>
auto at(size_type index) && -> soagen::row_type<entities && , Cols...>
Returns the row at the given index.
template <auto... Cols>
auto at(size_type index) const & -> soagen::const_row_type<entities, Cols...>
Returns the row at the given index.
template <auto... Cols>
auto back() & -> soagen::row_type<entities, Cols...> noexcept
Returns the very last row in the table.
template <auto... Cols>
auto back() && -> soagen::row_type<entities && , Cols...> noexcept
Returns the very last row in the table.
template <auto... Cols>
auto back() const & -> soagen::const_row_type<entities, Cols...> noexcept
Returns the very last row in the table.
template <auto... Cols>
auto front() & -> soagen::row_type<entities, Cols...> noexcept
Returns the very first row in the table.
template <auto... Cols>
auto front() && -> soagen::row_type<entities && , Cols...> noexcept
Returns the very first row in the table.
template <auto... Cols>
auto front() const & -> soagen::const_row_type<entities, Cols...> noexcept
Returns the very first row in the table.
auto operator[](size_type index) & -> row_type noexcept
Returns the row at the given index.
auto operator[](size_type index) && -> rvalue_row_type noexcept
Returns the row at the given index.
auto operator[](size_type index) const & -> const_row_type noexcept
Returns the row at the given index.
template <auto... Cols>
auto row(size_type index) & -> soagen::row_type<entities, Cols...> noexcept
Returns the row at the given index.
template <auto... Cols>
auto row(size_type index) && -> soagen::row_type<entities && , Cols...> noexcept
Returns the row at the given index.
template <auto... Cols>
auto row(size_type index) const & -> soagen::const_row_type<entities, Cols...> noexcept
Returns the row at the given index.

Spans

auto const_subspan(size_type start, size_type count = static_cast<size_type>(-1)) const -> const_span_type noexcept
Returns a const-qualified span of (some part of) the table.
auto subspan(size_type start, size_type count = static_cast<size_type>(-1)) & -> span_type noexcept
Returns a span of (some part of) the table.
auto subspan(size_type start, size_type count = static_cast<size_type>(-1)) && -> rvalue_span_type noexcept
Returns an rvalue-qualified span of (some part of) the table.
auto subspan(size_type start, size_type count = static_cast<size_type>(-1)) const & -> const_span_type noexcept
Returns a const-qualified span of (some part of) the table.

Underlying table

operator const table_type&() const explicit constexpr noexcept
Returns a const lvalue reference to the underlying soagen::table.
operator table_type&() explicit constexpr noexcept
Returns an lvalue reference to the underlying soagen::table.
operator table_type&&() explicit constexpr noexcept
Returns an rvalue reference to the underlying soagen::table.
auto table() & -> table_type& constexpr noexcept
Returns an lvalue reference to the underlying soagen::table.
auto table() && -> table_type&& constexpr noexcept
Returns an rvalue reference to the underlying soagen::table.
auto table() const & -> consttable_type& constexpr noexcept
Returns a const lvalue reference to the underlying soagen::table.

Function documentation

size_type soagen::examples::entities::allocation_size() const constexpr noexcept

Returns the size of the current underlying buffer allocation in bytes.

entities& soagen::examples::entities::reserve(size_type new_cap) const noexcept

Reserves storage for (at least) the given number of rows.

Returns the number of rows that can be held in currently allocated storage.

std::byte* soagen::examples::entities::data() constexpr noexcept

Returns a pointer to the raw byte backing array.

conststd::byte*const soagen::examples::entities::data() constexpr noexcept

Returns a pointer to the raw byte backing array.

template <typename Func>
void soagen::examples::entities::for_each_column(Func&& func) constexpr noexcept(…)

Invokes a function once for each column data pointer.

Template parameters
Func

A callable type compatible with one of the following signatures:

Overload resolution is performed in the order listed above.

Parameters
func The callable to invoke.

template <typename Func>
void soagen::examples::entities::for_each_column(Func&& func) const constexpr noexcept(…)

Invokes a function once for each column data pointer.

Template parameters
Func

A callable type compatible with one of the following signatures:

Overload resolution is performed in the order listed above.

Parameters
func The callable to invoke.

template <typename Id, typename Name = column_traits<1>::default_emplace_type, typename Pos = column_traits<2>::default_emplace_type, typename Orient = column_traits<3>::default_emplace_type>
entities& soagen::examples::entities::emplace(size_type index_, Id&& id, Name&& name = "", Pos&& pos = {}, Orient&& orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Constructs a new row directly in-place at an arbitrary position in the table.

template <typename Tuple>
entities& soagen::examples::entities::emplace(size_type index_, Tuple&& tuple_) constexpr noexcept(…)

Constructs a new row directly in-place at an arbitrary position in the table by unpacking a tuple-like object.

template <typename Id, typename Name = column_traits<1>::default_emplace_type, typename Pos = column_traits<2>::default_emplace_type, typename Orient = column_traits<3>::default_emplace_type>
iterator soagen::examples::entities::emplace(iterator iter_, Id&& id, Name&& name = "", Pos&& pos = {}, Orient&& orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Constructs a new row directly in-place at an arbitrary position in the table.

template <typename Tuple>
iterator soagen::examples::entities::emplace(iterator iter_, Tuple&& tuple_) constexpr noexcept(…)

Constructs a new row directly in-place at an arbitrary position in the table by unpacking a tuple-like object.

template <typename Id, typename Name = column_traits<1>::default_emplace_type, typename Pos = column_traits<2>::default_emplace_type, typename Orient = column_traits<3>::default_emplace_type>
const_iterator soagen::examples::entities::emplace(const_iterator iter_, Id&& id, Name&& name = "", Pos&& pos = {}, Orient&& orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Constructs a new row directly in-place at an arbitrary position in the table.

template <typename Tuple>
const_iterator soagen::examples::entities::emplace(const_iterator iter_, Tuple&& tuple_) constexpr noexcept(…)

Constructs a new row directly in-place at an arbitrary position in the table by unpacking a tuple-like object.

entities& soagen::examples::entities::insert(size_type index_, column_traits<0>::param_type id, column_traits<1>::param_type name = "", column_traits<2>::param_type pos = {}, column_traits<3>::param_type orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Inserts a new row at an arbitrary position in the table.

entities& soagen::examples::entities::insert(size_type index_, column_traits<0>::rvalue_type id, column_traits<1>::rvalue_type name = "", column_traits<2>::rvalue_type pos = {}, column_traits<3>::rvalue_type orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Inserts a new row at an arbitrary position in the table (rvalue overload).

iterator soagen::examples::entities::insert(iterator iter_, column_traits<0>::param_type id, column_traits<1>::param_type name = "", column_traits<2>::param_type pos = {}, column_traits<3>::param_type orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Inserts a new row at an arbitrary position in the table.

const_iterator soagen::examples::entities::insert(const_iterator iter_, column_traits<0>::param_type id, column_traits<1>::param_type name = "", column_traits<2>::param_type pos = {}, column_traits<3>::param_type orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Inserts a new row at an arbitrary position in the table.

iterator soagen::examples::entities::insert(iterator iter_, column_traits<0>::rvalue_type id, column_traits<1>::rvalue_type name = "", column_traits<2>::rvalue_type pos = {}, column_traits<3>::rvalue_type orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Inserts a new row at an arbitrary position in the table (rvalue overload).

const_iterator soagen::examples::entities::insert(const_iterator iter_, column_traits<0>::rvalue_type id, column_traits<1>::rvalue_type name = "", column_traits<2>::rvalue_type pos = {}, column_traits<3>::rvalue_type orient = { 1, 0, 0, 0 }) constexpr noexcept(…)

Inserts a new row at an arbitrary position in the table (rvalue overload).

entities& soagen::examples::entities::erase(size_type pos) constexpr noexcept(…)

Erases the row at the given position.

iterator soagen::examples::entities::erase(iterator pos) constexpr noexcept(…)

Erases the row at the given iterator.

Returns An iterator to the row immediately following the one which was removed, or end() if the one removed was the last row in the table.

const_iterator soagen::examples::entities::erase(const_iterator pos) constexpr noexcept(…)

Erases the row at the given iterator.

Returns An iterator to the row immediately following the one which was removed, or cend() if the one removed was the last row in the table.

entities& soagen::examples::entities::resize(size_type new_size) noexcept(…)

Resizes the table to the given number of rows.

void soagen::examples::entities::swap(entities& other) constexpr noexcept(…)

Swaps the contents of the table with another.

template <auto A, auto B>
entities& soagen::examples::entities::swap_columns() constexpr noexcept(…)

Swaps two columns.

soagen::optional<size_type> soagen::examples::entities::unordered_erase(size_type pos) constexpr noexcept(…)

Erases the row at the given position without preserving order.

Returns The position of the row that was moved into the erased row's position, if any.

This is much faster than erase() because it uses the swap-and-pop idiom: Instead of shifting all the higher rows downward, the last row is moved into the position of the erased one and the size of the table is reduced by 1.

soagen::optional<iterator> soagen::examples::entities::unordered_erase(iterator pos) constexpr noexcept(…)

Erases the row at the given position without preserving order.

Returns The position of the row that was moved into the erased row's position, if any.

This is much faster than erase() because it uses the swap-and-pop idiom: Instead of shifting all the higher rows downward, the last row is moved into the position of the erased one and the size of the table is reduced by 1.

soagen::optional<const_iterator> soagen::examples::entities::unordered_erase(const_iterator pos) constexpr noexcept(…)

Erases the row at the given position without preserving order.

Returns The position of the row that was moved into the erased row's position, if any.

This is much faster than erase() because it uses the swap-and-pop idiom: Instead of shifting all the higher rows downward, the last row is moved into the position of the erased one and the size of the table is reduced by 1.

template <auto... Cols>
soagen::row_type<entities, Cols...> soagen::examples::entities::at(size_type index) &

Returns the row at the given index.

Exceptions
std::out_of_range

template <auto... Cols>
soagen::row_type<entities && , Cols...> soagen::examples::entities::at(size_type index) &&

Returns the row at the given index.

Exceptions
std::out_of_range

template <auto... Cols>
soagen::const_row_type<entities, Cols...> soagen::examples::entities::at(size_type index) const &

Returns the row at the given index.

Exceptions
std::out_of_range

template <auto... Cols>
soagen::row_type<entities, Cols...> soagen::examples::entities::row(size_type index) & noexcept

Returns the row at the given index.

Template parameters
Cols Indices of the columns to include in the row. Leave the list empty for all columns.

template <auto... Cols>
soagen::row_type<entities && , Cols...> soagen::examples::entities::row(size_type index) && noexcept

Returns the row at the given index.

Template parameters
Cols Indices of the columns to include in the row. Leave the list empty for all columns.

template <auto... Cols>
soagen::const_row_type<entities, Cols...> soagen::examples::entities::row(size_type index) const & noexcept

Returns the row at the given index.

Template parameters
Cols Indices of the columns to include in the row. Leave the list empty for all columns.

Variable documentation

static size_type soagen::examples::entities::aligned_stride constexpr

The number of rows to advance to maintain the requested alignment for every column.

The stride size you need to use when iterating through rows of this table such that the starting element for each batch in each column would have the same memory alignment as the value specified for the column-specific alignment.