1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 /// \class AliMUON2DMapIteratorByI
20 /// Implementation of TIterator for 2D maps
22 /// An implementation of TIterator for 2D maps, which can iterate
23 /// on a range of i values (i being the first element of the couple
24 /// (i,j) used to index values in the map).
26 /// \author Laurent Aphecetche
28 #include "AliMUON2DMapIteratorByI.h"
30 #include "AliMpExMap.h"
33 ClassImp(AliMUON2DMapIteratorByI)
36 //_____________________________________________________________________________
37 AliMUON2DMapIteratorByI::AliMUON2DMapIteratorByI(const AliMpExMap& theMap,
52 //_____________________________________________________________________________
53 AliMUON2DMapIteratorByI::AliMUON2DMapIteratorByI(const AliMUON2DMapIteratorByI& rhs)
57 fCurrentI(rhs.fCurrentI),
58 fCurrentJ(rhs.fCurrentJ),
63 if ( rhs.fIter2 ) fIter2 = new TExMapIter(*(rhs.fIter2));
66 //_____________________________________________________________________________
67 AliMUON2DMapIteratorByI&
68 AliMUON2DMapIteratorByI::operator=(const AliMUON2DMapIteratorByI& rhs)
70 /// assignment operator
75 if ( rhs.fIter2 ) fIter2 = new TExMapIter(*(rhs.fIter2));
76 fCurrentI = rhs.fCurrentI;
77 fCurrentJ = rhs.fCurrentJ;
78 fFirstI = rhs.fFirstI;
84 //_____________________________________________________________________________
86 AliMUON2DMapIteratorByI::operator=(const TIterator& rhs)
88 /// overriden assigment operator (imposed by Root's declaration of TIterator ?)
91 const AliMUON2DMapIteratorByI& rhs1 = static_cast<const AliMUON2DMapIteratorByI&>(rhs);
94 if ( rhs1.fIter2 ) fIter2 = new TExMapIter(*(rhs1.fIter2));
95 fCurrentI = rhs1.fCurrentI;
96 fCurrentJ = rhs1.fCurrentJ;
97 fFirstI = rhs1.fFirstI;
103 //_____________________________________________________________________________
104 AliMUON2DMapIteratorByI::~AliMUON2DMapIteratorByI()
110 //_____________________________________________________________________________
112 AliMUON2DMapIteratorByI::GetCollection() const
118 //_____________________________________________________________________________
120 AliMUON2DMapIteratorByI::GetValue(TExMapIter& iter, Int_t& theKey) const
122 /// return the value corresponding to theKey in iterator iter
125 Bool_t ok = iter.Next(key,value);
127 theKey = (Int_t)(key & 0xFFFF);
128 return reinterpret_cast<TObject*>(value);
131 //_____________________________________________________________________________
133 AliMUON2DMapIteratorByI::Next()
136 /// get TObject* from fIter2
137 /// if null, increment fIter2 by getting next map from fMap
139 if (!fIter2) return 0x0;
141 TObject* o = GetValue(*fIter2,fCurrentJ);
144 // fIter2 exhausted, try to get the next one
148 while ( !m && fCurrentI < fLastI )
151 m = static_cast<AliMpExMap*>(fMap->GetValue(fCurrentI));
153 if (!m) return 0x0; // we are done
154 fIter2 = new TExMapIter(m->GetIterator());
155 o = GetValue(*fIter2,fCurrentJ);
161 //_____________________________________________________________________________
163 AliMUON2DMapIteratorByI::Reset()
165 /// rewind the iterator
171 while ( !( m = static_cast<AliMpExMap*>(fMap->GetValue(fCurrentI) ) ) &&
179 fIter2 = new TExMapIter(m->GetIterator());