HerdSoftware  0.1.1
Public Types | Public Member Functions | Private Attributes | Friends | List of all members
Herd::ArrayForwarder< _Tp, _Nm > Class Template Reference

A forwarder class for std::array. More...

#include <common/ArrayForwarder.h>

Public Types

typedef _Tp value_type
 
typedef value_typepointer
 
typedef const value_typeconst_pointer
 
typedef value_typereference
 
typedef const value_typeconst_reference
 
typedef value_typeiterator
 
typedef const value_typeconst_iterator
 
typedef std::size_t size_type
 
typedef std::ptrdiff_t difference_type
 
typedef std::reverse_iterator< iteratorreverse_iterator
 
typedef std::reverse_iterator< const_iteratorconst_reverse_iterator
 

Public Member Functions

 ArrayForwarder ()
 
 ArrayForwarder (std::array< _Tp, _Nm > arr)
 
void fill (const value_type &__u)
 
void swap (ArrayForwarder &__other) noexcept(noexcept(std::swap(std::declval< _Tp &>(), std::declval< _Tp &>())))
 
_GLIBCXX17_CONSTEXPR iterator begin () noexcept
 
_GLIBCXX17_CONSTEXPR const_iterator begin () const noexcept
 
_GLIBCXX17_CONSTEXPR iterator end () noexcept
 
_GLIBCXX17_CONSTEXPR const_iterator end () const noexcept
 
_GLIBCXX17_CONSTEXPR reverse_iterator rbegin () noexcept
 
_GLIBCXX17_CONSTEXPR const_reverse_iterator rbegin () const noexcept
 
_GLIBCXX17_CONSTEXPR reverse_iterator rend () noexcept
 
_GLIBCXX17_CONSTEXPR const_reverse_iterator rend () const noexcept
 
_GLIBCXX17_CONSTEXPR const_iterator cbegin () const noexcept
 
_GLIBCXX17_CONSTEXPR const_iterator cend () const noexcept
 
_GLIBCXX17_CONSTEXPR const_reverse_iterator crbegin () const noexcept
 
_GLIBCXX17_CONSTEXPR const_reverse_iterator crend () const noexcept
 
constexpr size_type size () const noexcept
 
constexpr size_type max_size () const noexcept
 
constexpr bool empty () const noexcept
 
_GLIBCXX17_CONSTEXPR reference operator[] (size_type __n) noexcept
 
constexpr const_reference operator[] (size_type __n) const noexcept
 
_GLIBCXX17_CONSTEXPR reference at (size_type __n)
 
constexpr const_reference at (size_type __n) const
 
_GLIBCXX17_CONSTEXPR reference front () noexcept
 
constexpr const_reference front () const noexcept
 
_GLIBCXX17_CONSTEXPR reference back () noexcept
 
constexpr const_reference back () const noexcept
 
_GLIBCXX17_CONSTEXPR pointer data () noexcept
 
_GLIBCXX17_CONSTEXPR const_pointer data () const noexcept
 

Private Attributes

std::array< _Tp, _Nm > _content
 

Friends

bool operator== (const ArrayForwarder< _Tp, _Nm > &, const ArrayForwarder< _Tp, _Nm > &)
 
bool operator!= (const ArrayForwarder< _Tp, _Nm > &__one, const ArrayForwarder< _Tp, _Nm > &__two)
 
bool operator< (const ArrayForwarder< _Tp, _Nm > &__a, const ArrayForwarder< _Tp, _Nm > &__b)
 
bool operator> (const ArrayForwarder< _Tp, _Nm > &__one, const ArrayForwarder< _Tp, _Nm > &__two)
 
bool operator<= (const ArrayForwarder< _Tp, _Nm > &__one, const ArrayForwarder< _Tp, _Nm > &__two)
 
bool operator>= (const ArrayForwarder< _Tp, _Nm > &__one, const ArrayForwarder< _Tp, _Nm > &__two)
 

Detailed Description

template<typename _Tp, std::size_t _Nm>
class Herd::ArrayForwarder< _Tp, _Nm >

A forwarder class for std::array.

std::array persistence in Root is treated in a way that makes classes deriving from it unsuitable for automatic dictionary generation, due to rootcling not generating the dictionary for the std::array base class. More information are available on the Root forum and bug tracker:

https://root-forum.cern.ch/t/cant-generate-dictionary-for-std-array-containing-a-custom-class/32592 https://sft.its.cern.ch/jira/browse/ROOT-9943

Until a proper fix is implemented in Root, the workaround is to define a class that implements the interface of std::array by forwarding all the calls to a private std::array member, and inherit from this forwarder class. In this way std::array is no longer a base class and there's no need to generate a dictionary for it, making rootcling happy again.

The declaration of ArrayForwarder is adapted from a copy-paste of std::array shipped with gcc 8.2.1.

Member Typedef Documentation

◆ const_iterator

template<typename _Tp, std::size_t _Nm>
typedef const value_type* Herd::ArrayForwarder< _Tp, _Nm >::const_iterator

◆ const_pointer

template<typename _Tp, std::size_t _Nm>
typedef const value_type* Herd::ArrayForwarder< _Tp, _Nm >::const_pointer

◆ const_reference

template<typename _Tp, std::size_t _Nm>
typedef const value_type& Herd::ArrayForwarder< _Tp, _Nm >::const_reference

◆ const_reverse_iterator

template<typename _Tp, std::size_t _Nm>
typedef std::reverse_iterator<const_iterator> Herd::ArrayForwarder< _Tp, _Nm >::const_reverse_iterator

◆ difference_type

template<typename _Tp, std::size_t _Nm>
typedef std::ptrdiff_t Herd::ArrayForwarder< _Tp, _Nm >::difference_type

◆ iterator

template<typename _Tp, std::size_t _Nm>
typedef value_type* Herd::ArrayForwarder< _Tp, _Nm >::iterator

◆ pointer

template<typename _Tp, std::size_t _Nm>
typedef value_type* Herd::ArrayForwarder< _Tp, _Nm >::pointer

◆ reference

template<typename _Tp, std::size_t _Nm>
typedef value_type& Herd::ArrayForwarder< _Tp, _Nm >::reference

◆ reverse_iterator

template<typename _Tp, std::size_t _Nm>
typedef std::reverse_iterator<iterator> Herd::ArrayForwarder< _Tp, _Nm >::reverse_iterator

◆ size_type

template<typename _Tp, std::size_t _Nm>
typedef std::size_t Herd::ArrayForwarder< _Tp, _Nm >::size_type

◆ value_type

template<typename _Tp, std::size_t _Nm>
typedef _Tp Herd::ArrayForwarder< _Tp, _Nm >::value_type

Constructor & Destructor Documentation

◆ ArrayForwarder() [1/2]

template<typename _Tp, std::size_t _Nm>
Herd::ArrayForwarder< _Tp, _Nm >::ArrayForwarder ( )
inline

◆ ArrayForwarder() [2/2]

template<typename _Tp, std::size_t _Nm>
Herd::ArrayForwarder< _Tp, _Nm >::ArrayForwarder ( std::array< _Tp, _Nm >  arr)
inline

Member Function Documentation

◆ at() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR reference Herd::ArrayForwarder< _Tp, _Nm >::at ( size_type  __n)
inline

◆ at() [2/2]

template<typename _Tp, std::size_t _Nm>
constexpr const_reference Herd::ArrayForwarder< _Tp, _Nm >::at ( size_type  __n) const
inline

◆ back() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR reference Herd::ArrayForwarder< _Tp, _Nm >::back ( )
inlinenoexcept

◆ back() [2/2]

template<typename _Tp, std::size_t _Nm>
constexpr const_reference Herd::ArrayForwarder< _Tp, _Nm >::back ( ) const
inlinenoexcept

◆ begin() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR iterator Herd::ArrayForwarder< _Tp, _Nm >::begin ( )
inlinenoexcept

◆ begin() [2/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_iterator Herd::ArrayForwarder< _Tp, _Nm >::begin ( ) const
inlinenoexcept

◆ cbegin()

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_iterator Herd::ArrayForwarder< _Tp, _Nm >::cbegin ( ) const
inlinenoexcept

◆ cend()

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_iterator Herd::ArrayForwarder< _Tp, _Nm >::cend ( ) const
inlinenoexcept

◆ crbegin()

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_reverse_iterator Herd::ArrayForwarder< _Tp, _Nm >::crbegin ( ) const
inlinenoexcept

◆ crend()

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_reverse_iterator Herd::ArrayForwarder< _Tp, _Nm >::crend ( ) const
inlinenoexcept

◆ data() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR pointer Herd::ArrayForwarder< _Tp, _Nm >::data ( )
inlinenoexcept

◆ data() [2/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_pointer Herd::ArrayForwarder< _Tp, _Nm >::data ( ) const
inlinenoexcept

◆ empty()

template<typename _Tp, std::size_t _Nm>
constexpr bool Herd::ArrayForwarder< _Tp, _Nm >::empty ( ) const
inlinenoexcept

◆ end() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR iterator Herd::ArrayForwarder< _Tp, _Nm >::end ( )
inlinenoexcept

◆ end() [2/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_iterator Herd::ArrayForwarder< _Tp, _Nm >::end ( ) const
inlinenoexcept

◆ fill()

template<typename _Tp, std::size_t _Nm>
void Herd::ArrayForwarder< _Tp, _Nm >::fill ( const value_type __u)
inline

◆ front() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR reference Herd::ArrayForwarder< _Tp, _Nm >::front ( )
inlinenoexcept

◆ front() [2/2]

template<typename _Tp, std::size_t _Nm>
constexpr const_reference Herd::ArrayForwarder< _Tp, _Nm >::front ( ) const
inlinenoexcept

◆ max_size()

template<typename _Tp, std::size_t _Nm>
constexpr size_type Herd::ArrayForwarder< _Tp, _Nm >::max_size ( ) const
inlinenoexcept

◆ operator[]() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR reference Herd::ArrayForwarder< _Tp, _Nm >::operator[] ( size_type  __n)
inlinenoexcept

◆ operator[]() [2/2]

template<typename _Tp, std::size_t _Nm>
constexpr const_reference Herd::ArrayForwarder< _Tp, _Nm >::operator[] ( size_type  __n) const
inlinenoexcept

◆ rbegin() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR reverse_iterator Herd::ArrayForwarder< _Tp, _Nm >::rbegin ( )
inlinenoexcept

◆ rbegin() [2/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_reverse_iterator Herd::ArrayForwarder< _Tp, _Nm >::rbegin ( ) const
inlinenoexcept

◆ rend() [1/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR reverse_iterator Herd::ArrayForwarder< _Tp, _Nm >::rend ( )
inlinenoexcept

◆ rend() [2/2]

template<typename _Tp, std::size_t _Nm>
_GLIBCXX17_CONSTEXPR const_reverse_iterator Herd::ArrayForwarder< _Tp, _Nm >::rend ( ) const
inlinenoexcept

◆ size()

template<typename _Tp, std::size_t _Nm>
constexpr size_type Herd::ArrayForwarder< _Tp, _Nm >::size ( ) const
inlinenoexcept

◆ swap()

template<typename _Tp, std::size_t _Nm>
void Herd::ArrayForwarder< _Tp, _Nm >::swap ( ArrayForwarder< _Tp, _Nm > &  __other)
inlinenoexcept

Friends And Related Function Documentation

◆ operator!=

template<typename _Tp, std::size_t _Nm>
bool operator!= ( const ArrayForwarder< _Tp, _Nm > &  __one,
const ArrayForwarder< _Tp, _Nm > &  __two 
)
friend

◆ operator<

template<typename _Tp, std::size_t _Nm>
bool operator< ( const ArrayForwarder< _Tp, _Nm > &  __a,
const ArrayForwarder< _Tp, _Nm > &  __b 
)
friend

◆ operator<=

template<typename _Tp, std::size_t _Nm>
bool operator<= ( const ArrayForwarder< _Tp, _Nm > &  __one,
const ArrayForwarder< _Tp, _Nm > &  __two 
)
friend

◆ operator==

template<typename _Tp, std::size_t _Nm>
bool operator== ( const ArrayForwarder< _Tp, _Nm > &  __one,
const ArrayForwarder< _Tp, _Nm > &  __two 
)
friend

◆ operator>

template<typename _Tp, std::size_t _Nm>
bool operator> ( const ArrayForwarder< _Tp, _Nm > &  __one,
const ArrayForwarder< _Tp, _Nm > &  __two 
)
friend

◆ operator>=

template<typename _Tp, std::size_t _Nm>
bool operator>= ( const ArrayForwarder< _Tp, _Nm > &  __one,
const ArrayForwarder< _Tp, _Nm > &  __two 
)
friend

Member Data Documentation

◆ _content

template<typename _Tp, std::size_t _Nm>
std::array<_Tp, _Nm> Herd::ArrayForwarder< _Tp, _Nm >::_content
private

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