AliRoot Core  edcc906 (edcc906)
AliMUONStringIntMap.cxx
Go to the documentation of this file.
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 AliMUONStringIntMap
20 // ------------------------------------
21 // Helper class that substitutes map <string, int>
22 // which ALICE does not allow to use
23 // Author: Ivana Hrivnacova, IPN Orsay
24 //-----------------------------------------------------------------------------
25 
26 #include <Riostream.h>
27 #include <TObjString.h>
28 
29 #include "AliMUONStringIntMap.h"
30 #include "AliLog.h"
31 
32 using std::cout;
33 using std::setw;
34 using std::endl;
36 ClassImp(AliMUONStringIntMap)
38 
39 //______________________________________________________________________________
41  : TObject(),
42  fNofItems(0),
43  fFirstArray(100),
44  fSecondArray(100),
45  fCurrentIndex(0)
46 {
48 
49  fFirstArray.SetOwner(true);
50 }
51 
52 //______________________________________________________________________________
54 {
56 
57  fFirstArray.Delete();
58 }
59 
60 //
61 // public methods
62 //
63 
64 //______________________________________________________________________________
65 Bool_t AliMUONStringIntMap::Add(const TString& first, Int_t second)
66 {
68 
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 //______________________________________________________________________________
86 Bool_t AliMUONStringIntMap::Set(const TString& first, Int_t second)
87 {
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 //______________________________________________________________________________
102 Int_t
103 AliMUONStringIntMap::Contains(const TString& first) const
104 {
106 
107  for (Int_t i=0; i<fNofItems; i++)
108  {
109  if ( ((TObjString*)fFirstArray.At(i))->String() == first )
110  {
111  return i;
112  }
113  }
114 
115  return -1;
116 }
117 
118 //______________________________________________________________________________
119 Int_t AliMUONStringIntMap::Get(const TString& first) const
120 {
122 
123  for (Int_t i=0; i<fNofItems; i++) {
124  if ( ((TObjString*)fFirstArray.At(i))->String() == first )
125  return fSecondArray.At(i);
126  }
127 
128  return 0;
129 }
130 
131 //______________________________________________________________________________
133 {
135 
136  return fNofItems;
137 }
138 
139 //______________________________________________________________________________
140 void AliMUONStringIntMap::Clear(Option_t* /*option*/)
141 {
143 
144  fNofItems = 0;
145  fFirstArray.Delete();
146  fSecondArray.Reset();
147 }
148 
149 //______________________________________________________________________________
150 void AliMUONStringIntMap::Print(const char* /*option*/) const
151 {
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 //______________________________________________________________________________
166 void AliMUONStringIntMap::Print(const TString& key, ofstream& out) const
167 {
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 }
179 
180 //______________________________________________________________________________
181 Bool_t AliMUONStringIntMap::Next(TString& first, Int_t& second)
182 {
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 //______________________________________________________________________________
201 {
203 
204  fCurrentIndex = 0;
205 }
Bool_t Set(const TString &first, Int_t second)
TObjArray fFirstArray
first item array
Bool_t Next(TString &first, Int_t &second)
Int_t fNofItems
number of items
Substitutes map <string, int> which ALICE does not allow to use.
Int_t Get(const TString &first) const
Int_t fCurrentIndex
current index
virtual void Print(const char *="") const
virtual void Clear(Option_t *="")
TArrayI fSecondArray
second item array
Int_t Contains(const TString &first) const
Bool_t Add(const TString &first, Int_t second)
#define AliError(message)
Definition: AliLog.h:591