]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - MUON/AliMUON2DMapIteratorByI.cxx
In Mapping/macros:
[u/mrichter/AliRoot.git] / MUON / AliMUON2DMapIteratorByI.cxx
... / ...
CommitLineData
1/**************************************************************************
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16// $Id$
17
18//-----------------------------------------------------------------------------
19/// \class AliMUON2DMapIteratorByI
20///
21/// Implementation of TIterator for 2D maps
22///
23/// An implementation of TIterator for 2D maps, which can iterate
24/// on a range of i values (i being the first element of the couple
25/// (i,j) used to index values in the map).
26///
27/// \author Laurent Aphecetche
28//-----------------------------------------------------------------------------
29
30#include "AliMUON2DMapIteratorByI.h"
31#include "AliMpExMapIterator.h"
32#include "AliMpExMap.h"
33#include "AliLog.h"
34
35/// \cond CLASSIMP
36ClassImp(AliMUON2DMapIteratorByI)
37/// \endcond
38
39//_____________________________________________________________________________
40AliMUON2DMapIteratorByI::AliMUON2DMapIteratorByI(const AliMpExMap& theMap, Int_t firstI, Int_t lastI)
41: TIterator(),
42fkMap(&theMap),
43fIter1(theMap.CreateIterator()),
44fIter2(0x0),
45fFirstI(firstI),
46fLastI(lastI),
47fCurrentI(-1)
48{
49 /// default ctor
50 Reset();
51}
52
53//_____________________________________________________________________________
54AliMUON2DMapIteratorByI&
55AliMUON2DMapIteratorByI::operator=(const TIterator& /*rhs*/)
56{
57 // overriden operator= (imposed by Root's definition of TIterator::operator= ?)
58
59 AliFatalGeneral("operator=(TIterator&)",""); // as in copy ctor
60 return *this;
61}
62
63//_____________________________________________________________________________
64AliMUON2DMapIteratorByI::~AliMUON2DMapIteratorByI()
65{
66 /// dtor
67}
68
69//_____________________________________________________________________________
70const TCollection*
71AliMUON2DMapIteratorByI::GetCollection() const
72{
73 /// Return 0 as we're not really dealing with a Root TCollection...
74 return 0x0;
75}
76
77//_____________________________________________________________________________
78AliMpExMapIterator*
79AliMUON2DMapIteratorByI::NextIterator()
80{
81 /// Get next map (from fIter1) and create an iterator to it
82
83 AliMpExMap* m = static_cast<AliMpExMap*>(fIter1->Next(fCurrentI));
84
85 if (!m) return 0x0;
86
87 if ( fCurrentI < fFirstI || fCurrentI > fLastI ) return NextIterator(); // try again
88
89 return m->CreateIterator();
90}
91
92//_____________________________________________________________________________
93TObject*
94AliMUON2DMapIteratorByI::Next()
95{
96 /// return next object
97
98 if (!fIter2) return 0x0;
99
100 TObject* o = fIter2->Next();
101
102 if (!o)
103 {
104 fIter2 = NextIterator();
105 return Next();
106 }
107
108 return o;
109}
110
111//_____________________________________________________________________________
112void
113AliMUON2DMapIteratorByI::Reset()
114{
115 /// rewind the iterator
116
117 delete fIter2;
118 fIter1->Reset();
119 fIter2 = NextIterator();
120 fCurrentI = -1;
121}
122