BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Event/DecayChain/include/DecayChain/Iterator/WholeCandidateItr.h
Go to the documentation of this file.
1#ifndef DCHAIN_WHOLECANDIDATEITR_H
2#define DCHAIN_WHOLECANDIDATEITR_H
3// -*- C++ -*-
4//
5// Package: DChain
6// Module: WholeCandidateItr
7//
8// Description: a const Iterator though whole of LabeledCandidateList
9//
10// Usage:
11// <usage>
12//
13// Author: Simon Patton
14// Created: Wed Sep 11 21:51:25 EDT 1996
15// $Id: WholeCandidateItr.h,v 1.1.1.1 2009/03/03 06:06:56 maqm Exp $
16//
17// Revision history
18//
19// $Log: WholeCandidateItr.h,v $
20// Revision 1.1.1.1 2009/03/03 06:06:56 maqm
21// first import of DecayChain
22//
23// Revision 1.1 2006/01/11 20:28:18 cdj
24// massive class renaming, addition of [] for selection and unit tests
25//
26//
27
28// system include files
29#include <iterator>
30
31// user include files
32#include "DecayChain/Element/LabeledCandidate.h"
33#include "DecayChain/Iterator/candidateitr.h" // distance
34#include "DecayChain/List/IndexedLabeledCandidates.h"
35
36// forward declarations
37// template < class CandidateClass > class IndexedLabeledCandidates ;
38namespace dchain {
39
40 // template < class CandidateClass > class LabeledCandidate ;
41 template <class CandidateClass> class LabeledCandidateList;
42
43 template <class CandidateClass> class WholeCandidateItr {
44 // friend classses and functions
45 friend class LabeledCandidateList<CandidateClass>;
46
47 public:
48 // constants, enums and typedefs
53 typedef std::random_access_iterator_tag iterator_category;
56
57 // Constructors and destructor
59 virtual ~WholeCandidateItr() {}
60
61 // assignment operator(s)
63
64 // member functions
73
74 // const member functions
78
79 bool operator==( const WholeCandidateItr<CandidateClass>& aOtherItr ) const;
80 bool operator!=( const WholeCandidateItr<CandidateClass>& aOtherItr ) const;
81 bool operator<( const WholeCandidateItr<CandidateClass>& aOtherItr ) const;
82 bool operator>( const WholeCandidateItr<CandidateClass>& aOtherItr ) const;
83 bool operator>=( const WholeCandidateItr<CandidateClass>& aOtherItr ) const;
84 bool operator<=( const WholeCandidateItr<CandidateClass>& aOtherItr ) const;
85
86 // static member functions
87
88 protected:
89 // Constructors and destructor
91 const size_type aIndex );
92
93 // protected member functions
94
95 // protected const member functions
98
99 private:
100 // Constructors and destructor
101 WholeCandidateItr(); // stop default
102
103 // private member functions
104
105 // private const member functions
106
107 // data members
108 IndexedLabeledCandidates<CandidateClass>* m_indexedCandidates;
109 size_type m_index;
110
111 // static data members
112 };
113
114 // inline function definitions
115
116 // user include files
117 //
118 // forward definitions of inline functions
119 //
120
121 template <class CandidateClass>
124 return ( m_indexedCandidates );
125 }
126
127 template <class CandidateClass>
130 return ( m_index );
131 }
132
133 //
134 // constructors and destructor
135 //
136
137 template <class CandidateClass>
139 const WholeCandidateItr<CandidateClass>& aOtherItr )
140 : m_indexedCandidates( aOtherItr.indexedCandidates() ), m_index( aOtherItr.index() ) {}
141
142 template <class CandidateClass>
144 const IndexedLabeledCandidates<CandidateClass>* aList, const size_type aIndex )
145 : // cast away const as const_itr can be assocciated with a non-const list,
146 // but only const lists use this constructor
147 m_indexedCandidates( (IndexedLabeledCandidates<CandidateClass>*)aList )
148 , m_index( aIndex ) {}
149
150 //
151 // assignment operators
152 //
153
154 template <class CandidateClass>
156 const WholeCandidateItr<CandidateClass>& aOtherItr ) {
157 m_indexedCandidates = aOtherItr.indexedCandidates();
158 m_index = aOtherItr.index();
159 return ( *this );
160 }
161
162 //
163 // member functions
164 //
165
166 template <class CandidateClass>
168 ++m_index;
169 return ( *this );
170 }
171
172 template <class CandidateClass>
175 WholeCandidateItr tmp( *this );
176 ++m_index;
177 return ( tmp );
178 }
179
180 template <class CandidateClass>
182 --m_index;
183 return ( *this );
184 }
185
186 template <class CandidateClass>
189 WholeCandidateItr tmp( *this );
190 --m_index;
191 return ( tmp );
192 }
193
194 template <class CandidateClass>
197 m_index += n;
198 return ( *this );
199 }
200
201 template <class CandidateClass>
204 WholeCandidateItr tmp( *this );
205 return ( tmp += n );
206 }
207
208 template <class CandidateClass>
211 m_index -= n;
212 return ( *this );
213 }
214
215 template <class CandidateClass>
218 WholeCandidateItr tmp( *this );
219 return ( tmp -= n );
220 }
221
222 //
223 // const member functions
224 //
225
226 template <class CandidateClass>
229 return ( ( *m_indexedCandidates ).labeledCandidateClass( m_index ) );
230 }
231
232 template <class CandidateClass>
235 return ( ( *m_indexedCandidates ).labeledCandidateClass( m_index + n ) );
236 }
237
238 template <class CandidateClass>
241 return ( m_index - aOtherItr.index() );
242 }
243
244 template <class CandidateClass>
245 inline bool
247 return ( ( m_index == aOtherItr.index() ) &&
248 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) );
249 }
250
251 template <class CandidateClass>
252 inline bool
254 return ( ( m_index != aOtherItr.index() ) ||
255 ( m_indexedCandidates != aOtherItr.indexedCandidates() ) );
256 }
257
258 template <class CandidateClass>
259 inline bool
261 return ( ( m_index < aOtherItr.index() ) &&
262 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) );
263 }
264
265 template <class CandidateClass>
266 inline bool
268 return ( ( m_index > aOtherItr.index() ) &&
269 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) );
270 }
271
272 template <class CandidateClass>
273 inline bool
275 return ( ( m_index >= aOtherItr.index() ) &&
276 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) );
277 }
278
279 template <class CandidateClass>
280 inline bool
282 return ( ( m_index <= aOtherItr.index() ) &&
283 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) );
284 }
285} // namespace dchain
286
287#endif /* DCHAIN_WHOLECANDIDATEITR_H */
const Int_t n
const LabeledCandidate< CandidateClass > & operator[](size_type n) const
WholeCandidateItr< CandidateClass > & operator+=(difference_type n)
const WholeCandidateItr & operator=(const WholeCandidateItr< CandidateClass > &aOtherItr)
bool operator>(const WholeCandidateItr< CandidateClass > &aOtherItr) const
bool operator<=(const WholeCandidateItr< CandidateClass > &aOtherItr) const
bool operator<(const WholeCandidateItr< CandidateClass > &aOtherItr) const
const LabeledCandidate< CandidateClass > & operator*() const
WholeCandidateItr(const IndexedLabeledCandidates< CandidateClass > *aList, const size_type aIndex)
bool operator!=(const WholeCandidateItr< CandidateClass > &aOtherItr) const
bool operator>=(const WholeCandidateItr< CandidateClass > &aOtherItr) const
IndexedLabeledCandidates< CandidateClass > * indexedCandidates() const
WholeCandidateItr(const WholeCandidateItr< CandidateClass > &aOtherItr)
bool operator==(const WholeCandidateItr< CandidateClass > &aOtherItr) const
WholeCandidateItr< CandidateClass > operator+(difference_type n)
difference_type operator-(const WholeCandidateItr< CandidateClass > &aOtherItr) const
WholeCandidateItr< CandidateClass > operator-(difference_type n)
WholeCandidateItr< CandidateClass > & operator-=(difference_type n)