ATLAS Offline Software
Loading...
Searching...
No Matches
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
8// iterator
10
11#include <vector>
12
13template< 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 {
80 return *this;
81 }
83 {
85 return *this;
86 }
88 {
90 return *this;
91 }
93 {
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--(int)
const object_type * operator[](int i)
NavigableVectorIterator(const store_type &aStore)
NavigableVectorIterator begin() const
NavigableVectorIterator end()
bool operator==(const NavigableVectorIterator &anIter) const
NavigableVectorIterator & find(const object_type *anObject)
const object_type * operator*()
NavigableVectorIterator operator++(int)
NavigableVectorIterator end() const
NavigableVectorIterator operator--()
const object_type * operator[](unsigned int i)
bool operator!=(const NavigableVectorIterator &anIter) const
virtual ~NavigableVectorIterator()=default
NavigableVectorIterator operator++()
NavigableVectorIterator(const store_type *aStore)