Zserio C++ runtime library  1.0.0
Built for Zserio 2.13.0
zserio::Span< T, Extent > Class Template Reference

#include <Span.h>

Public Types

using element_type = T
 
using value_type = typename std::remove_cv< T >::type
 
using size_type = std::size_t
 
using difference_type = std::ptrdiff_t
 
using pointer = T *
 
using const_pointer = const T *
 
using reference = T &
 
using iterator = pointer
 
using const_iterator = const_pointer
 
using reverse_iterator = std::reverse_iterator< iterator >
 
using const_reverse_iterator = std::reverse_iterator< const_iterator >
 
template<size_type Offset, size_type Count>
using SubspanReturnType = Span< T, Count!=dynamic_extent?Count:(Extent!=dynamic_extent?Extent-Offset:dynamic_extent)>
 

Public Member Functions

template<size_type ext = Extent, typename std::enable_if<(ext==0||ext==dynamic_extent), int >::type = 0>
constexpr Span () noexcept
 
constexpr Span (pointer first, size_type count)
 
constexpr Span (pointer first, pointer last)
 
template<size_type N, size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent||ext==N), int >::type = 0>
constexpr Span (element_type(&arr)[N]) noexcept
 
template<typename U , size_type N, size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent||ext==N)&&std::is_convertible< U(*)[], T(*)[]>::value, int >::type = 0>
constexpr Span (std::array< U, N > &arr) noexcept
 
template<typename U , size_type N, size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent||ext==N)&&std::is_convertible< const U(*)[], T(*)[]>::value, int >::type = 0>
constexpr Span (const std::array< U, N > &arr) noexcept
 
template<typename U , typename ALLOC , size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent)&&std::is_convertible< U(*)[], T(*)[]>::value, int >::type = 0>
constexpr Span (std::vector< U, ALLOC > &vec)
 
template<typename U , typename ALLOC , size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent)&&std::is_convertible< const U(*)[], T(*)[]>::value, int >::type = 0>
constexpr Span (const std::vector< U, ALLOC > &vec)
 
template<typename U , size_type N, typename std::enable_if<(Extent==N||Extent==dynamic_extent)&&std::is_convertible< U(*)[], T(*)[]>::value, int >::type = 0>
constexpr Span (const Span< U, N > &s) noexcept
 
constexpr iterator begin () const noexcept
 
constexpr iterator end () const noexcept
 
constexpr reverse_iterator rbegin () const noexcept
 
constexpr reverse_iterator rend () const noexcept
 
constexpr reference front () const
 
constexpr reference back () const
 
constexpr reference operator[] (size_type idx) const
 
constexpr pointer data () const noexcept
 
constexpr size_type size () const noexcept
 
constexpr size_type size_bytes () const noexcept
 
constexpr bool empty () const noexcept
 
template<size_type Count>
constexpr Span< element_type, Count > first () const
 
constexpr Span< element_type, dynamic_extentfirst (size_type Count) const
 
template<size_type Count>
constexpr Span< element_type, Count > last () const
 
constexpr Span< element_type, dynamic_extentlast (size_type Count) const
 
constexpr Span< element_type, dynamic_extentsubspan (size_type Offset, size_type Count=dynamic_extent) const
 
 ~Span ()=default
 
 Span (const Span &other) noexcept=default
 
Spanoperator= (const Span &other) noexcept=default
 
 Span (Span &&other) noexcept=default
 
Spanoperator= (Span &&other) noexcept=default
 
template<size_type Offset, size_type Count = dynamic_extent, typename std::enable_if< Count==dynamic_extent, int >::type = 0>
constexpr SubspanReturnType< Offset, Count > subspan () const
 
template<size_type Offset, size_type Count, typename std::enable_if< Count!=dynamic_extent, int >::type = 0>
constexpr SubspanReturnType< Offset, Count > subspan () const
 

Static Public Attributes

static constexpr size_type extent = Extent
 

Detailed Description

template<typename T, std::size_t Extent = dynamic_extent>
class zserio::Span< T, Extent >

Class that holds non-owning reference (aka. "view") to continuous sequence of objects. The user of this class is responsible of making sure, that the referenced sequence is valid as long as the instance of the Span is alive. Inspired by C++20 std::span.

Definition at line 57 of file Span.h.

Member Typedef Documentation

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::const_iterator = const_pointer

Definition at line 68 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::const_pointer = const T*

Definition at line 65 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::const_reverse_iterator = std::reverse_iterator<const_iterator>

Definition at line 70 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::difference_type = std::ptrdiff_t

Definition at line 63 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::element_type = T

Definition at line 60 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::iterator = pointer

Definition at line 67 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::pointer = T*

Definition at line 64 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::reference = T&

Definition at line 66 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::reverse_iterator = std::reverse_iterator<iterator>

Definition at line 69 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::size_type = std::size_t

Definition at line 62 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<size_type Offset, size_type Count>
using zserio::Span< T, Extent >::SubspanReturnType = Span<T, Count != dynamic_extent ? Count : (Extent != dynamic_extent ? Extent - Offset : dynamic_extent)>

Definition at line 350 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
using zserio::Span< T, Extent >::value_type = typename std::remove_cv<T>::type

Definition at line 61 of file Span.h.

Constructor & Destructor Documentation

template<typename T, std::size_t Extent = dynamic_extent>
template<size_type ext = Extent, typename std::enable_if<(ext==0||ext==dynamic_extent), int >::type = 0>
constexpr zserio::Span< T, Extent >::Span ( )
inlinenoexcept

Constructor. Initializes empty Span.

Definition at line 79 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr zserio::Span< T, Extent >::Span ( pointer  first,
size_type  count 
)
inline

Constructor. Initializes Span holding a reference starting at given pointer, having given number of elements.

Parameters
firstPointer to first element in the sequence.
countNumber of elements.

Definition at line 89 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr zserio::Span< T, Extent >::Span ( pointer  first,
pointer  last 
)
inline

Constructor. Initializes Span holding a reference starting at given pointer, ending at another pointer.

Parameters
firstPointer to first element in the sequence.
lastPointer to one-after-last element in the sequence.

Definition at line 100 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<size_type N, size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent||ext==N), int >::type = 0>
constexpr zserio::Span< T, Extent >::Span ( element_type(&)  arr[N])
inlinenoexcept

Constructor. Initializes Span holding a reference to array.

Parameters
arrArray to which the Span will hold a reference.

Definition at line 111 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<typename U , size_type N, size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent||ext==N)&&std::is_convertible< U(*)[], T(*)[]>::value, int >::type = 0>
constexpr zserio::Span< T, Extent >::Span ( std::array< U, N > &  arr)
inlinenoexcept

Constructor. Initializes Span holding a reference to std::array.

Parameters
arrstd::array to which the Span will hold a reference.

Definition at line 123 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<typename U , size_type N, size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent||ext==N)&&std::is_convertible< const U(*)[], T(*)[]>::value, int >::type = 0>
constexpr zserio::Span< T, Extent >::Span ( const std::array< U, N > &  arr)
inlinenoexcept

Constructor. Initializes Span holding a reference to std::array.

Parameters
arrstd::array to which the Span will hold a reference.

Definition at line 135 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<typename U , typename ALLOC , size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent)&&std::is_convertible< U(*)[], T(*)[]>::value, int >::type = 0>
constexpr zserio::Span< T, Extent >::Span ( std::vector< U, ALLOC > &  vec)
inline

Constructor. Initializes Span holding a reference to std::vector.

Parameters
vecstd::vector to which the Span will hold a reference.

Definition at line 147 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<typename U , typename ALLOC , size_type ext = Extent, typename std::enable_if<(ext==dynamic_extent)&&std::is_convertible< const U(*)[], T(*)[]>::value, int >::type = 0>
constexpr zserio::Span< T, Extent >::Span ( const std::vector< U, ALLOC > &  vec)
inline

Constructor. Initializes Span holding a reference to std::vector.

Parameters
vecstd::vector to which the Span will hold a reference.

Definition at line 159 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<typename U , size_type N, typename std::enable_if<(Extent==N||Extent==dynamic_extent)&&std::is_convertible< U(*)[], T(*)[]>::value, int >::type = 0>
constexpr zserio::Span< T, Extent >::Span ( const Span< U, N > &  s)
inlinenoexcept

Constructor. Convert between spans of different types.

Parameters
sInput span.

Definition at line 171 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
zserio::Span< T, Extent >::~Span ( )
default

Method generated by default.

template<typename T, std::size_t Extent = dynamic_extent>
zserio::Span< T, Extent >::Span ( const Span< T, Extent > &  other)
defaultnoexcept

Method generated by default.

template<typename T, std::size_t Extent = dynamic_extent>
zserio::Span< T, Extent >::Span ( Span< T, Extent > &&  other)
defaultnoexcept

Method generated by default.

Member Function Documentation

template<typename T, std::size_t Extent = dynamic_extent>
constexpr reference zserio::Span< T, Extent >::back ( ) const
inline

Get reference to the last element of the sequence. The sequence shall not be empty.

Returns
Reference to the last element of the sequence

Definition at line 245 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr iterator zserio::Span< T, Extent >::begin ( ) const
inlinenoexcept

Begin iteration.

Returns
Iterator to the beginning of the sequence.

Definition at line 195 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr pointer zserio::Span< T, Extent >::data ( ) const
inlinenoexcept

Get pointer to the sequence beginning.

Returns
Pointer to the sequence beginning

Definition at line 266 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr bool zserio::Span< T, Extent >::empty ( ) const
inlinenoexcept

Check if the sequence is empty.

Returns
True if the sequence is empty, false otherwise.

Definition at line 296 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr iterator zserio::Span< T, Extent >::end ( ) const
inlinenoexcept

End iteration.

Returns
Iterator one-past-last element of the sequence.

Definition at line 205 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<size_type Count>
constexpr Span<element_type, Count> zserio::Span< T, Extent >::first ( ) const
inline

Get subspan of given number of elements from the sequence start.

Returns
Subspan of given number of elements from the sequence start.

Definition at line 307 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr Span<element_type, dynamic_extent> zserio::Span< T, Extent >::first ( size_type  Count) const
inline

Get subspan of given number of elements from the sequence start.

Parameters
CountRequested number of elements in the subspan. Shall not be bigger than size().
Returns
Subspan of given number of elements from the sequence start.

Definition at line 319 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr reference zserio::Span< T, Extent >::front ( ) const
inline

Get reference to the first element of the sequence. The sequence shall not be empty.

Returns
Reference to the first element of the sequence

Definition at line 235 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<size_type Count>
constexpr Span<element_type, Count> zserio::Span< T, Extent >::last ( ) const
inline

Get subspan of given number of elements from the sequence end.

Returns
Subspan of given number of elements from the sequence end.

Definition at line 330 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr Span<element_type, dynamic_extent> zserio::Span< T, Extent >::last ( size_type  Count) const
inline

Get subspan of given number of elements from the sequence end.

Parameters
CountRequested number of elements in the subspan. Shall not be bigger than size().
Returns
Subspan of given number of elements from the sequence end.

Definition at line 342 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
Span& zserio::Span< T, Extent >::operator= ( const Span< T, Extent > &  other)
defaultnoexcept

Method generated by default.

template<typename T, std::size_t Extent = dynamic_extent>
Span& zserio::Span< T, Extent >::operator= ( Span< T, Extent > &&  other)
defaultnoexcept

Method generated by default.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr reference zserio::Span< T, Extent >::operator[] ( size_type  idx) const
inline

Access the element on given index.

Parameters
idxIndex of element to be accessed. Must be less than size().
Returns
Element on given index.

Definition at line 256 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr reverse_iterator zserio::Span< T, Extent >::rbegin ( ) const
inlinenoexcept

Begin reverse iteration.

Returns
Reverse iterator to the last element.

Definition at line 215 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr reverse_iterator zserio::Span< T, Extent >::rend ( ) const
inlinenoexcept

End reverse iteration.

Returns
Reverse iterator one-before-first element of the sequence.

Definition at line 225 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr size_type zserio::Span< T, Extent >::size ( ) const
inlinenoexcept

Get number of elements in the sequence.

Returns
Number of elements in the sequence.

Definition at line 276 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr size_type zserio::Span< T, Extent >::size_bytes ( ) const
inlinenoexcept

Get size of sequence in bytes.

Returns
Size of sequence in bytes.

Definition at line 286 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<size_type Offset, size_type Count = dynamic_extent, typename std::enable_if< Count==dynamic_extent, int >::type = 0>
constexpr SubspanReturnType<Offset, Count> zserio::Span< T, Extent >::subspan ( ) const
inline

Get subspan of given number of elements beginning at given index.

Returns
Subspan of given number of elements beginning at given index.

Definition at line 360 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
template<size_type Offset, size_type Count, typename std::enable_if< Count!=dynamic_extent, int >::type = 0>
constexpr SubspanReturnType<Offset, Count> zserio::Span< T, Extent >::subspan ( ) const
inline

Get subspan of given number of elements beginning at given index.

Returns
Subspan of given number of elements beginning at given index.

Definition at line 369 of file Span.h.

template<typename T, std::size_t Extent = dynamic_extent>
constexpr Span<element_type, dynamic_extent> zserio::Span< T, Extent >::subspan ( size_type  Offset,
size_type  Count = dynamic_extent 
) const
inline

Get subspan of given number of elements beginning at given index.

Parameters
OffsetIndex in the original sequence, where the new subspan should start
CountRequested number of elements in the subspan.
Returns
Subspan of given number of elements beginning at given index.

Definition at line 384 of file Span.h.

Member Data Documentation

template<typename T, std::size_t Extent = dynamic_extent>
constexpr size_type zserio::Span< T, Extent >::extent = Extent
static

Definition at line 72 of file Span.h.


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