Monero
Loading...
Searching...
No Matches
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.
 
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 >
constexpr epee::span< T >::span ( )
inlineconstexprnoexcept

◆ span() [2/5]

template<typename T >
constexpr 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>
constexpr 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>
constexpr epee::span< T >::span ( T(&) src[N])
inlineconstexprnoexcept

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

◆ span() [5/5]

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

Member Function Documentation

◆ begin()

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

◆ cbegin()

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

◆ cend()

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

◆ data()

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

◆ empty()

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

◆ end()

template<typename T >
constexpr 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 >
static constexpr bool epee::span< T >::safe_conversion ( )
inlinestaticconstexprprivatenoexcept

◆ size()

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

◆ size_bytes()

template<typename T >
constexpr 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: