ATLAS Offline Software
Loading...
Searching...
No Matches
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 138 of file MultiRange.cxx.

139 :
140 m_range_it(multirange.m_ranges.begin()),
141 m_range_end(multirange.m_ranges.end()){
142 if (m_range_it == m_range_end)return; // no ranges
146 if (m_range_it != m_range_end) {
147 m_id_fac_it = ConstRangeIterator(*m_range_it).begin();
148 m_id_fac_end = ConstRangeIterator(*m_range_it).end();
150 // Set id
151 m_id = *m_id_fac_it;
152 }
153 }
154}
range_vector::const_iterator m_range_it
Definition MultiRange.h:46
range_vector::const_iterator m_range_end
Definition MultiRange.h:47
ConstRangeIterator m_id_fac_it
Definition MultiRange.h:44
ConstRangeIterator m_id_fac_end
Definition MultiRange.h:45
ExpandedIdentifier m_id
Definition MultiRange.h:43
range_vector m_ranges
Definition MultiRange.h:131

Member Function Documentation

◆ operator*()

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

Definition at line 178 of file MultiRange.cxx.

178 {
179 return (m_id);
180}

◆ operator++()

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

Definition at line 157 of file MultiRange.cxx.

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

◆ operator==()

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

Definition at line 183 of file MultiRange.cxx.

183 {
184 return (m_id == other.m_id);
185}

Member Data Documentation

◆ m_id

ExpandedIdentifier MultiRange::identifier_factory::m_id {}
private

Definition at line 43 of file MultiRange.h.

43{};

◆ m_id_fac_end

ConstRangeIterator MultiRange::identifier_factory::m_id_fac_end {}
private

Definition at line 45 of file MultiRange.h.

45{};

◆ m_id_fac_it

ConstRangeIterator MultiRange::identifier_factory::m_id_fac_it {}
private

Definition at line 44 of file MultiRange.h.

44{};

◆ m_id_vec_end

id_iterator MultiRange::identifier_factory::m_id_vec_end {}
private

Definition at line 49 of file MultiRange.h.

49{};

◆ m_id_vec_it

id_iterator MultiRange::identifier_factory::m_id_vec_it {}
private

Definition at line 48 of file MultiRange.h.

48{};

◆ m_range_end

range_vector::const_iterator MultiRange::identifier_factory::m_range_end {}
private

Definition at line 47 of file MultiRange.h.

47{};

◆ m_range_it

range_vector::const_iterator MultiRange::identifier_factory::m_range_it {}
private

Definition at line 46 of file MultiRange.h.

46{};

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