ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$

//-----------------------------------------------------------------------------
// Class AliMUONStringIntMap
// ------------------------------------ 
// Helper class that substitutes map <string, int> 
// which ALICE does not allow to use 
// Author: Ivana Hrivnacova, IPN Orsay
//-----------------------------------------------------------------------------

#include <Riostream.h>
#include <TObjString.h>

#include "AliMUONStringIntMap.h"
#include "AliLog.h"

using std::cout;
using std::setw;
using std::endl;
/// \cond CLASSIMP
ClassImp(AliMUONStringIntMap)
/// \endcond

//______________________________________________________________________________
AliMUONStringIntMap::AliMUONStringIntMap()
 : TObject(),
   fNofItems(0),
   fFirstArray(100),
   fSecondArray(100),
   fCurrentIndex(0)
{
/// Standard constructor

  fFirstArray.SetOwner(true);
}

//______________________________________________________________________________
AliMUONStringIntMap::~AliMUONStringIntMap()
{
/// Destructor

  fFirstArray.Delete();
}

//
// public methods
//

//______________________________________________________________________________
Bool_t  AliMUONStringIntMap::Add(const TString& first, Int_t second)
{
/// Add map element if first not yet present
  
  Int_t second2 = Get(first);
  if ( second2 > 0 ) {
    AliError(Form("%s is already present in the map", first.Data()));
    return false;
  }
  
  // Resize TArrayI if needed
  if (fSecondArray.GetSize() == fNofItems) fSecondArray.Set(2*fNofItems);
  
  fFirstArray.Add(new TObjString(first)); 
  fSecondArray.AddAt(second, fNofItems);
  fNofItems++;
   
  return true;
}  

//______________________________________________________________________________
Bool_t  AliMUONStringIntMap::Set(const TString& first, Int_t second)
{
  /// Set map element

  Int_t index = Contains(first);
  if ( index < 0 )
  {
    return Add(first,second);
  }
    
  fSecondArray.AddAt(second, index);
  
  return true;
}  

//______________________________________________________________________________
Int_t 
AliMUONStringIntMap::Contains(const TString& first) const
{
  /// Whether this map contains the string 'first' or not
  
  for (Int_t i=0; i<fNofItems; i++) 
  {
    if ( ((TObjString*)fFirstArray.At(i))->GetString() == first )
    {
      return i;
    }
  }
  
  return -1;
}      

//______________________________________________________________________________
Int_t  AliMUONStringIntMap::Get(const TString& first) const
{
/// Find the element with specified key (first)
  
  for (Int_t i=0; i<fNofItems; i++) {
    if ( ((TObjString*)fFirstArray.At(i))->GetString() == first )
      return fSecondArray.At(i);
  }
  
  return 0;
}      

//______________________________________________________________________________
Int_t  AliMUONStringIntMap::GetNofItems() const
{
/// Return the number of elements

  return fNofItems;
}  

//______________________________________________________________________________
void  AliMUONStringIntMap::Clear(Option_t* /*option*/)
{
/// Delete the elements

  fNofItems = 0;
  fFirstArray.Delete();
  fSecondArray.Reset();
}  
    
//______________________________________________________________________________
void AliMUONStringIntMap::Print(const char* /*option*/) const
{
/// Print the map elements

  for (Int_t i=0; i<fNofItems; i++) {
    cout << setw(4)
         << i << "  "
         << ((TObjString*)fFirstArray.At(i))->GetString()
	 << "  "
	 << setw(5)
	 << fSecondArray.At(i)
	 << endl;
  }
}  	 

//______________________________________________________________________________
void AliMUONStringIntMap::Print(const TString& key, ofstream& out) const
{
/// Print the map elements preceded by a key word

  for (Int_t i=0; i<fNofItems; i++) {
    out  << key << "  "
         << ((TObjString*)fFirstArray.At(i))->GetString()
	 << "  "
	 << setw(5)
	 << fSecondArray.At(i)
	 << endl;
  }
}  	 

//______________________________________________________________________________
Bool_t  AliMUONStringIntMap::Next(TString& first, Int_t& second)
{
/// Iterator: next method.
/// Returns false if the iterator reached the end.

 
  if ( fCurrentIndex >= fNofItems ) return false;
  
  TObjString* objString = (TObjString*)fFirstArray.At(fCurrentIndex);
  first = objString->GetString();
  
  second = fSecondArray.At(fCurrentIndex);
  
  ++fCurrentIndex;
  
  return true;
}  

//______________________________________________________________________________
void  AliMUONStringIntMap::ResetItr()
{
/// Reset iterator
 
  fCurrentIndex = 0;
}  
 AliMUONStringIntMap.cxx:1
 AliMUONStringIntMap.cxx:2
 AliMUONStringIntMap.cxx:3
 AliMUONStringIntMap.cxx:4
 AliMUONStringIntMap.cxx:5
 AliMUONStringIntMap.cxx:6
 AliMUONStringIntMap.cxx:7
 AliMUONStringIntMap.cxx:8
 AliMUONStringIntMap.cxx:9
 AliMUONStringIntMap.cxx:10
 AliMUONStringIntMap.cxx:11
 AliMUONStringIntMap.cxx:12
 AliMUONStringIntMap.cxx:13
 AliMUONStringIntMap.cxx:14
 AliMUONStringIntMap.cxx:15
 AliMUONStringIntMap.cxx:16
 AliMUONStringIntMap.cxx:17
 AliMUONStringIntMap.cxx:18
 AliMUONStringIntMap.cxx:19
 AliMUONStringIntMap.cxx:20
 AliMUONStringIntMap.cxx:21
 AliMUONStringIntMap.cxx:22
 AliMUONStringIntMap.cxx:23
 AliMUONStringIntMap.cxx:24
 AliMUONStringIntMap.cxx:25
 AliMUONStringIntMap.cxx:26
 AliMUONStringIntMap.cxx:27
 AliMUONStringIntMap.cxx:28
 AliMUONStringIntMap.cxx:29
 AliMUONStringIntMap.cxx:30
 AliMUONStringIntMap.cxx:31
 AliMUONStringIntMap.cxx:32
 AliMUONStringIntMap.cxx:33
 AliMUONStringIntMap.cxx:34
 AliMUONStringIntMap.cxx:35
 AliMUONStringIntMap.cxx:36
 AliMUONStringIntMap.cxx:37
 AliMUONStringIntMap.cxx:38
 AliMUONStringIntMap.cxx:39
 AliMUONStringIntMap.cxx:40
 AliMUONStringIntMap.cxx:41
 AliMUONStringIntMap.cxx:42
 AliMUONStringIntMap.cxx:43
 AliMUONStringIntMap.cxx:44
 AliMUONStringIntMap.cxx:45
 AliMUONStringIntMap.cxx:46
 AliMUONStringIntMap.cxx:47
 AliMUONStringIntMap.cxx:48
 AliMUONStringIntMap.cxx:49
 AliMUONStringIntMap.cxx:50
 AliMUONStringIntMap.cxx:51
 AliMUONStringIntMap.cxx:52
 AliMUONStringIntMap.cxx:53
 AliMUONStringIntMap.cxx:54
 AliMUONStringIntMap.cxx:55
 AliMUONStringIntMap.cxx:56
 AliMUONStringIntMap.cxx:57
 AliMUONStringIntMap.cxx:58
 AliMUONStringIntMap.cxx:59
 AliMUONStringIntMap.cxx:60
 AliMUONStringIntMap.cxx:61
 AliMUONStringIntMap.cxx:62
 AliMUONStringIntMap.cxx:63
 AliMUONStringIntMap.cxx:64
 AliMUONStringIntMap.cxx:65
 AliMUONStringIntMap.cxx:66
 AliMUONStringIntMap.cxx:67
 AliMUONStringIntMap.cxx:68
 AliMUONStringIntMap.cxx:69
 AliMUONStringIntMap.cxx:70
 AliMUONStringIntMap.cxx:71
 AliMUONStringIntMap.cxx:72
 AliMUONStringIntMap.cxx:73
 AliMUONStringIntMap.cxx:74
 AliMUONStringIntMap.cxx:75
 AliMUONStringIntMap.cxx:76
 AliMUONStringIntMap.cxx:77
 AliMUONStringIntMap.cxx:78
 AliMUONStringIntMap.cxx:79
 AliMUONStringIntMap.cxx:80
 AliMUONStringIntMap.cxx:81
 AliMUONStringIntMap.cxx:82
 AliMUONStringIntMap.cxx:83
 AliMUONStringIntMap.cxx:84
 AliMUONStringIntMap.cxx:85
 AliMUONStringIntMap.cxx:86
 AliMUONStringIntMap.cxx:87
 AliMUONStringIntMap.cxx:88
 AliMUONStringIntMap.cxx:89
 AliMUONStringIntMap.cxx:90
 AliMUONStringIntMap.cxx:91
 AliMUONStringIntMap.cxx:92
 AliMUONStringIntMap.cxx:93
 AliMUONStringIntMap.cxx:94
 AliMUONStringIntMap.cxx:95
 AliMUONStringIntMap.cxx:96
 AliMUONStringIntMap.cxx:97
 AliMUONStringIntMap.cxx:98
 AliMUONStringIntMap.cxx:99
 AliMUONStringIntMap.cxx:100
 AliMUONStringIntMap.cxx:101
 AliMUONStringIntMap.cxx:102
 AliMUONStringIntMap.cxx:103
 AliMUONStringIntMap.cxx:104
 AliMUONStringIntMap.cxx:105
 AliMUONStringIntMap.cxx:106
 AliMUONStringIntMap.cxx:107
 AliMUONStringIntMap.cxx:108
 AliMUONStringIntMap.cxx:109
 AliMUONStringIntMap.cxx:110
 AliMUONStringIntMap.cxx:111
 AliMUONStringIntMap.cxx:112
 AliMUONStringIntMap.cxx:113
 AliMUONStringIntMap.cxx:114
 AliMUONStringIntMap.cxx:115
 AliMUONStringIntMap.cxx:116
 AliMUONStringIntMap.cxx:117
 AliMUONStringIntMap.cxx:118
 AliMUONStringIntMap.cxx:119
 AliMUONStringIntMap.cxx:120
 AliMUONStringIntMap.cxx:121
 AliMUONStringIntMap.cxx:122
 AliMUONStringIntMap.cxx:123
 AliMUONStringIntMap.cxx:124
 AliMUONStringIntMap.cxx:125
 AliMUONStringIntMap.cxx:126
 AliMUONStringIntMap.cxx:127
 AliMUONStringIntMap.cxx:128
 AliMUONStringIntMap.cxx:129
 AliMUONStringIntMap.cxx:130
 AliMUONStringIntMap.cxx:131
 AliMUONStringIntMap.cxx:132
 AliMUONStringIntMap.cxx:133
 AliMUONStringIntMap.cxx:134
 AliMUONStringIntMap.cxx:135
 AliMUONStringIntMap.cxx:136
 AliMUONStringIntMap.cxx:137
 AliMUONStringIntMap.cxx:138
 AliMUONStringIntMap.cxx:139
 AliMUONStringIntMap.cxx:140
 AliMUONStringIntMap.cxx:141
 AliMUONStringIntMap.cxx:142
 AliMUONStringIntMap.cxx:143
 AliMUONStringIntMap.cxx:144
 AliMUONStringIntMap.cxx:145
 AliMUONStringIntMap.cxx:146
 AliMUONStringIntMap.cxx:147
 AliMUONStringIntMap.cxx:148
 AliMUONStringIntMap.cxx:149
 AliMUONStringIntMap.cxx:150
 AliMUONStringIntMap.cxx:151
 AliMUONStringIntMap.cxx:152
 AliMUONStringIntMap.cxx:153
 AliMUONStringIntMap.cxx:154
 AliMUONStringIntMap.cxx:155
 AliMUONStringIntMap.cxx:156
 AliMUONStringIntMap.cxx:157
 AliMUONStringIntMap.cxx:158
 AliMUONStringIntMap.cxx:159
 AliMUONStringIntMap.cxx:160
 AliMUONStringIntMap.cxx:161
 AliMUONStringIntMap.cxx:162
 AliMUONStringIntMap.cxx:163
 AliMUONStringIntMap.cxx:164
 AliMUONStringIntMap.cxx:165
 AliMUONStringIntMap.cxx:166
 AliMUONStringIntMap.cxx:167
 AliMUONStringIntMap.cxx:168
 AliMUONStringIntMap.cxx:169
 AliMUONStringIntMap.cxx:170
 AliMUONStringIntMap.cxx:171
 AliMUONStringIntMap.cxx:172
 AliMUONStringIntMap.cxx:173
 AliMUONStringIntMap.cxx:174
 AliMUONStringIntMap.cxx:175
 AliMUONStringIntMap.cxx:176
 AliMUONStringIntMap.cxx:177
 AliMUONStringIntMap.cxx:178
 AliMUONStringIntMap.cxx:179
 AliMUONStringIntMap.cxx:180
 AliMUONStringIntMap.cxx:181
 AliMUONStringIntMap.cxx:182
 AliMUONStringIntMap.cxx:183
 AliMUONStringIntMap.cxx:184
 AliMUONStringIntMap.cxx:185
 AliMUONStringIntMap.cxx:186
 AliMUONStringIntMap.cxx:187
 AliMUONStringIntMap.cxx:188
 AliMUONStringIntMap.cxx:189
 AliMUONStringIntMap.cxx:190
 AliMUONStringIntMap.cxx:191
 AliMUONStringIntMap.cxx:192
 AliMUONStringIntMap.cxx:193
 AliMUONStringIntMap.cxx:194
 AliMUONStringIntMap.cxx:195
 AliMUONStringIntMap.cxx:196
 AliMUONStringIntMap.cxx:197
 AliMUONStringIntMap.cxx:198
 AliMUONStringIntMap.cxx:199
 AliMUONStringIntMap.cxx:200
 AliMUONStringIntMap.cxx:201
 AliMUONStringIntMap.cxx:202
 AliMUONStringIntMap.cxx:203
 AliMUONStringIntMap.cxx:204
 AliMUONStringIntMap.cxx:205