Monero
Public Types | Public Member Functions | Static Private Member Functions | Private Attributes | List of all members
epee::span< T > Class Template Reference

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

#include <span.h>

Collaboration diagram for epee::span< T >:
Collaboration graph
[legend]

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
 
Toperator[] (size_t idx) noexcept
 
const Toperator[] (size_t idx) const noexcept
 

Static Private Member Functions

template<typename U >
static constexpr bool safe_conversion () noexcept
 

Private Attributes

Tptr
 
std::size_t len
 

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.

Member Typedef Documentation

◆ const_iterator

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

◆ const_pointer

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

◆ const_reference

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

◆ difference_type

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

◆ iterator

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

◆ pointer

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

◆ reference

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

◆ size_type

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

◆ value_type

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

Constructor & Destructor Documentation

◆ span() [1/5]

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

◆ span() [2/5]

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

◆ 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.

◆ 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.

◆ 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

◆ cbegin()

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

◆ cend()

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

◆ data()

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

◆ empty()

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

◆ end()

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

◆ operator=()

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

◆ operator[]() [1/2]

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

◆ operator[]() [2/2]

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

◆ 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.

◆ safe_conversion()

template<typename T>
template<typename U >
static constexpr bool epee::span< T >::safe_conversion ( )
inlinestaticprivatenoexcept

◆ size()

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

◆ size_bytes()

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

Member Data Documentation

◆ len

template<typename T>
std::size_t epee::span< T >::len
private

◆ ptr

template<typename T>
T* epee::span< T >::ptr
private

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