ATLAS Offline Software
NavigableVectorIterator.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef NAVIGATION_NAVIGABLEVECTORITERATOR_H
6 #define NAVIGATION_NAVIGABLEVECTORITERATOR_H
7 // iterator
10 
11 #include <vector>
12 
13 template< typename OBJCT, typename STORE >
15 {
16  public:
17 
18  typedef OBJCT object_type;
19  typedef STORE store_type;
20  typedef typename store_type::const_iterator store_const_iter;
21 
23  // Constuctors & Destructor //
25 
26  // default
28  // copy
29  // NavigableVectorIterator(NavigableVectorIterator& anIter)
30  // {
31  // m_storePtr = anIter.m_storePtr;
32  // m_actualIter = anIter.m_actualIter;
33  // }
34  // initial
36  : m_storePtr(aStore)
37  , m_actualIter(aStore->begin())
38  { };
39 
41  : m_storePtr(&aStore)
42  , m_actualIter(aStore.begin())
43  { }
44 
45  // destructor
46  virtual ~NavigableVectorIterator() = default;
47 
49  // Iterator Operations //
51 
52  // begin and end
54  {
55  m_actualIter = m_storePtr->begin();
56  return *this;
57  }
59  {
60  m_actualIter = m_storePtr->begin();
61  return *this;
62  }
63 
65  {
66  m_actualIter = m_storePtr->end();
67  return *this;
68  }
69 
71  {
72  m_actualIter = m_storePtr->end();
73  return *this;
74  }
75 
76  // iterator stepping
78  {
79  ++m_actualIter;
80  return *this;
81  }
83  {
84  ++m_actualIter;
85  return *this;
86  }
88  {
89  --m_actualIter;
90  return *this;
91  }
93  {
94  --m_actualIter;
95  return *this--;
96  }
97 
98  // data access operations
99  const object_type* operator[](int i)
100  {
101  return i >= 0 && i < m_storePtr->size()
102  ? (*m_storePtr)[i]
103  : 0;
104  }
105 
106  const object_type* operator[](unsigned int i)
107  {
108  return i < m_storePtr->size()
109  ? (*m_storePtr)[i]
110  : 0;
111  }
113  {
114  return *(*m_actualIter);
115  }
116 
117  // comparisons and finding
118  bool operator==(const NavigableVectorIterator& anIter) const
119  {
120  return m_actualIter == anIter.m_actualIter;
121  }
122  bool operator!=(const NavigableVectorIterator& anIter) const
123  {
124  return m_actualIter != anIter.m_actualIter;
125  }
127  {
128  bool found = false;
129  m_actualIter = m_storePtr->begin();
130  while ( ( ! found ) && m_actualIter != m_storePtr->end() )
131  {
132  found = *(*m_actualIter) == anObject;
133  if ( !found ) ++m_actualIter;
134  }
135  return *this;
136  }
137 
138  private:
139 
142 };
143 #endif
NavigableVectorIterator::operator--
NavigableVectorIterator & operator--(int)
Definition: NavigableVectorIterator.h:92
NavigableVectorIterator::operator++
NavigableVectorIterator operator++(int)
Definition: NavigableVectorIterator.h:82
NavigableVectorIterator::store_type
STORE store_type
Definition: NavigableVectorIterator.h:19
NavigableVectorIterator::operator!=
bool operator!=(const NavigableVectorIterator &anIter) const
Definition: NavigableVectorIterator.h:122
NavigableVectorIterator::NavigableVectorIterator
NavigableVectorIterator(const store_type *aStore)
Definition: NavigableVectorIterator.h:35
NavigableVectorIterator
Definition: NavigableVectorIterator.h:15
NavigableVectorIterator::~NavigableVectorIterator
virtual ~NavigableVectorIterator()=default
NavigableVectorIterator::find
NavigableVectorIterator & find(const object_type *anObject)
Definition: NavigableVectorIterator.h:126
NavigableVectorIterator::m_actualIter
store_const_iter m_actualIter
Definition: NavigableVectorIterator.h:141
NavigableVectorIterator::end
NavigableVectorIterator end() const
Definition: NavigableVectorIterator.h:70
NavigableVectorIterator::operator++
NavigableVectorIterator operator++()
Definition: NavigableVectorIterator.h:77
NavigableVectorIterator::end
NavigableVectorIterator end()
Definition: NavigableVectorIterator.h:64
lumiFormat.i
int i
Definition: lumiFormat.py:92
NavigableVectorIterator::store_const_iter
store_type::const_iterator store_const_iter
Definition: NavigableVectorIterator.h:20
NavigableVectorIterator::NavigableVectorIterator
NavigableVectorIterator()
Definition: NavigableVectorIterator.h:27
NavigableVectorIterator::NavigableVectorIterator
NavigableVectorIterator(const store_type &aStore)
Definition: NavigableVectorIterator.h:40
NavigableVectorIterator::m_storePtr
const store_type * m_storePtr
Definition: NavigableVectorIterator.h:140
NavigableVectorIterator::operator[]
const object_type * operator[](unsigned int i)
Definition: NavigableVectorIterator.h:106
NavigableVectorIterator::begin
NavigableVectorIterator begin() const
Definition: NavigableVectorIterator.h:58
NavigableVectorIterator::operator--
NavigableVectorIterator operator--()
Definition: NavigableVectorIterator.h:87
NavigableVectorIterator::object_type
OBJCT object_type
Definition: NavigableVectorIterator.h:18
NavigableVectorIterator::operator[]
const object_type * operator[](int i)
Definition: NavigableVectorIterator.h:99
NavigableVectorIterator::operator==
bool operator==(const NavigableVectorIterator &anIter) const
Definition: NavigableVectorIterator.h:118
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
NavigableVectorIterator::operator*
const object_type * operator*()
Definition: NavigableVectorIterator.h:112
NavigableVectorIterator::begin
NavigableVectorIterator begin()
Definition: NavigableVectorIterator.h:53