]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUON2DMapIterator.cxx
Change in CDB storage of Metadata
[u/mrichter/AliRoot.git] / MUON / AliMUON2DMapIterator.cxx
CommitLineData
f246123b 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#include "AliMUON2DMapIterator.h"
f246123b 19
20/// \class AliMUON2DMapIterator
cb6388d5 21/// Implementation of TIterator for 2Dmaps
f246123b 22///
23/// A simple implementation of VDataIterator for 2Dmaps.
24///
25/// \author Laurent Aphecetche
26
cb6388d5 27#include "AliMpExMap.h"
28
f246123b 29/// \cond CLASSIMP
30ClassImp(AliMUON2DMapIterator)
31/// \endcond
32
33//_____________________________________________________________________________
cb6388d5 34AliMUON2DMapIterator::AliMUON2DMapIterator(const AliMpExMap& theMap)
35: TIterator(),
f246123b 36fIter(theMap.GetIterator()),
37fIter2(0x0),
38fCurrentI(-1),
39fCurrentJ(-1)
40{
c4ee792d 41 /// default ctor
f246123b 42 Reset();
43}
44
cb6388d5 45//_____________________________________________________________________________
46AliMUON2DMapIterator::AliMUON2DMapIterator(const AliMUON2DMapIterator& rhs)
47: TIterator(rhs),
48fIter(rhs.fIter),
49fIter2(0x0),
50fCurrentI(rhs.fCurrentI),
51fCurrentJ(rhs.fCurrentJ)
52{
53 /// copy ctor
54 if ( rhs.fIter2 ) fIter2 = new TExMapIter(*rhs.fIter2);
55
56}
57//_____________________________________________________________________________
58AliMUON2DMapIterator&
59AliMUON2DMapIterator::operator=(const AliMUON2DMapIterator& rhs)
60{
61 /// assignment operator
62 if ( this != &rhs )
63 {
64 fIter = rhs.fIter;
65 fIter2 = 0x0;
66 if ( rhs.fIter2 ) fIter2 = new TExMapIter(*rhs.fIter2);
67 fCurrentI = rhs.fCurrentI;
68 fCurrentJ = rhs.fCurrentJ;
69 }
70 return *this;
71}
72
73//_____________________________________________________________________________
74TIterator&
75AliMUON2DMapIterator::operator=(const TIterator& rhs)
76{
77 /// overriden operator= (imposed by Root's definition of TIterator::operator= ?)
78
79 if ( this != &rhs && rhs.IsA() == AliMUON2DMapIterator::Class() )
80 {
81 const AliMUON2DMapIterator& rhs1 = static_cast<const AliMUON2DMapIterator&>(rhs);
82
83 fIter = rhs1.fIter;
84 fIter2 = 0x0;
85 if ( rhs1.fIter2 ) fIter2 = new TExMapIter(*rhs1.fIter2);
86 fCurrentI = rhs1.fCurrentI;
87 fCurrentJ = rhs1.fCurrentJ;
88 }
89 return *this;
90}
91
f246123b 92//_____________________________________________________________________________
93AliMUON2DMapIterator::~AliMUON2DMapIterator()
94{
c4ee792d 95 /// dtor
f246123b 96 delete fIter2;
97}
98
cb6388d5 99//_____________________________________________________________________________
100const TCollection*
101AliMUON2DMapIterator::GetCollection() const
102{
103 /// Return 0 as we're not really dealing with a Root TCollection...
104 return 0x0;
105}
106
f246123b 107//_____________________________________________________________________________
108TObject*
109AliMUON2DMapIterator::GetValue(TExMapIter& iter, Int_t& theKey) const
110{
c4ee792d 111 /// return the value corresponding to theKey in iterator iter
f246123b 112 theKey = -1;
113 Long_t key, value;
114 Bool_t ok = iter.Next(key,value);
115 if (!ok) return 0x0;
116 theKey = (Int_t)(key & 0xFFFF);
117 return reinterpret_cast<TObject*>(value);
118}
119
120//_____________________________________________________________________________
121AliMpExMap*
cb6388d5 122AliMUON2DMapIterator::GetMap(TExMapIter& iter, Int_t& key) const
f246123b 123{
c4ee792d 124 /// get the map corresponding to key
f246123b 125 AliMpExMap* rv(0x0);
126 TObject* o = GetValue(iter,key);
127 if (o)
128 {
129 rv = dynamic_cast<AliMpExMap*>(o);
f246123b 130 }
131 return rv;
132}
133
134//_____________________________________________________________________________
135TObject*
136AliMUON2DMapIterator::Next()
137{
c4ee792d 138 /// logic :
139 /// get TObject* from fIter2
140 /// if null, increment fIter2 by getting next on fIter
f246123b 141
142 if (!fIter2) return 0x0;
143
144 TObject* o = GetValue(*fIter2,fCurrentJ);
145 if (!o)
146 {
147 // fIter2 exhausted, try to get the next one
148 AliMpExMap* m = GetMap(fIter,fCurrentI);
149 if (!m)
150 {
151 // nothing left, we are done.
152 return 0x0;
153 }
154 delete fIter2;
155 fIter2 = new TExMapIter(m->GetIterator());
156 o = GetValue(*fIter2,fCurrentJ);
cb6388d5 157 }
158
159 return o;
f246123b 160}
161
162//_____________________________________________________________________________
163void
164AliMUON2DMapIterator::Reset()
165{
c4ee792d 166 /// rewind the iterator
f246123b 167 delete fIter2;
168 fIter.Reset();
169 AliMpExMap* m = GetMap(fIter,fCurrentI);
170 if (m)
171 {
172 fIter2 = new TExMapIter(m->GetIterator());
173 }
174}