ATLAS Offline Software
Public Member Functions | Private Types | Private Attributes | List of all members
MultiRange::identifier_factory Class Reference

This factory is able to generate all possible identifiers, from a
fully bounded Range. More...

#include <MultiRange.h>

Collaboration diagram for MultiRange::identifier_factory:

Public Member Functions

 identifier_factory ()=default
 
 identifier_factory (const MultiRange &multirange)
 
void operator++ ()
 
const ExpandedIdentifieroperator* () const
 
bool operator== (const identifier_factory &other) const
 

Private Types

using id_vec = std::vector< ExpandedIdentifier >
 
using id_iterator = id_vec::iterator
 
using id_const_iterator = id_vec::const_iterator
 

Private Attributes

ExpandedIdentifier m_id
 
ConstRangeIterator m_id_fac_it
 
ConstRangeIterator m_id_fac_end
 
range_vector::const_iterator m_range_it
 
range_vector::const_iterator m_range_end
 
id_iterator m_id_vec_it
 
id_iterator m_id_vec_end
 

Detailed Description

This factory is able to generate all possible identifiers, from a
fully bounded Range.

The precondition is that the Range used to parameterize the factory
must have all its fields completely bounded.

Definition at line 30 of file MultiRange.h.

Member Typedef Documentation

◆ id_const_iterator

using MultiRange::identifier_factory::id_const_iterator = id_vec::const_iterator
private

Definition at line 41 of file MultiRange.h.

◆ id_iterator

using MultiRange::identifier_factory::id_iterator = id_vec::iterator
private

Definition at line 40 of file MultiRange.h.

◆ id_vec

Definition at line 39 of file MultiRange.h.

Constructor & Destructor Documentation

◆ identifier_factory() [1/2]

MultiRange::identifier_factory::identifier_factory ( )
default

◆ identifier_factory() [2/2]

MultiRange::identifier_factory::identifier_factory ( const MultiRange multirange)

Set up iterators over ranges and ids.

Definition at line 136 of file MultiRange.cxx.

137  :
138  m_range_it(multirange.m_ranges.begin()),
139  m_range_end(multirange.m_ranges.end()){
140  if (m_range_it == m_range_end)return; // no ranges
144  if (m_range_it != m_range_end) {
145  m_id_fac_it = ConstRangeIterator(*m_range_it).begin();
146  m_id_fac_end = ConstRangeIterator(*m_range_it).end();
147  if(m_id_fac_it != m_id_fac_end) {
148  // Set id
149  m_id = *m_id_fac_it;
150  }
151  }
152 }

Member Function Documentation

◆ operator*()

const ExpandedIdentifier & MultiRange::identifier_factory::operator* ( ) const

Definition at line 176 of file MultiRange.cxx.

176  {
177  return (m_id);
178 }

◆ operator++()

void MultiRange::identifier_factory::operator++ ( )

Definition at line 155 of file MultiRange.cxx.

155  {
156  if (m_id.fields () == 0) return;
157  m_id.clear();
158  if (m_range_it != m_range_end) {
159  if (m_id_fac_it != m_id_fac_end) {
160  ++m_id_fac_it;
161  }
162  if (m_id_fac_it == m_id_fac_end) {
163  ++m_range_it;
164  if (m_range_it != m_range_end) {
165  m_id_fac_it = ConstRangeIterator(*m_range_it).begin();
166  m_id_fac_end = ConstRangeIterator(*m_range_it).end();
167  }
168  }
169  if (m_id_fac_it != m_id_fac_end) {
170  m_id = *m_id_fac_it;
171  }
172  }
173 }

◆ operator==()

bool MultiRange::identifier_factory::operator== ( const identifier_factory other) const

Definition at line 181 of file MultiRange.cxx.

181  {
182  return (m_id == other.m_id);
183 }

Member Data Documentation

◆ m_id

ExpandedIdentifier MultiRange::identifier_factory::m_id
private

Definition at line 43 of file MultiRange.h.

◆ m_id_fac_end

ConstRangeIterator MultiRange::identifier_factory::m_id_fac_end
private

Definition at line 45 of file MultiRange.h.

◆ m_id_fac_it

ConstRangeIterator MultiRange::identifier_factory::m_id_fac_it
private

Definition at line 44 of file MultiRange.h.

◆ m_id_vec_end

id_iterator MultiRange::identifier_factory::m_id_vec_end
private

Definition at line 49 of file MultiRange.h.

◆ m_id_vec_it

id_iterator MultiRange::identifier_factory::m_id_vec_it
private

Definition at line 48 of file MultiRange.h.

◆ m_range_end

range_vector::const_iterator MultiRange::identifier_factory::m_range_end
private

Definition at line 47 of file MultiRange.h.

◆ m_range_it

range_vector::const_iterator MultiRange::identifier_factory::m_range_it
private

Definition at line 46 of file MultiRange.h.


The documentation for this class was generated from the following files:
ConstRangeIterator
Definition: RangeIterator.h:46
MultiRange::identifier_factory::m_id_fac_end
ConstRangeIterator m_id_fac_end
Definition: MultiRange.h:45
ExpandedIdentifier::fields
size_type fields() const
MultiRange::identifier_factory::m_range_it
range_vector::const_iterator m_range_it
Definition: MultiRange.h:46
MultiRange::m_ranges
range_vector m_ranges
Definition: MultiRange.h:131
ConstRangeIterator::begin
ConstRangeIterator begin() const
Definition: RangeIterator.cxx:18
MultiRange::identifier_factory::m_id_fac_it
ConstRangeIterator m_id_fac_it
Definition: MultiRange.h:44
InDetDD::other
@ other
Definition: InDetDD_Defs.h:16
MultiRange::identifier_factory::m_range_end
range_vector::const_iterator m_range_end
Definition: MultiRange.h:47
ExpandedIdentifier::clear
void clear()
Erase all fields.
ConstRangeIterator::end
ConstRangeIterator end() const
Definition: RangeIterator.cxx:32
MultiRange::identifier_factory::m_id
ExpandedIdentifier m_id
Definition: MultiRange.h:43