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 purpeateose. It is      *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$
// $MpId: AliMpHelper.cxx,v 1.5 2006/05/24 13:58:50 ivana Exp $

#include "AliMpHelper.h"

#include "TArrayI.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TString.h"
#include "TMap.h"

//-----------------------------------------------------------------------------
/// \class AliMpHelper
///
/// Helper class used to parse mapping files for St345 slats.
///
/// \author L. Aphecetche
//-----------------------------------------------------------------------------

/// \cond CLASSIMP
ClassImp(AliMpHelper)
/// \endcond

//_____________________________________________________________________________
AliMpHelper::AliMpHelper() : TObject()
{
  ///
  /// Default (empty) ctor.
  /// 
} 
 
//_____________________________________________________________________________
AliMpHelper::~AliMpHelper()
{
  ///
  /// Dtor.
  ///
}

//_____________________________________________________________________________
TMap* 
AliMpHelper::Decode(const TString& s)
{
  /// \todo add comment  

  TString ss(s);
  ss.ToUpper();
  
  TMap* m = new TMap;
  m->SetOwner(true);
  
  TObjArray* a = ss.Tokenize(";");
  TIter next(a);
  TObjString* o;
  
  while ( ( o = static_cast<TObjString*>(next()) ) )
  {
    TString& os(o->String());
    TObjArray* b = os.Tokenize("=");
    if (b->GetEntries()==2)
    {
      m->Add(b->At(0),b->At(1));
    }
  }
  delete a;
  return m;
}

//_____________________________________________________________________________
Bool_t 
AliMpHelper::Decode(const TMap& m, const TString& key, TString& value)
{
  /// \todo add comment  

  TString skey(key);
  skey.ToUpper();
  value = "";
  TPair* p = static_cast<TPair*>(m.FindObject(skey));
  if (p) 
  {
    value = (static_cast<TObjString*>(p->Value()))->String();
    return kTRUE;
  }
  return kFALSE;
}

//_____________________________________________________________________________
void AliMpHelper::DecodeName(const char* name, char sep, TArrayI& theList)
{
  ///
  /// From a string of the form "i-j;k;l;m-n" returns an integer array
  /// containing all the integers from i to j, then k, l and then from m to
  /// n.
  ///
  theList.Set(0);
  
  TString str(name);
  
  if ( str.Length() == 0 )
  {
    // protection against empty input string.
    return;
  }
  
  // Get substrings separated by 'sep'
  TObjArray* ranges = str.Tokenize(sep);
  
  // Finally takes each substring (which ought to be a range of the form
  // x-y), and decode it into the theList integer vector.
  for ( Int_t i = 0; i < ranges->GetEntriesFast(); ++i )
  {
    int m1;
    int m2;
    int n;
    int incr;
    TString& s = ((TObjString*)ranges->At(i))->String();
    GetRange(s.Data(),m1,m2,incr,n);
    int m = m1;
    while ( n > 0 )
    {
      theList.Set(theList.GetSize()+1);
      theList[theList.GetSize()-1] = m;
      m += incr;
      --n;
    }
  }
  
  delete ranges;
}

//_____________________________________________________________________________
void 
AliMpHelper::GetRange(const char* cstr, Int_t& begin, Int_t& end, 
                      Int_t& incr, Int_t& n)
{
  ///
  /// From a string of the form "m-n" returns a range (begin,end),
  /// its ordering (incr=+-1) and its size (abs(begin-end)+1)
  ///
  TString str(cstr);
  
  incr = 1;
  Ssiz_t pos = str.First('-');
  if ( pos < 0 )
  {
    begin = str.Atoi();
    end = -1;
    n = 1;
  }
  else
  {
    begin = str.Atoi();
    end = TString(str(pos+1,str.Length()-pos)).Atoi();
    if ( begin > end )
    {
      incr = -1;
      n = begin-end+1;
    }
    else
    {
      n = end-begin+1;
    }    
  }
}

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