MARLEY (Model of Argon Reaction Low Energy Yields) v2.0.0
A Monte Carlo event generator for tens-of-MeV neutrino interactions
Loading...
Searching...
No Matches
marley::IteratorToPointerMember< It, R > Class Template Reference

Template class that creates an iterator to a class member based on an iterator to a pointer (either bare or smart) to the class object. More...

#include <IteratorToPointerMember.hh>

Public Types

typedef std::iterator_traits< It >::difference_type difference_type
 
typedef std::iterator_traits< It >::iterator_category iterator_category
 
typedef R * pointer
 
typedef R & reference
 
typedef std::remove_reference< decltype(*std::declval< T_pointer >())>::type T
 Type of the target of the pointer pointed to by the original iterator.
 
typedef std::iterator_traits< It >::value_type T_pointer
 Type of the pointer pointed to by the original iterator.
 
typedef R value_type
 

Public Member Functions

 IteratorToPointerMember (It from, R T::*memptr)
 Construction from an iterator and a pointer to member.
 
bool operator!= (const IteratorToPointerMember< It, R > &rhs) const
 
virtual reference operator* () const
 
IteratorToPointerMember operator+ (difference_type n) const
 
IteratorToPointerMemberoperator++ ()
 
IteratorToPointerMember operator++ (int)
 Postfix operator++ (dummy argument)
 
IteratorToPointerMemberoperator+= (difference_type n)
 
difference_type operator- (const IteratorToPointerMember< It, R > &rhs) const
 
IteratorToPointerMember operator- (difference_type n) const
 
IteratorToPointerMemberoperator-- ()
 
IteratorToPointerMember operator-- (int)
 Postfix operator-- (see note about the postfix operator++)
 
IteratorToPointerMemberoperator-= (difference_type n)
 
virtual pointer operator-> () const
 
bool operator== (const IteratorToPointerMember< It, R > &rhs) const
 
reference operator[] (difference_type n) const
 

Public Attributes

It m_it
 

Protected Attributes

value_type T::* m_memptr
 

Detailed Description

template<typename It, typename R>
class marley::IteratorToPointerMember< It, R >

Template class that creates an iterator to a class member based on an iterator to a pointer (either bare or smart) to the class object.

Ideally this class would inherit from marley::IteratorToMember and merely override the operator*() and operator->() functions, but such behavior doesn't appear to be currently possible (6/2016) using template classes.

Template Parameters
Ittype of the original iterator
Rtype of the member we want to point to

Definition at line 30 of file IteratorToPointerMember.hh.

Member Typedef Documentation

◆ difference_type

template<typename It, typename R>
typedef std::iterator_traits<It>::difference_type marley::IteratorToPointerMember< It, R >::difference_type

Definition at line 48 of file IteratorToPointerMember.hh.

◆ iterator_category

template<typename It, typename R>
typedef std::iterator_traits<It>::iterator_category marley::IteratorToPointerMember< It, R >::iterator_category

Definition at line 46 of file IteratorToPointerMember.hh.

◆ pointer

template<typename It, typename R>
typedef R* marley::IteratorToPointerMember< It, R >::pointer

Definition at line 50 of file IteratorToPointerMember.hh.

◆ reference

template<typename It, typename R>
typedef R& marley::IteratorToPointerMember< It, R >::reference

Definition at line 51 of file IteratorToPointerMember.hh.

◆ T

template<typename It, typename R>
typedef std::remove_reference<decltype(*std::declval<T_pointer>())>::type marley::IteratorToPointerMember< It, R >::T

Type of the target of the pointer pointed to by the original iterator.

We could have used std::remove_pointer<T_pointer>::type here as well, but that approach does not work with smart pointers (e.g., std::unique_ptr).

Definition at line 44 of file IteratorToPointerMember.hh.

◆ T_pointer

template<typename It, typename R>
typedef std::iterator_traits<It>::value_type marley::IteratorToPointerMember< It, R >::T_pointer

Type of the pointer pointed to by the original iterator.

Definition at line 38 of file IteratorToPointerMember.hh.

◆ value_type

template<typename It, typename R>
typedef R marley::IteratorToPointerMember< It, R >::value_type

Definition at line 49 of file IteratorToPointerMember.hh.

Constructor & Destructor Documentation

◆ IteratorToPointerMember()

template<typename It, typename R>
marley::IteratorToPointerMember< It, R >::IteratorToPointerMember ( It from,
R T::* memptr )
inline

Construction from an iterator and a pointer to member.

Parameters
fromIterator to the object
memptrPointer to the member of interest

Definition at line 56 of file IteratorToPointerMember.hh.

56 :
57 m_it(from), m_memptr(memptr){}
Template class that creates an iterator to a class member based on an iterator to a pointer (either b...

Referenced by operator++(), and operator--().

Member Function Documentation

◆ operator!=()

template<typename It, typename R>
bool marley::IteratorToPointerMember< It, R >::operator!= ( const IteratorToPointerMember< It, R > & rhs) const
inline

Definition at line 82 of file IteratorToPointerMember.hh.

83 { return m_it != rhs.m_it; }

◆ operator*()

template<typename It, typename R>
IteratorToPointerMember< It, R >::reference marley::IteratorToPointerMember< It, R >::operator* ( ) const
inlinevirtual

Definition at line 95 of file IteratorToPointerMember.hh.

96 { return (**m_it).*m_memptr; }

◆ operator+()

template<typename It, typename R>
IteratorToPointerMember< It, R > marley::IteratorToPointerMember< It, R >::operator+ ( difference_type n) const
inline

Definition at line 132 of file IteratorToPointerMember.hh.

133 { return IteratorToPointerMember<It, R>(m_it + n, m_memptr); }
IteratorToPointerMember(It from, R T::*memptr)
Construction from an iterator and a pointer to member.

◆ operator++() [1/2]

template<typename It, typename R>
IteratorToPointerMember< It, R > & marley::IteratorToPointerMember< It, R >::operator++ ( )
inline

Definition at line 111 of file IteratorToPointerMember.hh.

112 { ++m_it; return *this; }

◆ operator++() [2/2]

template<typename It, typename R>
IteratorToPointerMember< It, R > marley::IteratorToPointerMember< It, R >::operator++ ( int )
inline

Postfix operator++ (dummy argument)

Note
The standard behavior for this operator is to return the un-incremented value while incrementing the operand. See discussion here.

Definition at line 146 of file IteratorToPointerMember.hh.

147 {
149 ++m_it;
150 return result;
151 }

References IteratorToPointerMember().

◆ operator+=()

template<typename It, typename R>
IteratorToPointerMember< It, R > & marley::IteratorToPointerMember< It, R >::operator+= ( difference_type n)
inline

Definition at line 122 of file IteratorToPointerMember.hh.

123 { m_it += n; return *this; }

◆ operator-() [1/2]

template<typename It, typename R>
difference_type marley::IteratorToPointerMember< It, R >::operator- ( const IteratorToPointerMember< It, R > & rhs) const
inline

Definition at line 77 of file IteratorToPointerMember.hh.

78 { return m_it - rhs.m_it; }

◆ operator-() [2/2]

template<typename It, typename R>
IteratorToPointerMember< It, R > marley::IteratorToPointerMember< It, R >::operator- ( difference_type n) const
inline

Definition at line 137 of file IteratorToPointerMember.hh.

138 { return IteratorToPointerMember<It, R>(m_it - n, m_memptr); }

◆ operator--() [1/2]

template<typename It, typename R>
IteratorToPointerMember< It, R > & marley::IteratorToPointerMember< It, R >::operator-- ( )
inline

Definition at line 117 of file IteratorToPointerMember.hh.

118 { --m_it; return *this; }

◆ operator--() [2/2]

template<typename It, typename R>
IteratorToPointerMember< It, R > marley::IteratorToPointerMember< It, R >::operator-- ( int )
inline

Postfix operator-- (see note about the postfix operator++)

Definition at line 156 of file IteratorToPointerMember.hh.

157 {
159 --m_it;
160 return result;
161 }

References IteratorToPointerMember().

◆ operator-=()

template<typename It, typename R>
IteratorToPointerMember< It, R > & marley::IteratorToPointerMember< It, R >::operator-= ( difference_type n)
inline

Definition at line 127 of file IteratorToPointerMember.hh.

128 { m_it -= n; return *this; }

◆ operator->()

template<typename It, typename R>
IteratorToPointerMember< It, R >::pointer marley::IteratorToPointerMember< It, R >::operator-> ( ) const
inlinevirtual

Definition at line 100 of file IteratorToPointerMember.hh.

101 { return &((**m_it).*m_memptr); }

◆ operator==()

template<typename It, typename R>
bool marley::IteratorToPointerMember< It, R >::operator== ( const IteratorToPointerMember< It, R > & rhs) const
inline

Definition at line 80 of file IteratorToPointerMember.hh.

81 { return m_it == rhs.m_it; }

◆ operator[]()

template<typename It, typename R>
IteratorToPointerMember< It, R >::reference marley::IteratorToPointerMember< It, R >::operator[] ( difference_type n) const
inline

Definition at line 105 of file IteratorToPointerMember.hh.

106 { return m_it[n].*m_memptr; }

Member Data Documentation

◆ m_it

template<typename It, typename R>
It marley::IteratorToPointerMember< It, R >::m_it

Definition at line 85 of file IteratorToPointerMember.hh.

◆ m_memptr

template<typename It, typename R>
value_type T::* marley::IteratorToPointerMember< It, R >::m_memptr
protected

Definition at line 88 of file IteratorToPointerMember.hh.


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