open62541pp 0.17.0
C++ wrapper of open62541
Loading...
Searching...
No Matches
opcua::Span< T > Class Template Reference

#include <span.hpp>

Detailed Description

template<typename T>
class opcua::Span< T >

View to a contiguous sequence of objects, similar to std::span in C++20.

Spans are used to pass and return open62541 arrays without copy and to use them with the standard library algorithms. The view just holds two members: the pointer to T and the size, so it's lightweight and trivially copyable.

Template Parameters
TType of the array object, use const T for an immutable view
See also
https://en.cppreference.com/w/cpp/container/span
Examples
custom_datatypes/client_custom_datatypes.cpp, custom_datatypes/server_custom_datatypes.cpp, events/client_eventfilter.cpp, events/server_events.cpp, method/server_method.cpp, and typeconversion.cpp.

Definition at line 28 of file span.hpp.

Public Types

using element_type = T
 
using value_type = std::remove_cv_t<T>
 
using size_type = 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
 
using reverse_iterator = std::reverse_iterator<iterator>
 
using const_reverse_iterator = std::reverse_iterator<const_iterator>
 

Public Member Functions

constexpr Span () noexcept=default
 
constexpr Span (T *data, size_t size) noexcept
 
template<typename Container , typename = EnableIfHasSizeAndData<Container>>
constexpr Span (Container &container) noexcept
 
template<typename Container , typename = EnableIfHasSizeAndData<Container>>
constexpr Span (const Container &container) noexcept
 
constexpr Span (std::initializer_list< value_type > values) noexcept
 
constexpr void swap (Span &other) noexcept
 
constexpr size_t size () const noexcept
 
constexpr bool empty () const noexcept
 
constexpr pointer data () const noexcept
 
constexpr reference operator[] (size_t index) const noexcept
 
constexpr reference at (size_t index) const
 
constexpr reference front () const noexcept
 
constexpr reference back () const noexcept
 
constexpr iterator begin () const noexcept
 
constexpr iterator end () const noexcept
 
constexpr const_iterator cbegin () const noexcept
 
constexpr const_iterator cend () const noexcept
 
constexpr reverse_iterator rbegin () const noexcept
 
constexpr reverse_iterator rend () const noexcept
 
constexpr const_reverse_iterator crbegin () const noexcept
 
constexpr const_reverse_iterator crend () const noexcept
 
constexpr Span subview (size_t offset, size_t count=(std::numeric_limits< std::size_t >::max)()) const noexcept
 
constexpr Span first (size_t count) const noexcept
 
constexpr Span last (size_t count) const noexcept
 

Related Symbols

(Note that these are not member symbols.)

template<typename Container >
 Span (Container &) -> Span< typename Container::value_type >
 
template<typename Container >
 Span (const Container &) -> Span< const typename Container::value_type >
 
template<typename T , typename U , typename = detail::EnableIfEqualityComparable<T, U>>
constexpr bool operator== (Span< T > lhs, Span< U > rhs)
 
template<typename T , typename U , typename = detail::EnableIfEqualityComparable<T, U>>
constexpr bool operator!= (Span< T > lhs, Span< U > rhs)
 

Member Typedef Documentation

◆ element_type

template<typename T >
using opcua::Span< T >::element_type = T

Definition at line 48 of file span.hpp.

◆ value_type

template<typename T >
using opcua::Span< T >::value_type = std::remove_cv_t<T>

Definition at line 49 of file span.hpp.

◆ size_type

template<typename T >
using opcua::Span< T >::size_type = size_t

Definition at line 50 of file span.hpp.

◆ difference_type

template<typename T >
using opcua::Span< T >::difference_type = std::ptrdiff_t

Definition at line 51 of file span.hpp.

◆ pointer

template<typename T >
using opcua::Span< T >::pointer = T*

Definition at line 52 of file span.hpp.

◆ const_pointer

template<typename T >
using opcua::Span< T >::const_pointer = const T*

Definition at line 53 of file span.hpp.

◆ reference

template<typename T >
using opcua::Span< T >::reference = T&

Definition at line 54 of file span.hpp.

◆ const_reference

template<typename T >
using opcua::Span< T >::const_reference = const T&

Definition at line 55 of file span.hpp.

◆ iterator

template<typename T >
using opcua::Span< T >::iterator = pointer

Definition at line 56 of file span.hpp.

◆ const_iterator

template<typename T >
using opcua::Span< T >::const_iterator = const_pointer

Definition at line 57 of file span.hpp.

◆ reverse_iterator

template<typename T >
using opcua::Span< T >::reverse_iterator = std::reverse_iterator<iterator>

Definition at line 58 of file span.hpp.

◆ const_reverse_iterator

template<typename T >
using opcua::Span< T >::const_reverse_iterator = std::reverse_iterator<const_iterator>

Definition at line 59 of file span.hpp.

Constructor & Destructor Documentation

◆ Span() [1/5]

template<typename T >
opcua::Span< T >::Span ( )
constexprdefaultnoexcept

◆ Span() [2/5]

template<typename T >
opcua::Span< T >::Span ( T * data,
size_t size )
inlineconstexprnoexcept

Definition at line 64 of file span.hpp.

◆ Span() [3/5]

template<typename T >
template<typename Container , typename = EnableIfHasSizeAndData<Container>>
opcua::Span< T >::Span ( Container & container)
inlineconstexprnoexcept

Implicit constructor from a container like std::array or std::vector.

Definition at line 72 of file span.hpp.

◆ Span() [4/5]

template<typename T >
template<typename Container , typename = EnableIfHasSizeAndData<Container>>
opcua::Span< T >::Span ( const Container & container)
inlineconstexprnoexcept

Implicit constructor from a container like std::array or std::vector (const).

Definition at line 79 of file span.hpp.

◆ Span() [5/5]

template<typename T >
opcua::Span< T >::Span ( std::initializer_list< value_type > values)
inlineconstexprnoexcept

Implicit constructor from an initializer list.

Only safe to use if std::initializer_list itself outlives the Span:

void takeView(Span<const int> values);
// ok
takeView({1, 2, 3});
// not ok
Span<const int> values = {1, 2, 3};
takeView(values);
View to a contiguous sequence of objects, similar to std::span in C++20.
Definition span.hpp:28

Definition at line 95 of file span.hpp.

Member Function Documentation

◆ swap()

template<typename T >
void opcua::Span< T >::swap ( Span< T > & other)
inlineconstexprnoexcept

Definition at line 98 of file span.hpp.

◆ size()

template<typename T >
size_t opcua::Span< T >::size ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 103 of file span.hpp.

Referenced by opcua::ua::AddNodesRequest::AddNodesRequest(), opcua::ua::AddReferencesRequest::AddReferencesRequest(), opcua::Span< T >::at(), opcua::Span< T >::back(), opcua::ua::BrowseNextRequest::BrowseNextRequest(), opcua::ua::BrowseRequest::BrowseRequest(), opcua::ua::CallMethodRequest::CallMethodRequest(), opcua::ua::CallRequest::CallRequest(), opcua::Span< T >::cend(), opcua::ua::CreateMonitoredItemsRequest::CreateMonitoredItemsRequest(), opcua::ua::DeleteMonitoredItemsRequest::DeleteMonitoredItemsRequest(), opcua::ua::DeleteNodesRequest::DeleteNodesRequest(), opcua::ua::DeleteReferencesRequest::DeleteReferencesRequest(), opcua::ua::DeleteSubscriptionsRequest::DeleteSubscriptionsRequest(), opcua::Span< T >::empty(), opcua::Span< T >::end(), opcua::ua::EnumDefinition::EnumDefinition(), opcua::ua::EventFilter::EventFilter(), opcua::Span< T >::first(), opcua::Span< T >::last(), opcua::ua::ModifyMonitoredItemsRequest::ModifyMonitoredItemsRequest(), opcua::Span< T >::operator[](), opcua::ua::ReadRequest::ReadRequest(), opcua::ua::RegisterNodesRequest::RegisterNodesRequest(), opcua::ua::RelativePath::RelativePath(), opcua::ua::SetMonitoringModeRequest::SetMonitoringModeRequest(), opcua::ua::SetPublishingModeRequest::SetPublishingModeRequest(), opcua::ua::SetTriggeringRequest::SetTriggeringRequest(), opcua::Span< T >::subview(), opcua::ua::TranslateBrowsePathsToNodeIdsRequest::TranslateBrowsePathsToNodeIdsRequest(), opcua::ua::UnregisterNodesRequest::UnregisterNodesRequest(), and opcua::ua::WriteRequest::WriteRequest().

◆ empty()

template<typename T >
bool opcua::Span< T >::empty ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 107 of file span.hpp.

Referenced by opcua::Span< T >::back(), and opcua::Span< T >::front().

◆ data()

◆ operator[]()

template<typename T >
reference opcua::Span< T >::operator[] ( size_t index) const
inlinenodiscardconstexprnoexcept

Access element by index.

Definition at line 116 of file span.hpp.

◆ at()

template<typename T >
reference opcua::Span< T >::at ( size_t index) const
inlinenodiscardconstexpr

Access element by index with bounds checking.

Exceptions
std::out_of_rangeIf `index` >= size()
Examples
events/client_eventfilter.cpp, events/server_events.cpp, and method/server_method.cpp.

Definition at line 123 of file span.hpp.

◆ front()

template<typename T >
reference opcua::Span< T >::front ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 133 of file span.hpp.

◆ back()

template<typename T >
reference opcua::Span< T >::back ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 138 of file span.hpp.

◆ begin()

template<typename T >
iterator opcua::Span< T >::begin ( ) const
inlinenodiscardconstexprnoexcept

◆ end()

template<typename T >
iterator opcua::Span< T >::end ( ) const
inlinenodiscardconstexprnoexcept

◆ cbegin()

template<typename T >
const_iterator opcua::Span< T >::cbegin ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 151 of file span.hpp.

Referenced by opcua::Span< T >::crend().

◆ cend()

template<typename T >
const_iterator opcua::Span< T >::cend ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 155 of file span.hpp.

Referenced by opcua::Span< T >::crbegin().

◆ rbegin()

template<typename T >
reverse_iterator opcua::Span< T >::rbegin ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 159 of file span.hpp.

◆ rend()

template<typename T >
reverse_iterator opcua::Span< T >::rend ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 163 of file span.hpp.

◆ crbegin()

template<typename T >
const_reverse_iterator opcua::Span< T >::crbegin ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 167 of file span.hpp.

◆ crend()

template<typename T >
const_reverse_iterator opcua::Span< T >::crend ( ) const
inlinenodiscardconstexprnoexcept

Definition at line 171 of file span.hpp.

◆ subview()

template<typename T >
Span opcua::Span< T >::subview ( size_t offset,
size_t count = (std::numeric_limits<std::size_t>::max)() ) const
inlinenodiscardconstexprnoexcept

Obtain a view over count elements of this Span starting at offset offset.

Definition at line 176 of file span.hpp.

◆ first()

template<typename T >
Span opcua::Span< T >::first ( size_t count) const
inlinenodiscardconstexprnoexcept

Obtain a view over the first count elements of this Span.

Definition at line 189 of file span.hpp.

◆ last()

template<typename T >
Span opcua::Span< T >::last ( size_t count) const
inlinenodiscardconstexprnoexcept

Obtain a view over the last count elements of this Span.

Definition at line 197 of file span.hpp.

Friends And Related Symbol Documentation

◆ Span() [1/2]

template<typename Container >
Span ( Container & ) -> Span< typename Container::value_type >
related

◆ Span() [2/2]

template<typename Container >
Span ( const Container & ) -> Span< const typename Container::value_type >
related

◆ operator==()

template<typename T , typename U , typename = detail::EnableIfEqualityComparable<T, U>>
bool operator== ( Span< T > lhs,
Span< U > rhs )
related

Definition at line 244 of file span.hpp.

◆ operator!=()

template<typename T , typename U , typename = detail::EnableIfEqualityComparable<T, U>>
bool operator!= ( Span< T > lhs,
Span< U > rhs )
related

Definition at line 250 of file span.hpp.