LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
util::details::RangeForWrapperBox< RangeRef > Class Template Reference

Class offering begin/end iterators of the same type out of a range of iterators of different types. More...

#include "RangeForWrapper.h"

Classes

struct  DataBox
 

Public Types

using RangeRef_t = typename Traits_t::RangeRef_t
 
using Range_t = typename Traits_t::Range_t
 
using Iterator_t = typename Traits_t::Iterator_t
 Type of wrapper iterators (same for begin and end iterators). More...
 
using size_type = typename Traits_t::size_type
 Type of number of stored elements. More...
 
using difference_type = typename Traits_t::difference_type
 Type of difference between element positions. More...
 

Public Member Functions

 RangeForWrapperBox (Range_t &range)
 Constructor: references the specified range (lvalue reference). More...
 
 RangeForWrapperBox (Range_t &&range)
 Constructor: references the specified range (rvalue reference). More...
 
Iterator_t begin () const
 Returns a begin-of-range iterator. More...
 
Iterator_t end () const
 Returns a end-of-range iterator. More...
 
Reduced container interface.
auto size () const
 
bool empty () const
 
auto operator[] (difference_type index) const -> decltype(auto)
 

Private Types

using Traits_t = RangeForWrapperTraits< RangeRef >
 

Private Member Functions

auto wrappedBegin () const -> decltype(auto)
 
auto wrappedEnd () const -> decltype(auto)
 

Private Attributes

DataBox fRange
 A reference to the original range. More...
 

Detailed Description

template<typename RangeRef>
class util::details::RangeForWrapperBox< RangeRef >

Class offering begin/end iterators of the same type out of a range of iterators of different types.

Template Parameters
RangeReftype of reference to be stored (constantness embedded)

The class steals (moves) the value if RangeRef is a rvalue reference type, while it just references the original one otherwise.

Definition at line 283 of file RangeForWrapper.h.

Member Typedef Documentation

template<typename RangeRef >
using util::details::RangeForWrapperBox< RangeRef >::difference_type = typename Traits_t::difference_type

Type of difference between element positions.

Definition at line 303 of file RangeForWrapper.h.

template<typename RangeRef >
using util::details::RangeForWrapperBox< RangeRef >::Iterator_t = typename Traits_t::Iterator_t

Type of wrapper iterators (same for begin and end iterators).

Definition at line 297 of file RangeForWrapper.h.

template<typename RangeRef >
using util::details::RangeForWrapperBox< RangeRef >::Range_t = typename Traits_t::Range_t

Definition at line 294 of file RangeForWrapper.h.

template<typename RangeRef >
using util::details::RangeForWrapperBox< RangeRef >::RangeRef_t = typename Traits_t::RangeRef_t

Definition at line 293 of file RangeForWrapper.h.

template<typename RangeRef >
using util::details::RangeForWrapperBox< RangeRef >::size_type = typename Traits_t::size_type

Type of number of stored elements.

Definition at line 300 of file RangeForWrapper.h.

template<typename RangeRef >
using util::details::RangeForWrapperBox< RangeRef >::Traits_t = RangeForWrapperTraits<RangeRef>
private

Definition at line 288 of file RangeForWrapper.h.

Constructor & Destructor Documentation

template<typename RangeRef >
util::details::RangeForWrapperBox< RangeRef >::RangeForWrapperBox ( Range_t range)
inline

Constructor: references the specified range (lvalue reference).

Definition at line 306 of file RangeForWrapper.h.

307  : fRange(range)
308  {}
DataBox fRange
A reference to the original range.
template<typename RangeRef >
util::details::RangeForWrapperBox< RangeRef >::RangeForWrapperBox ( Range_t &&  range)
inline

Constructor: references the specified range (rvalue reference).

Definition at line 311 of file RangeForWrapper.h.

312  : fRange(std::move(range))
313  {}
DataBox fRange
A reference to the original range.

Member Function Documentation

template<typename RangeRef >
Iterator_t util::details::RangeForWrapperBox< RangeRef >::begin ( ) const
inline

Returns a begin-of-range iterator.

Definition at line 316 of file RangeForWrapper.h.

317  { return Iterator_t(wrappedBegin()); }
typename Traits_t::Iterator_t Iterator_t
Type of wrapper iterators (same for begin and end iterators).
auto wrappedBegin() const -> decltype(auto)
template<typename RangeRef >
bool util::details::RangeForWrapperBox< RangeRef >::empty ( ) const
inline

Definition at line 328 of file RangeForWrapper.h.

328 { return !(wrappedBegin() != wrappedEnd()); }
auto wrappedEnd() const -> decltype(auto)
auto wrappedBegin() const -> decltype(auto)
template<typename RangeRef >
Iterator_t util::details::RangeForWrapperBox< RangeRef >::end ( ) const
inline

Returns a end-of-range iterator.

Definition at line 320 of file RangeForWrapper.h.

321  { return Iterator_t(wrappedEnd()); }
auto wrappedEnd() const -> decltype(auto)
typename Traits_t::Iterator_t Iterator_t
Type of wrapper iterators (same for begin and end iterators).
template<typename RangeRef >
auto util::details::RangeForWrapperBox< RangeRef >::operator[] ( difference_type  index) const -> decltype(auto)
inline

Definition at line 330 of file RangeForWrapper.h.

331  { return wrappedBegin()[index]; }
auto wrappedBegin() const -> decltype(auto)
template<typename RangeRef >
auto util::details::RangeForWrapperBox< RangeRef >::size ( ) const
inline

Definition at line 326 of file RangeForWrapper.h.

References evd::details::begin(), and evd::details::end().

326 { return std::distance(begin(), end()); }
Iterator_t begin() const
Returns a begin-of-range iterator.
Iterator_t end() const
Returns a end-of-range iterator.
template<typename RangeRef >
auto util::details::RangeForWrapperBox< RangeRef >::wrappedBegin ( ) const -> decltype(auto)
inlineprivate

Definition at line 360 of file RangeForWrapper.h.

361  { return Traits_t::extractBegin(static_cast<RangeRef_t>(fRange)); }
DataBox fRange
A reference to the original range.
static auto extractBegin(RangeRef_t range)
Extractor of the begin iterator from a range.
template<typename RangeRef >
auto util::details::RangeForWrapperBox< RangeRef >::wrappedEnd ( ) const -> decltype(auto)
inlineprivate

Definition at line 362 of file RangeForWrapper.h.

363  { return Traits_t::extractEnd(static_cast<RangeRef_t>(fRange)); }
DataBox fRange
A reference to the original range.
static auto extractEnd(RangeRef_t range)
Extracts the end iterator from a range object.

Member Data Documentation

template<typename RangeRef >
DataBox util::details::RangeForWrapperBox< RangeRef >::fRange
private

A reference to the original range.

Definition at line 358 of file RangeForWrapper.h.


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