LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy > Class Template Reference

Base forward iterator browsing all cryostat IDs in the detector. More...

#include "id_iterators.h"

Classes

struct  GeometryIDIteratorTag
 

Public Types

using GeoID_t = typename upper_iterator::GeoID_t
 
using LocalID_t = LocalID
 type of the ID we change More...
 
using iterator = id_iterator_base< LocalID_t, GeoID_t, IterationPolicy >
 type of this iterator More...
 
Iterator traits
using difference_type = std::ptrdiff_t
 
using value_type = LocalID_t
 
using reference = value_type const &
 
using pointer = value_type const *
 
using iterator_category = std::forward_iterator_tag
 

Public Member Functions

 id_iterator_base ()=default
 Default constructor; effect not defined: assign to it before using! More...
 
 id_iterator_base (GeoID_t const &start_from, IterationPolicy itPolicy)
 Constructor: points to the specified element. More...
 
reference operator* () const
 Returns the element ID the iterator points to. More...
 
pointer operator-> () const
 
iteratoroperator++ ()
 Prefix increment: returns this iterator pointing to the next element. More...
 
iterator operator++ (int)
 Postfix increment: returns the current iterator, then increments it. More...
 
LocalID_t const & localID () const
 

Protected Member Functions

void next ()
 Skips to the next element. More...
 

Private Types

using upper_iterator = id_iterator_base< typename LocalID::ParentID_t, GEOID, IterationPolicy >
 
using ID_t = std::decay_t< decltype(std::declval< LocalID_t >().deepestIndex())>
 specific type for element ID More...
 

Private Member Functions

LocalID_tlocalID ()
 Returns the type of ID we act on. More...
 
ID_t const & local_index () const
 Returns the index (part if the ID) this iterator runs on. More...
 
ID_tlocal_index ()
 

Private Attributes

IterationPolicy policy
 
ID_t limit = LocalID_t::InvalidID
 maximum number of elements in the current cryostat More...
 

Detailed Description

template<typename LocalID, typename GEOID, typename IterationPolicy>
class geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >

Base forward iterator browsing all cryostat IDs in the detector.

Base forward iterator browsing all TPC IDs in the detector.

Template Parameters
GEOIDID type to be used

This iterator assumes that GEOID is derived from geo::CryostatID. Note that no polymorphic behaviour is required, or expected, from GEOID.

This iterator is designed to carry on, untouched, anything else that the GEOID type defines beyond the required CryostatID data.

Template Parameters
GEOIDID type to be used

This iterator requires that GEOID is derived from geo::TPCID. Note that no polymorphic behaviour is required, or expected, from GEOID.

This iterator is designed to carry on, untouched, anything else that the GEOID type defines beyond the required TPCID data.

Note
A number of "local" methods are overloaded: since there is no polymorphism here and they are not virtual functions, these are designed not to replace the inherited methods except within the non-inherited and explicitly redefined methods.

Definition at line 41 of file id_iterators.h.

Member Typedef Documentation

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::difference_type = std::ptrdiff_t

Definition at line 159 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::GeoID_t = typename upper_iterator::GeoID_t

Definition at line 149 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::ID_t = std::decay_t< decltype(std::declval<LocalID_t>().deepestIndex())>
private

specific type for element ID

Definition at line 219 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::iterator = id_iterator_base<LocalID_t, GeoID_t, IterationPolicy>

type of this iterator

Definition at line 155 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::iterator_category = std::forward_iterator_tag

Definition at line 163 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::LocalID_t = LocalID

type of the ID we change

Definition at line 151 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::pointer = value_type const*

Definition at line 162 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::reference = value_type const&

Definition at line 161 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::upper_iterator = id_iterator_base<typename LocalID::ParentID_t, GEOID, IterationPolicy>
private

Definition at line 145 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
using geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::value_type = LocalID_t

Definition at line 160 of file id_iterators.h.

Constructor & Destructor Documentation

template<typename LocalID, typename GEOID, typename IterationPolicy>
geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::id_iterator_base ( )
default

Default constructor; effect not defined: assign to it before using!

template<typename LocalID, typename GEOID, typename IterationPolicy>
geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::id_iterator_base ( GeoID_t const &  start_from,
IterationPolicy  itPolicy 
)
inline

Constructor: points to the specified element.

Definition at line 170 of file id_iterators.h.

171  : upper_iterator{start_from, itPolicy}, policy{itPolicy}, limit(policy.NSiblings(localID()))
172  {}
id_iterator_base< typename LocalID::ParentID_t, GEOID, IterationPolicy > upper_iterator
Definition: id_iterators.h:145
LocalID_t const & localID() const
Definition: id_iterators.h:193
ID_t limit
maximum number of elements in the current cryostat
Definition: id_iterators.h:222

Member Function Documentation

template<typename LocalID, typename GEOID, typename IterationPolicy>
ID_t const& geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::local_index ( ) const
inlineprivate

Returns the index (part if the ID) this iterator runs on.

Definition at line 228 of file id_iterators.h.

228 { return localID().deepestIndex(); }
LocalID_t const & localID() const
Definition: id_iterators.h:193
template<typename LocalID, typename GEOID, typename IterationPolicy>
ID_t& geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::local_index ( )
inlineprivate

Definition at line 229 of file id_iterators.h.

229 { return localID().deepestIndex(); }
LocalID_t const & localID() const
Definition: id_iterators.h:193
template<typename LocalID, typename GEOID, typename IterationPolicy>
LocalID_t const& geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::localID ( ) const
inline

Definition at line 193 of file id_iterators.h.

Referenced by geo::details::operator==().

193 { return upper_iterator::ID(); }
template<typename LocalID, typename GEOID, typename IterationPolicy>
LocalID_t& geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::localID ( )
inlineprivate

Returns the type of ID we act on.

Definition at line 225 of file id_iterators.h.

225 { return upper_iterator::ID(); }
template<typename LocalID, typename GEOID, typename IterationPolicy>
void geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::next ( )
inlineprotected

Skips to the next element.

Definition at line 197 of file id_iterators.h.

198  {
199  // if at end (checked in the inherited context), do nothing
200  if (upper_iterator::at_end()) return;
201 
202  // if after incrementing we haven't reached the limit, we are done
203  if (++local_index() < limit) return;
204 
205  // we reached the end of the current elements list, we need to escalate:
206  // - go to the next parent; if that becomes invalid, too bad, but we go on
208  // - set the index to the first element of the new parent
209  local_index() = 0;
210  // - update how many elements there are
211  // (expect 0 if it is now at_end() -- and it does not even matter)
212  limit = policy.NSiblings(localID());
213  }
LocalID_t const & localID() const
Definition: id_iterators.h:193
ID_t limit
maximum number of elements in the current cryostat
Definition: id_iterators.h:222
void next()
Skips to the next element.
Definition: id_iterators.h:197
ID_t const & local_index() const
Returns the index (part if the ID) this iterator runs on.
Definition: id_iterators.h:228
template<typename LocalID, typename GEOID, typename IterationPolicy>
reference geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::operator* ( ) const
inline

Returns the element ID the iterator points to.

Definition at line 175 of file id_iterators.h.

175 { return localID(); }
LocalID_t const & localID() const
Definition: id_iterators.h:193
template<typename LocalID, typename GEOID, typename IterationPolicy>
iterator& geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::operator++ ( )
inline

Prefix increment: returns this iterator pointing to the next element.

Definition at line 179 of file id_iterators.h.

180  {
181  next();
182  return *this;
183  }
void next()
Skips to the next element.
Definition: id_iterators.h:197
template<typename LocalID, typename GEOID, typename IterationPolicy>
iterator geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::operator++ ( int  )
inline

Postfix increment: returns the current iterator, then increments it.

Definition at line 186 of file id_iterators.h.

187  {
188  iterator old(*this);
189  next();
190  return old;
191  }
void next()
Skips to the next element.
Definition: id_iterators.h:197
template<typename LocalID, typename GEOID, typename IterationPolicy>
pointer geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::operator-> ( ) const
inline

Definition at line 176 of file id_iterators.h.

176 { return &localID(); }
LocalID_t const & localID() const
Definition: id_iterators.h:193

Member Data Documentation

template<typename LocalID, typename GEOID, typename IterationPolicy>
ID_t geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::limit = LocalID_t::InvalidID
private

maximum number of elements in the current cryostat

Definition at line 222 of file id_iterators.h.

template<typename LocalID, typename GEOID, typename IterationPolicy>
IterationPolicy geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::policy
private

Definition at line 216 of file id_iterators.h.


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