Gaia-ECS v1.0.0
A simple and powerful entity component system
Loading...
Searching...
No Matches
gaia::core::span< T, Extent > Class Template Reference

Non-owning view over a contiguous sequence of objects. More...

#include <span_impl.h>

Public Types

using element_kind = T
 Element type, including const qualification.
 
using value_type = typename std::remove_cv< T >::type
 Element type without const qualification.
 
using size_type = span_size_type
 Type used for element counts.
 
using difference_type = span_diff_type
 Type used for iterator differences.
 
using pointer = element_kind *
 Pointer to an element.
 
using const_pointer = const element_kind *
 Pointer to a const element.
 
using reference = element_kind &
 Reference to an element.
 
using const_reference = const element_kind &
 Reference to a const element.
 
using iterator = pointer
 Mutable iterator type.
 
using const_iterator = const_pointer
 Const iterator type.
 
using iterator_type = core::random_access_iterator_tag
 Gaia-ECS iterator category exposed by span iterators.
 
template<span_size_type Offset, span_size_type Count = DynamicSpanExtent>
using subspan_return_t = span< T, Count !=DynamicSpanExtent ? Count :(Extent !=DynamicSpanExtent ? Extent - Offset :DynamicSpanExtent)>
 Result type for a compile-time subspan selection.
 

Public Member Functions

template<span_size_type E = Extent, typename std::enable_if<(E==DynamicSpanExtent||E<=0), int >::type = 0>
constexpr span () noexcept
 Constructs an empty span when its extent permits an empty view.
 
constexpr span (pointer ptr, size_type count)
 Constructs a view over count elements starting at ptr.
 
constexpr span (pointer begin, pointer end)
 Constructs a view over the half-open range [begin, end).
 
template<span_size_type N, span_size_type E = Extent, typename std::enable_if<(E==DynamicSpanExtent||N==E) &&detail::is_container_element_kind_compatible< element_kind(&)[N], T >::value, int >::type = 0>
constexpr span (element_kind(&arr)[N]) noexcept
 Constructs a view over a compatible built-in array.
 
template<typename Container , span_size_type E = Extent, typename std::enable_if< E==DynamicSpanExtent &&detail::is_container< Container >::value &&detail::is_container_element_kind_compatible< Container &, T >::value, int >::type = 0>
constexpr span (Container &cont)
 Constructs a dynamic-extent view over a compatible mutable container.
 
template<typename Container , span_size_type E = Extent, typename std::enable_if< E==DynamicSpanExtent &&detail::is_container< Container >::value &&detail::is_container_element_kind_compatible< const Container &, T >::value, int >::type = 0>
constexpr span (const Container &cont)
 Constructs a dynamic-extent view over a compatible const container.
 
constexpr span (const span &) noexcept=default
 
constexpr spanoperator= (const span &) noexcept=default
 
template<typename T2 , span_size_type Extent2, typename std::enable_if<(Extent==DynamicSpanExtent||Extent2==DynamicSpanExtent||Extent==Extent2) &&std::is_convertible< T2(*)[], T(*)[]>::value, int >::type = 0>
constexpr span (const span< T2, Extent2 > &other) noexcept
 Constructs a compatible span from another element type or extent.
 
GAIA_NODISCARD constexpr pointer data () const noexcept
 Returns a pointer to the first element.
 
GAIA_NODISCARD constexpr size_type size () const noexcept
 Returns the number of elements in the view.
 
GAIA_NODISCARD constexpr bool empty () const noexcept
 Checks whether the view is empty.
 
GAIA_NODISCARD constexpr reference operator[] (size_type index) const
 Returns the element at index.
 
GAIA_NODISCARD constexpr iterator begin () noexcept
 Returns an iterator to the first element.
 
GAIA_NODISCARD constexpr iterator begin () const noexcept
 Returns an iterator to the first element.
 
GAIA_NODISCARD constexpr const_iterator cbegin () const noexcept
 Returns a const iterator to the first element.
 
GAIA_NODISCARD constexpr iterator end () noexcept
 Returns an iterator one past the final element.
 
GAIA_NODISCARD constexpr const_iterator end () const noexcept
 Returns a const iterator one past the final element.
 
GAIA_NODISCARD constexpr const_iterator cend () const noexcept
 Returns a const iterator one past the final element.
 
template<span_size_type Count>
GAIA_NODISCARD constexpr span< element_kind, Count > first () const
 Returns the first Count elements with a compile-time extent.
 
GAIA_NODISCARD constexpr span< element_kind, DynamicSpanExtent > first (size_type count) const
 Returns a dynamic-extent view over the first count elements.
 
template<span_size_type Count>
GAIA_NODISCARD constexpr span< element_kind, Count > last () const
 Returns the last Count elements with a compile-time extent.
 
GAIA_NODISCARD constexpr span< element_kind, DynamicSpanExtent > last (size_type count) const
 Returns a dynamic-extent view over the last count elements.
 
GAIA_NODISCARD constexpr reference front () const
 Returns the first element.
 
GAIA_NODISCARD constexpr reference back () const
 Returns the final element.
 
template<span_size_type Offset, span_size_type Count = DynamicSpanExtent>
GAIA_NODISCARD constexpr subspan_return_t< Offset, Count > subspan () const
 Returns a subspan selected with compile-time offset and count.
 
GAIA_NODISCARD constexpr span< element_kind, DynamicSpanExtent > subspan (size_type offset, size_type count=DynamicSpanExtent) const
 Returns a dynamic-extent subspan.
 

Static Public Attributes

static constexpr size_type extent = Extent
 Compile-time extent of the view.
 

Detailed Description

template<typename T, span_size_type Extent>
class gaia::core::span< T, Extent >

Non-owning view over a contiguous sequence of objects.

Template Parameters
TElement type.
ExtentCompile-time element count, or DynamicSpanExtent for a runtime count.

Member Typedef Documentation

◆ subspan_return_t

template<typename T , span_size_type Extent>
template<span_size_type Offset, span_size_type Count = DynamicSpanExtent>
using gaia::core::span< T, Extent >::subspan_return_t = span< T, Count != DynamicSpanExtent ? Count : (Extent != DynamicSpanExtent ? Extent - Offset : DynamicSpanExtent)>

Result type for a compile-time subspan selection.

Template Parameters
OffsetStarting element index.
CountRequested element count, or DynamicSpanExtent for the remaining elements.

Constructor & Destructor Documentation

◆ span() [1/7]

template<typename T , span_size_type Extent>
template<span_size_type E = Extent, typename std::enable_if<(E==DynamicSpanExtent||E<=0), int >::type = 0>
constexpr gaia::core::span< T, Extent >::span ( )
inlineconstexprnoexcept

Constructs an empty span when its extent permits an empty view.

Template Parameters
EExtent checked by the constructor constraint.

◆ span() [2/7]

template<typename T , span_size_type Extent>
constexpr gaia::core::span< T, Extent >::span ( pointer  ptr,
size_type  count 
)
inlineconstexpr

Constructs a view over count elements starting at ptr.

Parameters
ptrPointer to the first element.
countNumber of elements in the view.

◆ span() [3/7]

template<typename T , span_size_type Extent>
constexpr gaia::core::span< T, Extent >::span ( pointer  begin,
pointer  end 
)
inlineconstexpr

Constructs a view over the half-open range [begin, end).

Parameters
beginPointer to the first element.
endPointer one past the final element.

◆ span() [4/7]

template<typename T , span_size_type Extent>
template<span_size_type N, span_size_type E = Extent, typename std::enable_if<(E==DynamicSpanExtent||N==E) &&detail::is_container_element_kind_compatible< element_kind(&)[N], T >::value, int >::type = 0>
constexpr gaia::core::span< T, Extent >::span ( element_kind(&)  arr[N])
inlineconstexprnoexcept

Constructs a view over a compatible built-in array.

Template Parameters
NArray element count.
EExtent checked by the constructor constraint.
Parameters
arrArray to view.

◆ span() [5/7]

template<typename T , span_size_type Extent>
template<typename Container , span_size_type E = Extent, typename std::enable_if< E==DynamicSpanExtent &&detail::is_container< Container >::value &&detail::is_container_element_kind_compatible< Container &, T >::value, int >::type = 0>
constexpr gaia::core::span< T, Extent >::span ( Container &  cont)
inlineconstexpr

Constructs a dynamic-extent view over a compatible mutable container.

Template Parameters
ContainerContainer type exposing contiguous data and size.
EExtent checked by the constructor constraint.
Parameters
contContainer to view.

◆ span() [6/7]

template<typename T , span_size_type Extent>
template<typename Container , span_size_type E = Extent, typename std::enable_if< E==DynamicSpanExtent &&detail::is_container< Container >::value &&detail::is_container_element_kind_compatible< const Container &, T >::value, int >::type = 0>
constexpr gaia::core::span< T, Extent >::span ( const Container &  cont)
inlineconstexpr

Constructs a dynamic-extent view over a compatible const container.

Template Parameters
ContainerContainer type exposing contiguous data and size.
EExtent checked by the constructor constraint.
Parameters
contContainer to view.

◆ span() [7/7]

template<typename T , span_size_type Extent>
template<typename T2 , span_size_type Extent2, typename std::enable_if<(Extent==DynamicSpanExtent||Extent2==DynamicSpanExtent||Extent==Extent2) &&std::is_convertible< T2(*)[], T(*)[]>::value, int >::type = 0>
constexpr gaia::core::span< T, Extent >::span ( const span< T2, Extent2 > &  other)
inlineconstexprnoexcept

Constructs a compatible span from another element type or extent.

Template Parameters
T2Source element type.
Extent2Source extent.
Parameters
otherSource view.

Member Function Documentation

◆ back()

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr reference gaia::core::span< T, Extent >::back ( ) const
inlineconstexpr

Returns the final element.

Returns
Reference to the final element.

◆ begin() [1/2]

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr iterator gaia::core::span< T, Extent >::begin ( ) const
inlineconstexprnoexcept

Returns an iterator to the first element.

Returns
Beginning iterator.

◆ begin() [2/2]

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr iterator gaia::core::span< T, Extent >::begin ( )
inlineconstexprnoexcept

Returns an iterator to the first element.

Returns
Beginning iterator.

◆ cbegin()

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr const_iterator gaia::core::span< T, Extent >::cbegin ( ) const
inlineconstexprnoexcept

Returns a const iterator to the first element.

Returns
Const beginning iterator.

◆ cend()

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr const_iterator gaia::core::span< T, Extent >::cend ( ) const
inlineconstexprnoexcept

Returns a const iterator one past the final element.

Returns
Const ending iterator.

◆ data()

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr pointer gaia::core::span< T, Extent >::data ( ) const
inlineconstexprnoexcept

Returns a pointer to the first element.

Returns
Pointer to the first element, or nullptr for a default-constructed empty span.

◆ empty()

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr bool gaia::core::span< T, Extent >::empty ( ) const
inlineconstexprnoexcept

Checks whether the view is empty.

Returns
True when size() is zero.

◆ end() [1/2]

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr const_iterator gaia::core::span< T, Extent >::end ( ) const
inlineconstexprnoexcept

Returns a const iterator one past the final element.

Returns
Const ending iterator.

◆ end() [2/2]

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr iterator gaia::core::span< T, Extent >::end ( )
inlineconstexprnoexcept

Returns an iterator one past the final element.

Returns
Ending iterator.

◆ first() [1/2]

template<typename T , span_size_type Extent>
template<span_size_type Count>
GAIA_NODISCARD constexpr span< element_kind, Count > gaia::core::span< T, Extent >::first ( ) const
inlineconstexpr

Returns the first Count elements with a compile-time extent.

Template Parameters
CountNumber of elements in the result.
Returns
Fixed-extent view over the first Count elements.

◆ first() [2/2]

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr span< element_kind, DynamicSpanExtent > gaia::core::span< T, Extent >::first ( size_type  count) const
inlineconstexpr

Returns a dynamic-extent view over the first count elements.

Parameters
countNumber of elements in the result.
Returns
View over the requested prefix.

◆ front()

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr reference gaia::core::span< T, Extent >::front ( ) const
inlineconstexpr

Returns the first element.

Returns
Reference to the first element.

◆ last() [1/2]

template<typename T , span_size_type Extent>
template<span_size_type Count>
GAIA_NODISCARD constexpr span< element_kind, Count > gaia::core::span< T, Extent >::last ( ) const
inlineconstexpr

Returns the last Count elements with a compile-time extent.

Template Parameters
CountNumber of elements in the result.
Returns
Fixed-extent view over the last Count elements.

◆ last() [2/2]

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr span< element_kind, DynamicSpanExtent > gaia::core::span< T, Extent >::last ( size_type  count) const
inlineconstexpr

Returns a dynamic-extent view over the last count elements.

Parameters
countNumber of elements in the result.
Returns
View over the requested suffix.

◆ operator[]()

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr reference gaia::core::span< T, Extent >::operator[] ( size_type  index) const
inlineconstexpr

Returns the element at index.

Parameters
indexZero-based element index.
Returns
Reference to the selected element.

◆ size()

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr size_type gaia::core::span< T, Extent >::size ( ) const
inlineconstexprnoexcept

Returns the number of elements in the view.

Returns
Element count.

◆ subspan() [1/2]

template<typename T , span_size_type Extent>
template<span_size_type Offset, span_size_type Count = DynamicSpanExtent>
GAIA_NODISCARD constexpr subspan_return_t< Offset, Count > gaia::core::span< T, Extent >::subspan ( ) const
inlineconstexpr

Returns a subspan selected with compile-time offset and count.

Template Parameters
OffsetStarting element index.
CountRequested element count, or DynamicSpanExtent for the remaining elements.
Returns
View over the selected elements.

◆ subspan() [2/2]

template<typename T , span_size_type Extent>
GAIA_NODISCARD constexpr span< element_kind, DynamicSpanExtent > gaia::core::span< T, Extent >::subspan ( size_type  offset,
size_type  count = DynamicSpanExtent 
) const
inlineconstexpr

Returns a dynamic-extent subspan.

Parameters
offsetStarting element index.
countRequested element count, or DynamicSpanExtent for the remaining elements.
Returns
View over the selected elements.

The documentation for this class was generated from the following file: