Electroneum
Loading...
Searching...
No Matches
epee::span< T > Class Template Reference

Non-owning sequence of data. Does not deep copy. More...

#include <span.h>

Public Types

using value_type = T
using size_type = std::size_t
using difference_type = std::ptrdiff_t
using pointer = T*
using const_pointer = const T*
using reference = T&
using const_reference = const T&
using iterator = pointer
using const_iterator = const_pointer

Public Member Functions

constexpr span () noexcept
constexpr span (std::nullptr_t) noexcept
template<typename U, typename = typename std::enable_if<safe_conversion<U>()>::type>
constexpr span (U *const src_ptr, const std::size_t count) noexcept
 Prevent derived-to-base conversions; invalid in this context.
template<std::size_t N>
constexpr span (T(&src)[N]) noexcept
 Conversion from C-array. Prevents common bugs with sizeof + arrays.
constexpr span (const span &) noexcept=default
spanoperator= (const span &) noexcept=default
std::size_t remove_prefix (std::size_t amount) noexcept
constexpr iterator begin () const noexcept
constexpr const_iterator cbegin () const noexcept
constexpr iterator end () const noexcept
constexpr const_iterator cend () const noexcept
constexpr bool empty () const noexcept
constexpr pointer data () const noexcept
constexpr std::size_t size () const noexcept
constexpr std::size_t size_bytes () const noexcept
const Toperator[] (size_t idx) const

Detailed Description

template<typename T>
class epee::span< T >

Non-owning sequence of data. Does not deep copy.

Inspired by gsl::span and/or boost::iterator_range. This class is intended to be used as a parameter type for functions that need to take a writable or read-only sequence of data. Most common cases are span<char> and span<std::uint8_t>. Using as a class member is only recommended if clearly documented as not doing a deep-copy. C-arrays are easily convertible to this type.

Note
Conversion from C string literal to span<const char> will include the NULL-terminator.
Never allows derived-to-base pointer conversion; an array of derived types is not an array of base types.

Definition at line 56 of file span.h.

Member Typedef Documentation

◆ const_iterator

template<typename T>
using epee::span< T >::const_iterator = const_pointer

Definition at line 76 of file span.h.

◆ const_pointer

template<typename T>
using epee::span< T >::const_pointer = const T*

Definition at line 72 of file span.h.

◆ const_reference

template<typename T>
using epee::span< T >::const_reference = const T&

Definition at line 74 of file span.h.

◆ difference_type

template<typename T>
using epee::span< T >::difference_type = std::ptrdiff_t

Definition at line 70 of file span.h.

◆ iterator

template<typename T>
using epee::span< T >::iterator = pointer

Definition at line 75 of file span.h.

◆ pointer

template<typename T>
using epee::span< T >::pointer = T*

Definition at line 71 of file span.h.

◆ reference

template<typename T>
using epee::span< T >::reference = T&

Definition at line 73 of file span.h.

◆ size_type

template<typename T>
using epee::span< T >::size_type = std::size_t

Definition at line 69 of file span.h.

◆ value_type

template<typename T>
using epee::span< T >::value_type = T

Definition at line 68 of file span.h.

Constructor & Destructor Documentation

◆ span() [1/5]

template<typename T>
epee::span< T >::span ( )
inlineconstexprnoexcept

Definition at line 78 of file span.h.

78: ptr(nullptr), len(0) {}

◆ span() [2/5]

template<typename T>
epee::span< T >::span ( std::nullptr_t )
inlineconstexprnoexcept

Definition at line 79 of file span.h.

79: span() {}
constexpr span() noexcept
Definition span.h:78

◆ span() [3/5]

template<typename T>
template<typename U, typename = typename std::enable_if<safe_conversion<U>()>::type>
epee::span< T >::span ( U *const src_ptr,
const std::size_t count )
inlineconstexprnoexcept

Prevent derived-to-base conversions; invalid in this context.

Definition at line 83 of file span.h.

84 : ptr(src_ptr), len(count) {}
Non-owning sequence of data. Does not deep copy.
Definition span.h:57

◆ span() [4/5]

template<typename T>
template<std::size_t N>
epee::span< T >::span ( T(&) src[N])
inlineconstexprnoexcept

Conversion from C-array. Prevents common bugs with sizeof + arrays.

Definition at line 88 of file span.h.

88: span(src, N) {}

◆ span() [5/5]

template<typename T>
epee::span< T >::span ( const span< T > & )
constexprdefaultnoexcept

Member Function Documentation

◆ begin()

template<typename T>
iterator epee::span< T >::begin ( ) const
inlineconstexprnoexcept

Definition at line 103 of file span.h.

103{ return ptr; }
Here is the caller graph for this function:

◆ cbegin()

template<typename T>
const_iterator epee::span< T >::cbegin ( ) const
inlineconstexprnoexcept

Definition at line 104 of file span.h.

104{ return ptr; }
Here is the caller graph for this function:

◆ cend()

template<typename T>
const_iterator epee::span< T >::cend ( ) const
inlineconstexprnoexcept

Definition at line 107 of file span.h.

107{ return cbegin() + size(); }
constexpr std::size_t size() const noexcept
Definition span.h:111
constexpr const_iterator cbegin() const noexcept
Definition span.h:104
Here is the caller graph for this function:

◆ data()

template<typename T>
pointer epee::span< T >::data ( ) const
inlineconstexprnoexcept

Definition at line 110 of file span.h.

110{ return ptr; }
Here is the caller graph for this function:

◆ empty()

template<typename T>
bool epee::span< T >::empty ( ) const
inlineconstexprnoexcept

Definition at line 109 of file span.h.

109{ return size() == 0; }
Here is the caller graph for this function:

◆ end()

template<typename T>
iterator epee::span< T >::end ( ) const
inlineconstexprnoexcept

Definition at line 106 of file span.h.

106{ return begin() + size(); }
constexpr iterator begin() const noexcept
Definition span.h:103
Here is the caller graph for this function:

◆ operator=()

template<typename T>
span & epee::span< T >::operator= ( const span< T > & )
defaultnoexcept

◆ operator[]()

template<typename T>
const T & epee::span< T >::operator[] ( size_t idx) const
inline

Definition at line 114 of file span.h.

114{ return ptr[idx]; }

◆ remove_prefix()

template<typename T>
std::size_t epee::span< T >::remove_prefix ( std::size_t amount)
inlinenoexcept

Try to remove amount elements from beginning of span.

Returns
Number of elements removed.

Definition at line 95 of file span.h.

96 {
97 amount = std::min(len, amount);
98 ptr += amount;
99 len -= amount;
100 return amount;
101 }

◆ size()

template<typename T>
std::size_t epee::span< T >::size ( ) const
inlineconstexprnoexcept

Definition at line 111 of file span.h.

111{ return len; }
Here is the caller graph for this function:

◆ size_bytes()

template<typename T>
std::size_t epee::span< T >::size_bytes ( ) const
inlineconstexprnoexcept

Definition at line 112 of file span.h.

112{ return size() * sizeof(value_type); }
T value_type
Definition span.h:68
Here is the caller graph for this function:

The documentation for this class was generated from the following file:
  • /home/abuild/rpmbuild/BUILD/electroneum-5.1.3.1-build/electroneum-5.1.3.1/contrib/epee/include/span.h