]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONStringIntMap.cxx
Updated list of MUON libraries
[u/mrichter/AliRoot.git] / MUON / AliMUONStringIntMap.cxx
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 #include <Riostream.h>
26 #include <TObjString.h>
27
28 #include "AliMUONStringIntMap.h"
29 #include "AliLog.h"
30
31 /// \cond CLASSIMP
32 ClassImp(AliMUONStringIntMap)
33 /// \endcond
34
35 //______________________________________________________________________________
36 AliMUONStringIntMap::AliMUONStringIntMap()
37  : TObject(),
38    fNofItems(0),
39    fFirstArray(100),
40    fSecondArray(100)
41 {
42 /// Standard constructor
43
44   fFirstArray.SetOwner(true);
45 }
46
47 //______________________________________________________________________________
48 AliMUONStringIntMap::~AliMUONStringIntMap()
49 {
50 /// Destructor
51
52   fFirstArray.Delete();
53 }
54
55 //
56 // public methods
57 //
58
59 //______________________________________________________________________________
60 Bool_t  AliMUONStringIntMap::Add(const TString& first, Int_t second)
61 {
62 /// Add map element if first not yet present
63   
64   Int_t second2 = Get(first);
65   if ( second2 > 0 ) {
66     AliError(Form("%s is already present in the map", first.Data()));
67     return false;
68   }
69   
70   // Resize TArrayI if needed
71   if (fSecondArray.GetSize() == fNofItems) fSecondArray.Set(2*fNofItems);
72   
73   fFirstArray.Add(new TObjString(first)); 
74   fSecondArray.AddAt(second, fNofItems);
75   fNofItems++;
76    
77   return true;
78 }  
79
80 //______________________________________________________________________________
81 Bool_t  AliMUONStringIntMap::Set(const TString& first, Int_t second)
82 {
83   /// Set map element
84
85   Int_t index = Contains(first);
86   if ( index < 0 )
87   {
88     return Add(first,second);
89   }
90     
91   fSecondArray.AddAt(second, index);
92   
93   return true;
94 }  
95
96 //______________________________________________________________________________
97 Int_t 
98 AliMUONStringIntMap::Contains(const TString& first) const
99 {
100   /// Whether this map contains the string 'first' or not
101   
102   for (Int_t i=0; i<fNofItems; i++) 
103   {
104     if ( ((TObjString*)fFirstArray.At(i))->GetString() == first )
105     {
106       return i;
107     }
108   }
109   
110   return -1;
111 }      
112
113 //______________________________________________________________________________
114 Int_t  AliMUONStringIntMap::Get(const TString& first) const
115 {
116 /// Find the element with specified key (first)
117   
118   for (Int_t i=0; i<fNofItems; i++) {
119     if ( ((TObjString*)fFirstArray.At(i))->GetString() == first )
120       return fSecondArray.At(i);
121   }
122   
123   return 0;
124 }      
125
126 //______________________________________________________________________________
127 Int_t  AliMUONStringIntMap::GetNofItems() const
128 {
129 /// Return the number of elements
130
131   return fNofItems;
132 }  
133
134 //______________________________________________________________________________
135 void  AliMUONStringIntMap::Clear(Option_t* /*option*/)
136 {
137 /// Delete the elements
138
139   fNofItems = 0;
140   fFirstArray.Delete();
141   fSecondArray.Reset();
142 }  
143     
144 //______________________________________________________________________________
145 void AliMUONStringIntMap::Print(const char* /*option*/) const
146 {
147 /// Print the map elements
148
149   for (Int_t i=0; i<fNofItems; i++) {
150     cout << setw(4)
151          << i << "  "
152          << ((TObjString*)fFirstArray.At(i))->GetString()
153          << "  "
154          << setw(5)
155          << fSecondArray.At(i)
156          << endl;
157   }
158 }        
159
160 //______________________________________________________________________________
161 void AliMUONStringIntMap::Print(const TString& key, ofstream& out) const
162 {
163 /// Print the map elements preceded by a key word
164
165   for (Int_t i=0; i<fNofItems; i++) {
166     out  << key << "  "
167          << ((TObjString*)fFirstArray.At(i))->GetString()
168          << "  "
169          << setw(5)
170          << fSecondArray.At(i)
171          << endl;
172   }
173 }