CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DataFormats/Candidate/interface/const_iterator.h

Go to the documentation of this file.
00001 #ifndef Candidate_const_iterator_h
00002 #define Candidate_const_iterator_h
00003 /* \class reco::candidate::const_iterator
00004  *
00005  * \author Luca Lista, INFN
00006  *
00007  */
00008 #include "DataFormats/Candidate/interface/CandidateFwd.h"
00009 #include "DataFormats/Candidate/interface/const_iterator_imp.h"
00010 
00011 namespace reco {
00012   namespace candidate {
00013     struct iterator;
00014 
00015     struct const_iterator {
00016       typedef const Candidate value_type;
00017       typedef const Candidate * pointer;
00018       typedef const Candidate & reference;
00019       typedef ptrdiff_t difference_type;
00020       typedef std::vector<int>::const_iterator::iterator_category iterator_category;
00021       const_iterator() : i( 0 ) { }
00022       const_iterator( const_iterator_imp * it ) : i( it ) { }
00023       const_iterator( const const_iterator & it ) : i( it.i->clone() ) { }
00024       const_iterator( const iterator & it );
00025       ~const_iterator() { delete i; }
00026       const_iterator & operator=( const const_iterator & it ) { i->assign( it.i ); return *this; }
00027       const_iterator& operator++() { i->increase(); return *this; }
00028       const_iterator operator++( int ) { const_iterator ci = *this; i->increase(); return ci; }
00029       const_iterator& operator--() { i->decrease(); return *this; }
00030       const_iterator operator--( int ) { const_iterator ci = *this; i->decrease(); return ci; }
00031       difference_type operator-( const const_iterator & o ) const { return i->difference( o.i ); }
00032       const_iterator operator+( difference_type n ) const { 
00033         const_iterator_imp * ii = i->clone(); ii->increase( n );
00034         return const_iterator( ii ); 
00035       }
00036       const_iterator operator-( difference_type n ) const { 
00037         const_iterator_imp * ii = i->clone(); ii->decrease( n );
00038         return const_iterator( ii ); 
00039       }
00040       bool operator<( const const_iterator & o ) const { return i->less_than( o.i ); }
00041       bool operator==( const const_iterator& ci ) const { return i->equal_to( ci.i ); }
00042       bool operator!=( const const_iterator& ci ) const { return ! i->equal_to( ci.i ); }
00043       const Candidate & operator * () const { return i->deref(); }
00044       const Candidate * operator->() const { return & ( operator*() ); }
00045       const_iterator & operator +=( difference_type d ) { i->increase( d ); return *this; }
00046       const_iterator & operator -=( difference_type d ) { i->decrease( d ); return *this; }
00047 
00048     private:
00049       const_iterator_imp * i;
00050     };
00051   }
00052 }
00053 
00054 #endif