/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/MdcPatRec/TrkBase/TrkBase-00-01-12/TrkBase/TrkRepIter.h

Go to the documentation of this file.
00001 #ifndef TRKREPITER_H
00002 #define TRKREPITER_H
00003 #include "boost/shared_ptr.hpp"
00004 #include <iterator>
00005 
00006 //FIXME: only works on Linux:    class TrkHitOnTrkIter : public std::iterator_traits<TrkHitOnTrk *>
00007 //FIXME: only works on Linux:    class TrkHitOnTrkIter : public std::random_access_iterator<const TrkHitOnTrk, ptrdiff_t>
00008 //FIXME: only works on SunOS58:  class TrkHitOnTrkIter : public std::iterator<std::random_access_iterator_tag,TrkHitOnTrk>
00009 //
00010 //
00011 //FIXME: new idea: give TrkRepIter a constructor which tells it 
00012 //                 to iterate either of all reps, or unique ones only
00013 //                 (i.e. give the iterator a memory of those reps it
00014 //                 has already seeni, or search the vector 'in front'
00015 //                 of the current position?)
00016 //                 Furthermore, give a reference to the TrkRecoTrk vector
00017 //                 of sharep pointers of reps...
00018 
00019 class TrkRep;
00020 
00021 class TrkRepIter
00022 {
00023 public:
00024         typedef std::random_access_iterator_tag  iterator_category;
00025         // typedef const TrkRep                     value_type;
00026         typedef TrkRep                           value_type;
00027         typedef ptrdiff_t                        difference_type;
00028         typedef value_type*                      pointer;
00029         typedef value_type&                      reference;
00030 
00031         TrkRepIter(const TrkRepIter& rhs) : _l(rhs._l),_i(rhs._i) {};
00032 
00033         pointer   get()        const { return (*_l)[_i]; }
00034         pointer   operator->() const { return get(); }
00035         reference operator*()  const { return *get(); }
00036 
00037         TrkRepIter& operator-=(int i) { _i-=i; return *this; }
00038         TrkRepIter& operator+=(int i) { _i+=i; return *this; }
00039         TrkRepIter& operator--()      { --_i; return *this; } // prefix --
00040         TrkRepIter& operator++()      { ++_i; return *this; } // prefix ++
00041 
00042         TrkRepIter  operator--(int)   { TrkRepIter x(*this); --_i; return x; } // postfix --
00043         TrkRepIter  operator++(int)   { TrkRepIter x(*this); ++_i; return x; } // postfix ++
00044 
00045 
00046         ptrdiff_t operator-(const TrkRepIter& i) const { return _i - i._i; }
00047         bool operator==(const TrkRepIter& i) const { return _l.get() == i._l.get()
00048                                                                 && _i == i._i; }
00049         bool operator!=(const TrkRepIter& i) const { return !operator==(i); }
00050 
00051 private:
00052         friend class TrkRecoTrk; // allow TrkRecoTrk to create TrkRepIters -- and nobody else!
00053         typedef std::vector<pointer> TRL;
00054         TrkRepIter(boost::shared_ptr<TRL> l,int i) : _l(l),_i(i) {};
00055 
00056         boost::shared_ptr< std::vector<pointer> > _l;
00057         unsigned _i;
00058 };
00059 #endif

Generated on Tue Nov 29 23:13:42 2016 for BOSS_7.0.2 by  doxygen 1.4.7