Monero
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
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>
epee::span< T >::span ( )
inlineconstexprnoexcept

◆ span() [2/5]

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

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

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

◆ 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

◆ cbegin()

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

◆ cend()

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

◆ data()

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

◆ empty()

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

◆ end()

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

◆ operator=()

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

◆ operator[]() [1/2]

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

◆ operator[]() [2/2]

template<typename T>
T & epee::span< T >::operator[] ( size_t idx)
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>
constexpr bool epee::span< T >::safe_conversion ( )
inlinestaticconstexprprivatenoexcept

◆ size()

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

◆ size_bytes()

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

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: