Electroneum
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. More...
 
template<std::size_t N>
constexpr span (T(&src)[N]) noexcept
 Conversion from C-array. Prevents common bugs with sizeof + arrays. More...
 
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>
constexpr epee::span< T >::span ( )
inlinenoexcept

Definition at line 78 of file span.h.

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

◆ span() [2/5]

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

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>
constexpr epee::span< T >::span ( U *const  src_ptr,
const std::size_t  count 
)
inlinenoexcept

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

Definition at line 83 of file span.h.

84  : ptr(src_ptr), len(count) {}
mdb_size_t count(MDB_cursor *cur)

◆ span() [4/5]

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

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

Definition at line 88 of file span.h.

88 : span(src, N) {}
constexpr span() noexcept
Definition: span.h:78

◆ span() [5/5]

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

Member Function Documentation

◆ begin()

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

Definition at line 103 of file span.h.

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

◆ cbegin()

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

Definition at line 104 of file span.h.

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

◆ cend()

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

Definition at line 107 of file span.h.

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

◆ data()

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

Definition at line 110 of file span.h.

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

◆ empty()

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

Definition at line 109 of file span.h.

109 { return size() == 0; }
constexpr std::size_t size() const noexcept
Definition: span.h:111
Here is the caller graph for this function:

◆ end()

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

Definition at line 106 of file span.h.

106 { return begin() + size(); }
constexpr std::size_t size() const noexcept
Definition: span.h:111
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>
constexpr std::size_t epee::span< T >::size ( ) const
inlinenoexcept

Definition at line 111 of file span.h.

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

◆ size_bytes()

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

Definition at line 112 of file span.h.

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

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