![]() |
![]() |
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