00001 #ifndef DCHAIN_MUTEWHOLECANDIDATEITR_H 00002 #define DCHAIN_MUTEWHOLECANDIDATEITR_H 00003 // -*- C++ -*- 00004 // 00005 // Package: DChain 00006 // Module: MuteWholeCandidateItr 00007 // 00008 // Description: Iterator through a entire LabeledList. 00009 // 00010 // Usage: 00011 // <usage> 00012 // 00013 // Author: Simon Patton 00014 // Created: Wed Sep 11 21:51:25 EDT 1996 00015 // $Id: MuteWholeCandidateItr.h,v 1.1.1.1 2009/03/03 06:06:56 maqm Exp $ 00016 // 00017 // Revision history 00018 // 00019 // $Log: MuteWholeCandidateItr.h,v $ 00020 // Revision 1.1.1.1 2009/03/03 06:06:56 maqm 00021 // first import of DecayChain 00022 // 00023 // Revision 1.1 2006/01/11 20:28:17 cdj 00024 // massive class renaming, addition of [] for selection and unit tests 00025 // 00026 // 00027 00028 // system include files 00029 00030 // user include files 00031 #include "DecayChain/Iterator/candidateitr.h" // distance 00032 #include "DecayChain/Element/LabeledCandidate.h" 00033 //#include "DecayChain/List/IndexedLabeledCandidates.h" 00034 00035 // forward declarations 00036 namespace dchain { 00037 00038 template < class CandidateClass > class IndexedLabeledCandidates ; 00039 template < class CandidateClass> class LabeledCandidate ; 00040 template < class CandidateClass > class LabeledCandidateList ; 00041 00042 template < class CandidateClass > 00043 class MuteWholeCandidateItr 00044 { 00045 // friend classses and functions 00046 friend class LabeledCandidateList< CandidateClass > ; 00047 00048 public: 00049 // constants, enums and typedefs 00050 typedef const LabeledCandidate<CandidateClass> value_type; 00051 typedef candidateitr::size_type distance_type; 00052 typedef candidateitr::size_type size_type; 00053 typedef candidateitr::difference_type difference_type; 00054 typedef std::random_access_iterator_tag iterator_category; 00055 typedef const LabeledCandidate<CandidateClass>* pointer; 00056 typedef const LabeledCandidate<CandidateClass>& reference; 00057 00058 // Constructors and destructor 00059 MuteWholeCandidateItr( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) ; 00060 virtual ~MuteWholeCandidateItr() {} 00061 00062 // assignment operator(s) 00063 const MuteWholeCandidateItr< CandidateClass >& operator=( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) ; 00064 00065 // member functions 00066 MuteWholeCandidateItr< CandidateClass >& operator++() ; 00067 MuteWholeCandidateItr< CandidateClass > operator++( int ) ; 00068 MuteWholeCandidateItr< CandidateClass >& operator--() ; 00069 MuteWholeCandidateItr< CandidateClass > operator--( int ) ; 00070 MuteWholeCandidateItr< CandidateClass >& operator+=( difference_type n ) ; 00071 MuteWholeCandidateItr< CandidateClass > operator+( difference_type n ) ; 00072 MuteWholeCandidateItr< CandidateClass >& operator-=( difference_type n ) ; 00073 MuteWholeCandidateItr< CandidateClass > operator-( difference_type n ) ; 00074 00075 // const member functions 00076 LabeledCandidate< CandidateClass >& operator*() const ; 00077 LabeledCandidate< CandidateClass >& operator[]( size_type n ) const ; 00078 difference_type operator-( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const ; 00079 bool operator==( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const ; 00080 bool operator!=( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const ; 00081 bool operator<( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const ; 00082 bool operator>( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const ; 00083 bool operator>=( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const ; 00084 bool operator<=( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const ; 00085 00086 // static member functions 00087 00088 protected: 00089 // Constructors and destructor 00090 MuteWholeCandidateItr( IndexedLabeledCandidates< CandidateClass >* aList , 00091 const size_type aIndex ) ; 00092 00093 // protected member functions 00094 00095 // protected const member functions 00096 IndexedLabeledCandidates< CandidateClass >* indexedCandidates() const ; 00097 size_type index() const ; 00098 00099 private: 00100 // Constructors and destructor 00101 MuteWholeCandidateItr() ; // stop default 00102 00103 // private member functions 00104 00105 // private const member functions 00106 00107 // data members 00108 IndexedLabeledCandidates< CandidateClass >* m_indexedCandidates ; 00109 size_type m_index ; 00110 00111 // static data members 00112 00113 } ; 00114 00115 template < class CandidateClass > 00116 LabeledCandidate< CandidateClass >* value_type( const MuteWholeCandidateItr< CandidateClass >& ) ; 00117 00118 // inline function definitions 00119 00120 // user include files 00121 00122 // 00123 // forward definitions of inline functions 00124 // 00125 00126 template < class CandidateClass > 00127 inline 00128 IndexedLabeledCandidates< CandidateClass >* MuteWholeCandidateItr< CandidateClass >::indexedCandidates() const 00129 { 00130 return ( m_indexedCandidates ) ; 00131 } 00132 00133 template < class CandidateClass > 00134 inline 00135 typename MuteWholeCandidateItr<CandidateClass>::size_type MuteWholeCandidateItr< CandidateClass >::index() const 00136 { 00137 return ( m_index ) ; 00138 } 00139 00140 // 00141 // constructors and destructor 00142 // 00143 00144 template < class CandidateClass > 00145 inline 00146 MuteWholeCandidateItr< CandidateClass >::MuteWholeCandidateItr( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) : 00147 m_indexedCandidates( aOtherItr.indexedCandidates() ) , 00148 m_index( aOtherItr.index() ) 00149 { 00150 } 00151 00152 template < class CandidateClass > 00153 inline 00154 MuteWholeCandidateItr< CandidateClass >::MuteWholeCandidateItr( IndexedLabeledCandidates< CandidateClass >* aList , 00155 const size_type aIndex ) : 00156 m_indexedCandidates( (IndexedLabeledCandidates< CandidateClass >*)aList ) , 00157 m_index( aIndex ) 00158 { 00159 } 00160 00161 // 00162 // assignment operators 00163 // 00164 00165 template < class CandidateClass > 00166 inline 00167 const MuteWholeCandidateItr< CandidateClass >& MuteWholeCandidateItr< CandidateClass >::operator=( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) 00168 { 00169 m_indexedCandidates = aOtherItr.indexedCandidates() ; 00170 m_index = aOtherItr.index() ; 00171 return ( *this ) ; 00172 } 00173 00174 // 00175 // member functions 00176 // 00177 00178 template < class CandidateClass > 00179 inline 00180 MuteWholeCandidateItr< CandidateClass >& MuteWholeCandidateItr< CandidateClass >::operator++() 00181 { 00182 ++m_index ; 00183 return ( *this ) ; 00184 } 00185 00186 template < class CandidateClass > 00187 inline 00188 MuteWholeCandidateItr< CandidateClass > MuteWholeCandidateItr< CandidateClass >::operator++( int ) 00189 { 00190 MuteWholeCandidateItr tmp( *this ) ; 00191 ++m_index ; 00192 return ( tmp ) ; 00193 } 00194 00195 template < class CandidateClass > 00196 inline 00197 MuteWholeCandidateItr< CandidateClass >& MuteWholeCandidateItr< CandidateClass >::operator--() 00198 { 00199 --m_index ; 00200 return ( *this ) ; 00201 } 00202 00203 template < class CandidateClass > 00204 inline 00205 MuteWholeCandidateItr< CandidateClass > MuteWholeCandidateItr< CandidateClass >::operator--( int ) 00206 { 00207 MuteWholeCandidateItr tmp( *this ) ; 00208 --m_index ; 00209 return ( tmp ) ; 00210 } 00211 00212 template < class CandidateClass > 00213 inline 00214 MuteWholeCandidateItr< CandidateClass >& MuteWholeCandidateItr< CandidateClass >::operator+=( difference_type n ) 00215 { 00216 m_index += n ; 00217 return( *this ) ; 00218 } 00219 00220 template < class CandidateClass > 00221 inline 00222 MuteWholeCandidateItr< CandidateClass > MuteWholeCandidateItr< CandidateClass >::operator+( difference_type n ) 00223 { 00224 MuteWholeCandidateItr tmp( *this ) ; 00225 return ( tmp += n ) ; 00226 } 00227 00228 template < class CandidateClass > 00229 inline 00230 MuteWholeCandidateItr< CandidateClass >& MuteWholeCandidateItr< CandidateClass >::operator-=( difference_type n ) 00231 { 00232 m_index -= n ; 00233 return( *this ) ; 00234 } 00235 00236 template < class CandidateClass > 00237 inline 00238 MuteWholeCandidateItr< CandidateClass > MuteWholeCandidateItr< CandidateClass >::operator-( difference_type n ) 00239 { 00240 MuteWholeCandidateItr tmp( *this ) ; 00241 return ( tmp -= n ) ; 00242 } 00243 00244 // 00245 // const member functions 00246 // 00247 00248 template < class CandidateClass > 00249 inline 00250 LabeledCandidate< CandidateClass >& MuteWholeCandidateItr< CandidateClass >::operator*() const 00251 { 00252 return ( (*m_indexedCandidates).labeledCandidateClass( m_index ) ) ; 00253 } 00254 00255 template < class CandidateClass > 00256 inline 00257 LabeledCandidate< CandidateClass >& MuteWholeCandidateItr< CandidateClass >::operator[]( size_type n ) const 00258 { 00259 return ( (*m_indexedCandidates).labeledCandidateClass( m_index + n ) ) ; 00260 } 00261 00262 template < class CandidateClass > 00263 inline 00264 typename MuteWholeCandidateItr<CandidateClass>::difference_type MuteWholeCandidateItr< CandidateClass >::operator-( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const 00265 { 00266 return ( m_index - aOtherItr.index() ) ; 00267 } 00268 00269 template < class CandidateClass > 00270 inline 00271 bool MuteWholeCandidateItr< CandidateClass >::operator==( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const 00272 { 00273 return ( ( m_index == aOtherItr.index() ) && 00274 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) ) ; 00275 } 00276 00277 template < class CandidateClass > 00278 inline 00279 bool MuteWholeCandidateItr< CandidateClass >::operator!=( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const 00280 { 00281 return ( ( m_index != aOtherItr.index() ) || 00282 ( m_indexedCandidates != aOtherItr.indexedCandidates() ) ) ; 00283 } 00284 00285 template < class CandidateClass > 00286 inline 00287 bool MuteWholeCandidateItr< CandidateClass >::operator<( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const 00288 { 00289 return ( ( m_index < aOtherItr.index() ) && 00290 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) ) ; 00291 } 00292 00293 template < class CandidateClass > 00294 inline 00295 bool MuteWholeCandidateItr< CandidateClass >::operator>( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const 00296 { 00297 return ( ( m_index > aOtherItr.index() ) && 00298 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) ) ; 00299 } 00300 00301 template < class CandidateClass > 00302 inline 00303 bool MuteWholeCandidateItr< CandidateClass >::operator>=( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const 00304 { 00305 return ( ( m_index >= aOtherItr.index() ) && 00306 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) ) ; 00307 } 00308 00309 template < class CandidateClass > 00310 inline 00311 bool MuteWholeCandidateItr< CandidateClass >::operator<=( const MuteWholeCandidateItr< CandidateClass >& aOtherItr ) const 00312 { 00313 return ( ( m_index <= aOtherItr.index() ) && 00314 ( m_indexedCandidates == aOtherItr.indexedCandidates() ) ) ; 00315 } 00316 00317 template < class CandidateClass > 00318 inline 00319 LabeledCandidate< CandidateClass >* value_type( const MuteWholeCandidateItr< CandidateClass >& ) 00320 { 00321 return ( (CandidateClass*)0 ) ; 00322 } 00323 00324 } 00325 00326 #endif /* DCHAIN_MUTEWHOLECANDIDATEITR_H */