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$
// $MpId: AliMpStringObjMap.cxx,v 1.4 2006/05/24 13:58:29 ivana Exp $

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

#include "AliMpStringObjMap.h"

#include "AliLog.h"

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

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

//
// static private methods
//

//______________________________________________________________________________
const TString& AliMpStringObjMap::GetUndefinedKey()
{
  /// Undefined key string
  static const TString kUndefinedKey = "Undefined";
  return kUndefinedKey;
}  

//
// ctors, dtor
//

//______________________________________________________________________________
AliMpStringObjMap::AliMpStringObjMap(Bool_t isOwner)
 : TObject(),
   fNofItems(0),
   fFirstArray(),
   fSecondArray(),
   fCurrentIndex(0)
{
/// Standard constructor

  fFirstArray.SetOwner(true);
  fSecondArray.SetOwner(isOwner);
}

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

  fFirstArray.Delete();
}

//
// public methods
//

//______________________________________________________________________________
Bool_t  AliMpStringObjMap::Add(const TString& first, TObject* second)
{
/// Add map element if first not yet present

  TObject* second2 = Get(first);
  if ( second2 ) {
    AliError(Form("%s is already present in the map", first.Data()));
    return false;
  }
  
  fFirstArray.Add(new TObjString(first)); 
  fSecondArray.Add(second);
  fNofItems++;
   
  return true;
}  

//______________________________________________________________________________
TObject*  AliMpStringObjMap::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  AliMpStringObjMap::GetNofItems() const
{
/// Return the number of elements

  return fNofItems;
}  

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

  fNofItems = 0;
  fFirstArray.Delete();
  fSecondArray.Delete();
}  
    
//______________________________________________________________________________
void AliMpStringObjMap::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 AliMpStringObjMap::Print(const TString& key, ofstream& out) const
{
/// Special printing 

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

//______________________________________________________________________________
void  AliMpStringObjMap::First()
{
/// Set iterator to the first item and return its object

  fCurrentIndex = 0; 
}  
  

//______________________________________________________________________________
void  AliMpStringObjMap::Next()
{
/// Set iterator to the next item and return its object
/// Return 0 if there are no more items

  ++fCurrentIndex;
}  
    

//______________________________________________________________________________
TObject* AliMpStringObjMap::CurrentItem()
{
/// Set iterator to the first item and return its object

  if ( fCurrentIndex >= fNofItems ) return 0;

  return fSecondArray.At(fCurrentIndex);
}  
  

//______________________________________________________________________________
TString AliMpStringObjMap::CurrentKey()
{
/// Set iterator to the first item and return its object

  if ( fCurrentIndex >= fNofItems ) return GetUndefinedKey();
  
  return ((TObjString*)fFirstArray.At(fCurrentIndex))->GetString();
}  
  

//______________________________________________________________________________
Bool_t  AliMpStringObjMap::IsDone() const
{
/// Return true if the iterator reached the end of map

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