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 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();
148 // Set id
149 m_id = *m_id_fac_it;
150 }
151 }
152}
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 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.

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: