di 0.1.0
Loading...
Searching...
No Matches
di::vocab::Span< T, extent > Class Template Reference

#include <di/vocab/span/span_fixed_size.h>

Inheritance diagram for di::vocab::Span< T, extent >:
di::meta::EnableView< Span< T, extent > > di::meta::EnableBorrowedContainer< Span< T, extent > > di::util::AddMemberGet< Span< T, extent > >

Public Types

using Element = T
 

Public Member Functions

constexpr Span ()=default
 
template<concepts::ContiguousIterator Iter>
requires (concepts::QualificationConvertibleTo<meta::RemoveReference<meta::IteratorReference<Iter>>, T>)
constexpr Span (Iter first, types::size_t count)
 
template<concepts::ContiguousIterator Iter, concepts::SizedSentinelFor< Iter > Sent>
requires (concepts::QualificationConvertibleTo<meta::RemoveReference<meta::IteratorReference<Iter>>, T> && !concepts::ConvertibleTo<Sent, types::size_t>)
constexpr Span (Iter it, Sent sent)
 
template<types::size_t size>
requires (size == extent)
constexpr Span (T(&array)[size])
 
template<concepts::QualificationConvertibleTo< T > U, types::size_t size>
requires (size == extent)
constexpr Span (vocab::Array< U, size > &array)
 
template<typename U, types::size_t size>
requires (size == extent && concepts::QualificationConvertibleTo<U const, T>)
constexpr Span (vocab::Array< U, size > const &array)
 
template<concepts::ContiguousContainer Con>
requires (concepts::SizedContainer<Con> && (concepts::BorrowedContainer<Con> || concepts::Const<T>) && !concepts::Span<Con> && !concepts::Array<Con> && !concepts::LanguageArray<meta::RemoveCVRef<Con>> && concepts::QualificationConvertibleTo<meta::RemoveReference<meta::ContainerReference<Con>>, T>)
constexpr Span (Con &&container)
 
template<concepts::QualificationConvertibleTo< T > U, types::size_t other_extent>
requires ((other_extent == dynamic_extent || extent == other_extent))
constexpr explicit (other_extent==dynamic_extent) Span(Span< U
 
constexpr Span (Span const &)=default
 
constexpr auto operator= (Span const &) -> Span &=default
 
constexpr auto begin () const -> T *
 
constexpr auto end () const -> T *
 
constexpr auto front () const -> T &requires(extent > 0)
 
constexpr auto back () const -> T &requires(extent > 0)
 
constexpr auto at (types::size_t index) const -> vocab::Optional< T & >
 
constexpr auto operator[] (types::size_t index) const -> T &requires(extent > 0)
 
constexpr auto data () const -> T *
 
constexpr auto size () const -> types::size_t
 
constexpr auto size_bytes () const -> types::size_t
 
constexpr auto empty () const -> bool
 
constexpr auto first (types::size_t count) const -> Optional< Span< T > >
 
constexpr auto last (types::size_t count) const -> Optional< Span< T > >
 
constexpr auto subspan (types::size_t offset) const -> Optional< Span< T > >
 
constexpr auto subspan (types::size_t offset, types::size_t count) const -> Optional< Span< T > >
 
template<types::size_t count>
requires (count <= extent)
constexpr auto first () const
 
template<types::size_t count>
requires (count <= extent)
constexpr auto last () const
 
template<types::size_t offset, types::size_t count = dynamic_extent>
requires (offset <= extent && (count == dynamic_extent || offset + count <= extent))
constexpr auto subspan () const
 
template<typename U = meta::RemoveCV<T>>
requires (concepts::CopyConstructible<U>)
constexpr auto to_owned () const -> Array< U, extent >
 
- Public Member Functions inherited from di::util::AddMemberGet< Span< T, extent > >
constexpr auto get () &-> decltype(auto)
 
constexpr auto get () const &-> decltype(auto)
 
constexpr auto get () &&-> decltype(auto)
 
constexpr auto get () const &&-> decltype(auto)
 
constexpr auto get () &-> decltype(auto)
 
constexpr auto get () const &-> decltype(auto)
 
constexpr auto get () &&-> decltype(auto)
 
constexpr auto get () const &&-> decltype(auto)
 

Public Attributes

constexpr other_extent const & other: m_data(other.data()) { DI_ASSERT(other.size() == extent)
 

Friends

constexpr friend auto operator== (Span a, Span b) -> bool requires(concepts::EqualityComparable< T >)
 
constexpr friend auto operator<=> (Span a, Span b)
 
template<concepts::ContiguousIterator It, concepts::SizedSentinelFor< It > Sent>
requires (concepts::QualificationConvertibleTo<It, T*>)
constexpr friend auto tag_invoke (types::Tag< container::reconstruct >, InPlaceType< Span >, It first, Sent last) -> Span< T >
 
template<types::size_t index>
requires (index < extent)
constexpr friend auto tag_invoke (types::Tag< tuple_element >, types::InPlaceType< Span >, Constexpr< index >) -> InPlaceType< T >
 
template<types::size_t index>
requires (index < extent)
constexpr friend auto tag_invoke (types::Tag< tuple_element >, types::InPlaceType< Span const >, Constexpr< index >) -> InPlaceType< T >
 
constexpr friend auto tag_invoke (types::Tag< tuple_size >, types::InPlaceType< Span >) -> types::size_t
 
template<types::size_t index>
requires (index < extent)
constexpr friend auto tag_invoke (types::Tag< util::get_in_place >, Constexpr< index >, Span self) -> T &
 

Member Typedef Documentation

◆ Element

template<typename T, types::size_t extent>
using di::vocab::Span< T, extent >::Element = T

Constructor & Destructor Documentation

◆ Span() [1/8]

template<typename T, types::size_t extent>
di::vocab::Span< T, extent >::Span ( )
explicitconstexprdefault

◆ Span() [2/8]

template<typename T, types::size_t extent>
template<concepts::ContiguousIterator Iter>
requires (concepts::QualificationConvertibleTo<meta::RemoveReference<meta::IteratorReference<Iter>>, T>)
di::vocab::Span< T, extent >::Span ( Iter first,
types::size_t count )
inlineexplicitconstexpr

◆ Span() [3/8]

template<typename T, types::size_t extent>
template<concepts::ContiguousIterator Iter, concepts::SizedSentinelFor< Iter > Sent>
requires (concepts::QualificationConvertibleTo<meta::RemoveReference<meta::IteratorReference<Iter>>, T> && !concepts::ConvertibleTo<Sent, types::size_t>)
di::vocab::Span< T, extent >::Span ( Iter it,
Sent sent )
inlineexplicitconstexpr

◆ Span() [4/8]

template<typename T, types::size_t extent>
template<types::size_t size>
requires (size == extent)
di::vocab::Span< T, extent >::Span ( T(&) array[size])
inlineconstexpr

◆ Span() [5/8]

template<typename T, types::size_t extent>
template<concepts::QualificationConvertibleTo< T > U, types::size_t size>
requires (size == extent)
di::vocab::Span< T, extent >::Span ( vocab::Array< U, size > & array)
inlineconstexpr

◆ Span() [6/8]

template<typename T, types::size_t extent>
template<typename U, types::size_t size>
requires (size == extent && concepts::QualificationConvertibleTo<U const, T>)
di::vocab::Span< T, extent >::Span ( vocab::Array< U, size > const & array)
inlineconstexpr

◆ Span() [7/8]

template<typename T, types::size_t extent>
template<concepts::ContiguousContainer Con>
requires (concepts::SizedContainer<Con> && (concepts::BorrowedContainer<Con> || concepts::Const<T>) && !concepts::Span<Con> && !concepts::Array<Con> && !concepts::LanguageArray<meta::RemoveCVRef<Con>> && concepts::QualificationConvertibleTo<meta::RemoveReference<meta::ContainerReference<Con>>, T>)
di::vocab::Span< T, extent >::Span ( Con && container)
inlineexplicitconstexpr

◆ Span() [8/8]

template<typename T, types::size_t extent>
di::vocab::Span< T, extent >::Span ( Span< T, extent > const & )
constexprdefault

Member Function Documentation

◆ at()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::at ( types::size_t index) const -> vocab::Optional<T&>
inlineconstexpr

◆ back()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::back ( ) const -> T& requires(extent > 0)
inlineconstexpr

◆ begin()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::begin ( ) const -> T*
inlineconstexpr

◆ data()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::data ( ) const -> T*
inlineconstexpr

◆ empty()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::empty ( ) const -> bool
inlinenodiscardconstexpr

◆ end()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::end ( ) const -> T*
inlineconstexpr

◆ explicit()

template<typename T, types::size_t extent>
template<concepts::QualificationConvertibleTo< T > U, types::size_t other_extent>
requires ((other_extent == dynamic_extent || extent == other_extent))
di::vocab::Span< T, extent >::explicit ( other_extent = dynamic_extent)
constexpr

◆ first() [1/2]

template<typename T, types::size_t extent>
template<types::size_t count>
requires (count <= extent)
auto di::vocab::Span< T, extent >::first ( ) const
inlineconstexpr

◆ first() [2/2]

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::first ( types::size_t count) const -> Optional<Span<T>>
inlineconstexpr

◆ front()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::front ( ) const -> T& requires(extent > 0)
inlineconstexpr

◆ last() [1/2]

template<typename T, types::size_t extent>
template<types::size_t count>
requires (count <= extent)
auto di::vocab::Span< T, extent >::last ( ) const
inlineconstexpr

◆ last() [2/2]

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::last ( types::size_t count) const -> Optional<Span<T>>
inlineconstexpr

◆ operator=()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::operator= ( Span< T, extent > const & ) -> Span &=default
constexprdefault

◆ operator[]()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::operator[] ( types::size_t index) const -> T& requires(extent > 0)
inlineconstexpr

◆ size()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::size ( ) const -> types::size_t
inlineconstexpr

◆ size_bytes()

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::size_bytes ( ) const -> types::size_t
inlineconstexpr

◆ subspan() [1/3]

template<typename T, types::size_t extent>
template<types::size_t offset, types::size_t count = dynamic_extent>
requires (offset <= extent && (count == dynamic_extent || offset + count <= extent))
auto di::vocab::Span< T, extent >::subspan ( ) const
inlineconstexpr

◆ subspan() [2/3]

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::subspan ( types::size_t offset) const -> Optional<Span<T>>
inlineconstexpr

◆ subspan() [3/3]

template<typename T, types::size_t extent>
auto di::vocab::Span< T, extent >::subspan ( types::size_t offset,
types::size_t count ) const -> Optional<Span<T>>
inlineconstexpr

◆ to_owned()

template<typename T, types::size_t extent>
template<typename U = meta::RemoveCV<T>>
requires (concepts::CopyConstructible<U>)
auto di::vocab::Span< T, extent >::to_owned ( ) const -> Array<U, extent>
inlineconstexpr

Friends And Related Symbol Documentation

◆ operator<=>

template<typename T, types::size_t extent>
friend auto operator<=> ( Span< T, extent > a,
Span< T, extent > b )
friend

◆ operator==

template<typename T, types::size_t extent>
friend auto operator== ( Span< T, extent > a,
Span< T, extent > b ) -> bool requires(concepts::EqualityComparable<T>)
friend

◆ tag_invoke [1/5]

template<typename T, types::size_t extent>
template<concepts::ContiguousIterator It, concepts::SizedSentinelFor< It > Sent>
requires (concepts::QualificationConvertibleTo<It, T*>)
friend auto tag_invoke ( types::Tag< container::reconstruct > ,
InPlaceType< Span< T, extent > > ,
It first,
Sent last ) -> Span<T>
friend

◆ tag_invoke [2/5]

template<typename T, types::size_t extent>
template<types::size_t index>
requires (index < extent)
friend auto tag_invoke ( types::Tag< tuple_element > ,
types::InPlaceType< Span< T, extent > > ,
Constexpr< index >  ) -> InPlaceType<T>
friend

◆ tag_invoke [3/5]

template<typename T, types::size_t extent>
template<types::size_t index>
requires (index < extent)
friend auto tag_invoke ( types::Tag< tuple_element > ,
types::InPlaceType< Span< T, extent > const > ,
Constexpr< index >  ) -> InPlaceType<T>
friend

◆ tag_invoke [4/5]

template<typename T, types::size_t extent>
friend auto tag_invoke ( types::Tag< tuple_size > ,
types::InPlaceType< Span< T, extent > >  ) -> types::size_t
friend

◆ tag_invoke [5/5]

template<typename T, types::size_t extent>
template<types::size_t index>
requires (index < extent)
friend auto tag_invoke ( types::Tag< util::get_in_place > ,
Constexpr< index > ,
Span< T, extent > self ) -> T&
friend

Member Data Documentation

◆ other

template<typename T, types::size_t extent>
other_extent const& di::vocab::Span< T, extent >::other

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