X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUON2DMapIterator.cxx;h=2bb027ec51110c7c0fd62ff4cc965d7fd99153fb;hb=c1d7cf8d81b67cf2d2617d0f75bbd43fd43b0450;hp=b6b3fc333df4f0d1482c7299b4edf11fdc4feef9;hpb=47a48067c48726e4b5cb58b4357a532177493eb7;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUON2DMapIterator.cxx b/MUON/AliMUON2DMapIterator.cxx index b6b3fc333df..2bb027ec511 100644 --- a/MUON/AliMUON2DMapIterator.cxx +++ b/MUON/AliMUON2DMapIterator.cxx @@ -27,63 +27,31 @@ //----------------------------------------------------------------------------- #include "AliMpExMap.h" +#include "AliMpExMapIterator.h" +#include "AliLog.h" /// \cond CLASSIMP ClassImp(AliMUON2DMapIterator) /// \endcond //_____________________________________________________________________________ -AliMUON2DMapIterator::AliMUON2DMapIterator(AliMpExMap* theMap) -: TIterator(), -fMap(theMap), -fCurrentMap(0x0), -fI(-1), -fJ(-1) +AliMUON2DMapIterator::AliMUON2DMapIterator(const AliMpExMap& theMap) +: TIterator(), +fkMap(&theMap), +fIter1(theMap.CreateIterator()), +fIter2(NextIterator()) { /// default ctor Reset(); } -//_____________________________________________________________________________ -AliMUON2DMapIterator::AliMUON2DMapIterator(const AliMUON2DMapIterator& rhs) -: TIterator(rhs), -fMap(rhs.fMap), -fCurrentMap(rhs.fCurrentMap), -fI(rhs.fI), -fJ(rhs.fI) -{ - /// copy ctor -} - //_____________________________________________________________________________ AliMUON2DMapIterator& -AliMUON2DMapIterator::operator=(const AliMUON2DMapIterator& rhs) -{ - /// assignment operator - if ( this != &rhs ) - { - fMap = rhs.fMap; - fCurrentMap = rhs.fCurrentMap; - fI = rhs.fI; - fJ = rhs.fJ; - } - return *this; -} - -//_____________________________________________________________________________ -TIterator& -AliMUON2DMapIterator::operator=(const TIterator& rhs) +AliMUON2DMapIterator::operator=(const TIterator& /*rhs*/) { - /// overriden operator= (imposed by Root's definition of TIterator::operator= ?) + // overriden operator= (imposed by Root's definition of TIterator::operator= ?) - if ( this != &rhs && rhs.IsA() == AliMUON2DMapIterator::Class() ) - { - const AliMUON2DMapIterator& rhs1 = static_cast(rhs); - fMap = rhs1.fMap; - fCurrentMap = rhs1.fCurrentMap; - fI = rhs1.fI; - fJ = rhs1.fJ; - } + AliFatalGeneral("operator=(TIterator&)",""); // as in copy ctor return *this; } @@ -91,6 +59,8 @@ AliMUON2DMapIterator::operator=(const TIterator& rhs) AliMUON2DMapIterator::~AliMUON2DMapIterator() { /// dtor + delete fIter1; + delete fIter2; } //_____________________________________________________________________________ @@ -102,11 +72,16 @@ AliMUON2DMapIterator::GetCollection() const } //_____________________________________________________________________________ -AliMpExMap* -AliMUON2DMapIterator::Map(Int_t i) const +TIterator* +AliMUON2DMapIterator::NextIterator() { - /// Get the map at a given index - return static_cast(fMap->GetObjectFast(i)); + /// Get next map (from fIter1) and create an iterator to it + + AliMpExMap* m = static_cast(fIter1->Next()); + + if (!m) return 0x0; + + return m->CreateIterator(); } //_____________________________________________________________________________ @@ -115,25 +90,18 @@ AliMUON2DMapIterator::Next() { /// return next object - if (!fCurrentMap) return 0x0; - - ++fJ; + if (!fIter2) return 0x0; + + TObject* o = fIter2->Next(); - if ( fJ < fCurrentMap->GetSize() ) + if (!o) { - return fCurrentMap->GetObjectFast(fJ); - } - else - { - ++fI; - if ( fI < fMap->GetSize() ) - { - fCurrentMap = Map(fI); - fJ = -1; - return Next(); - } - return 0x0; + delete fIter2; + fIter2 = NextIterator(); + return Next(); } + + return o; } //_____________________________________________________________________________ @@ -141,15 +109,9 @@ void AliMUON2DMapIterator::Reset() { /// rewind the iterator - fI = -1; - fJ = -1; - fCurrentMap = 0x0; - if ( fMap->GetSize() > 0 ) - { - fI = 0; - fCurrentMap = Map(fI); - fJ = -1; - } + delete fIter2; + fIter1->Reset(); + fIter2 = NextIterator(); }