/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/DecayChain/DecayChain-00-00-03-slc6tag/DecayChain/Iterator/WholeCandidateItr.h

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

Generated on Tue Nov 29 22:58:22 2016 for BOSS_7.0.2 by  doxygen 1.4.7