Update HFE v2 analyses
[u/mrichter/AliRoot.git] / MUON / AliMUONStringIntMap.cxx
CommitLineData
d635d68e 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$
3d1463c8 17
18//-----------------------------------------------------------------------------
d635d68e 19// Class AliMUONStringIntMap
20// ------------------------------------
21// Helper class that substitutes map <string, int>
22// which ALICE does not allow to use
d635d68e 23// Author: Ivana Hrivnacova, IPN Orsay
3d1463c8 24//-----------------------------------------------------------------------------
d635d68e 25
26#include <Riostream.h>
27#include <TObjString.h>
28
29#include "AliMUONStringIntMap.h"
30#include "AliLog.h"
31
b80faac0 32using std::cout;
33using std::setw;
34using std::endl;
a9aad96e 35/// \cond CLASSIMP
d635d68e 36ClassImp(AliMUONStringIntMap)
a9aad96e 37/// \endcond
d635d68e 38
39//______________________________________________________________________________
40AliMUONStringIntMap::AliMUONStringIntMap()
41 : TObject(),
42 fNofItems(0),
43 fFirstArray(100),
3d775853 44 fSecondArray(100),
45 fCurrentIndex(0)
d635d68e 46{
47/// Standard constructor
48
49 fFirstArray.SetOwner(true);
50}
51
52//______________________________________________________________________________
d635d68e 53AliMUONStringIntMap::~AliMUONStringIntMap()
54{
55/// Destructor
56
57 fFirstArray.Delete();
58}
59
d635d68e 60//
61// public methods
62//
63
64//______________________________________________________________________________
65Bool_t AliMUONStringIntMap::Add(const TString& first, Int_t second)
66{
67/// Add map element if first not yet present
abca6eb2 68
d635d68e 69 Int_t second2 = Get(first);
70 if ( second2 > 0 ) {
71 AliError(Form("%s is already present in the map", first.Data()));
72 return false;
73 }
74
75 // Resize TArrayI if needed
76 if (fSecondArray.GetSize() == fNofItems) fSecondArray.Set(2*fNofItems);
77
78 fFirstArray.Add(new TObjString(first));
79 fSecondArray.AddAt(second, fNofItems);
80 fNofItems++;
81
82 return true;
83}
84
85//______________________________________________________________________________
abca6eb2 86Bool_t AliMUONStringIntMap::Set(const TString& first, Int_t second)
87{
88 /// Set map element
89
90 Int_t index = Contains(first);
91 if ( index < 0 )
92 {
93 return Add(first,second);
94 }
95
96 fSecondArray.AddAt(second, index);
97
98 return true;
99}
100
101//______________________________________________________________________________
102Int_t
103AliMUONStringIntMap::Contains(const TString& first) const
104{
105 /// Whether this map contains the string 'first' or not
106
107 for (Int_t i=0; i<fNofItems; i++)
108 {
109 if ( ((TObjString*)fFirstArray.At(i))->GetString() == first )
110 {
111 return i;
112 }
113 }
114
115 return -1;
116}
117
118//______________________________________________________________________________
d635d68e 119Int_t AliMUONStringIntMap::Get(const TString& first) const
120{
121/// Find the element with specified key (first)
122
123 for (Int_t i=0; i<fNofItems; i++) {
124 if ( ((TObjString*)fFirstArray.At(i))->GetString() == first )
125 return fSecondArray.At(i);
126 }
127
128 return 0;
129}
130
131//______________________________________________________________________________
132Int_t AliMUONStringIntMap::GetNofItems() const
133{
134/// Return the number of elements
135
136 return fNofItems;
137}
138
139//______________________________________________________________________________
140void AliMUONStringIntMap::Clear(Option_t* /*option*/)
141{
142/// Delete the elements
143
144 fNofItems = 0;
145 fFirstArray.Delete();
146 fSecondArray.Reset();
147}
148
149//______________________________________________________________________________
150void AliMUONStringIntMap::Print(const char* /*option*/) const
151{
152/// Print the map elements
153
154 for (Int_t i=0; i<fNofItems; i++) {
155 cout << setw(4)
156 << i << " "
157 << ((TObjString*)fFirstArray.At(i))->GetString()
158 << " "
159 << setw(5)
160 << fSecondArray.At(i)
161 << endl;
162 }
163}
164
165//______________________________________________________________________________
166void AliMUONStringIntMap::Print(const TString& key, ofstream& out) const
167{
a9aad96e 168/// Print the map elements preceded by a key word
d635d68e 169
170 for (Int_t i=0; i<fNofItems; i++) {
171 out << key << " "
172 << ((TObjString*)fFirstArray.At(i))->GetString()
173 << " "
174 << setw(5)
175 << fSecondArray.At(i)
176 << endl;
177 }
178}
3d775853 179
180//______________________________________________________________________________
181Bool_t AliMUONStringIntMap::Next(TString& first, Int_t& second)
182{
183/// Iterator: next method.
184/// Returns false if the iterator reached the end.
185
186
187 if ( fCurrentIndex >= fNofItems ) return false;
188
189 TObjString* objString = (TObjString*)fFirstArray.At(fCurrentIndex);
190 first = objString->GetString();
191
192 second = fSecondArray.At(fCurrentIndex);
193
194 ++fCurrentIndex;
195
196 return true;
197}
198
199//______________________________________________________________________________
200void AliMUONStringIntMap::ResetItr()
201{
202/// Reset iterator
203
204 fCurrentIndex = 0;
205}