#include <fstream>
#include <TObjString.h>
#include <TObjArray.h>
#include <TString.h>
#include <TIterator.h>
#include <TList.h>
#include <TSystem.h>
#include "AliTPCConfigParser.h"
using std::ifstream;
AliTPCConfigParser::AliTPCConfigParser() :
TObject(),
fConfigMap(new TList),
fKeyIter(0),
fValIter(0)
{
fConfigMap->SetOwner();
}
AliTPCConfigParser::AliTPCConfigParser(const AliTPCConfigParser &cfg) :
TObject(),
fConfigMap((TList*)cfg.fConfigMap->Clone()),
fKeyIter(0),
fValIter(0)
{
fConfigMap->SetOwner();
}
AliTPCConfigParser::AliTPCConfigParser(const char* cfgfile) :
TObject(),
fConfigMap(new TList),
fKeyIter(0),
fValIter(0)
{
fConfigMap->SetOwner();
if ( !cfgfile ) return;
ParseConfigFileTxt(cfgfile);
}
AliTPCConfigParser& AliTPCConfigParser::operator = (const AliTPCConfigParser &source)
{
if (&source == this) return *this;
new (this) AliTPCConfigParser(source);
return *this;
}
AliTPCConfigParser::~AliTPCConfigParser()
{
delete fConfigMap;
delete fKeyIter;
delete fValIter;
}
Int_t AliTPCConfigParser::ParseConfigFileTxt(const char* cfgfile)
{
ResetMap();
ifstream file(gSystem->ExpandPathName(cfgfile));
if ( !file.is_open() ){
Error("ParseConfigFileTxt","File '%s' could not be opened!", cfgfile);
return 1;
}
TString strFile;
strFile.ReadFile(file);
TObjArray *arr=strFile.Tokenize("\n");
if ( !arr ) {
file.close();
return 2;
}
TIter nextLine(arr);
while (TObject *l=nextLine()){
TString line(((TObjString*)l)->GetString());
line.Remove(TString::kBoth,' ');
line.Remove(TString::kBoth,'\t');
if ( line.BeginsWith("#") || line=="" ) continue;
line.ReplaceAll(", ",",");
TObjArray *arrValues=line.Tokenize(" \t");
Int_t nentries=arrValues->GetEntries();
if (nentries>2){
Error("AliTPCConfigParser","ParseConfigFileTxt: Cannot parse line '%s'\n",line.Data());
delete arrValues;
continue;
}
TObjArray *objArr=0x0;
if (nentries==2){
TObject *objVal=arrValues->At(1);
const TString str=objVal->GetName();
if (str.Contains(","))
objArr=str.Tokenize(",");
else{
objArr=new TObjArray;
objArr->Add(objVal->Clone());
}
objArr->SetOwner(kTRUE);
} else {
objArr=new TObjArray;
}
objArr->SetName(arrValues->At(0)->GetName());
fConfigMap->AddLast(objArr);
delete arrValues;
}
delete arr;
return 0;
}
Float_t AliTPCConfigParser::GetValue(const char *key, UInt_t position)
{
TObject *val=((TObjArray*)fConfigMap->FindObject(key))->At(position);
if ( !val ) return -999.;
TString sval(((TObjString*)val)->GetString());
return sval.Atof();
}
const char* AliTPCConfigParser::GetData(const char *key, UInt_t position)
{
TObjArray *arr=((TObjArray*)fConfigMap->FindObject(key));
if (position>=(UInt_t)(arr->GetEntries())) return "";
TObject *val=arr->At(position);
if ( !val ) return "";
return val->GetName();
}
Float_t AliTPCConfigParser::GetValue(const TObject *key, UInt_t position)
{
TObject *val=((TObjArray*)fConfigMap->FindObject(key))->At(position);
if ( !val ) return -999.;
TString sval(((TObjString*)val)->GetString());
return sval.Atof();
}
const char* AliTPCConfigParser::GetData(const TObject *key, UInt_t position)
{
TObjArray *arr=((TObjArray*)fConfigMap->FindObject(key));
if (position>=((UInt_t)arr->GetEntries())) return "";
TObject *val=arr->At(position);
if ( !val ) return "";
return val->GetName();
}
Int_t AliTPCConfigParser::GetNumberOfValues(const char* key) const
{
return ((TObjArray*)fConfigMap->FindObject(key))->GetEntries();
}
Int_t AliTPCConfigParser::GetNumberOfValues(TObject* key) const
{
return ((TObjArray*)fConfigMap->FindObject(key))->GetEntries();
}
TObject* AliTPCConfigParser::NextKey(){
if (!fKeyIter) fKeyIter=fConfigMap->MakeIterator();
TObject *obj=fKeyIter->Next();
if (!obj) {
delete fKeyIter;
fKeyIter=0;
}
return obj;
}
TObject* AliTPCConfigParser::NextValue(const char *key){
return NextValueIter((TObjArray*)fConfigMap->FindObject(key));
}
TObject* AliTPCConfigParser::NextValue(TObject *key){
return NextValueIter((TObjArray*)fConfigMap->FindObject(key));
}
TObject* AliTPCConfigParser::NextValueIter(TObjArray *key){
if (!key) return 0;
if (fValIter && key!=fValIter->GetCollection()) {
delete fValIter;
fValIter=0x0;
}
if (!fValIter) fValIter=key->MakeIterator();
TObject *value=fValIter->Next();
if (!value) {
delete fValIter;
fValIter=0;
}
return value;
}
void AliTPCConfigParser::ResetMap()
{
fConfigMap->Delete();
}
AliTPCConfigParser.cxx:10 AliTPCConfigParser.cxx:11 AliTPCConfigParser.cxx:12 AliTPCConfigParser.cxx:13 AliTPCConfigParser.cxx:14 AliTPCConfigParser.cxx:15 AliTPCConfigParser.cxx:16 AliTPCConfigParser.cxx:17 AliTPCConfigParser.cxx:18 AliTPCConfigParser.cxx:19 AliTPCConfigParser.cxx:20 AliTPCConfigParser.cxx:21 AliTPCConfigParser.cxx:22 AliTPCConfigParser.cxx:23 AliTPCConfigParser.cxx:24 AliTPCConfigParser.cxx:25 AliTPCConfigParser.cxx:26 AliTPCConfigParser.cxx:27 AliTPCConfigParser.cxx:28 AliTPCConfigParser.cxx:29 AliTPCConfigParser.cxx:30 AliTPCConfigParser.cxx:31 AliTPCConfigParser.cxx:32 AliTPCConfigParser.cxx:33 AliTPCConfigParser.cxx:34 AliTPCConfigParser.cxx:35 AliTPCConfigParser.cxx:36 AliTPCConfigParser.cxx:37 AliTPCConfigParser.cxx:38 AliTPCConfigParser.cxx:39 AliTPCConfigParser.cxx:40 AliTPCConfigParser.cxx:41 AliTPCConfigParser.cxx:42 AliTPCConfigParser.cxx:43 AliTPCConfigParser.cxx:44 AliTPCConfigParser.cxx:45 AliTPCConfigParser.cxx:46 AliTPCConfigParser.cxx:47 AliTPCConfigParser.cxx:48 AliTPCConfigParser.cxx:49 AliTPCConfigParser.cxx:50 AliTPCConfigParser.cxx:51 AliTPCConfigParser.cxx:52 AliTPCConfigParser.cxx:53 AliTPCConfigParser.cxx:54 AliTPCConfigParser.cxx:55 AliTPCConfigParser.cxx:56 AliTPCConfigParser.cxx:57 AliTPCConfigParser.cxx:58 AliTPCConfigParser.cxx:59 AliTPCConfigParser.cxx:60 AliTPCConfigParser.cxx:61 AliTPCConfigParser.cxx:62 AliTPCConfigParser.cxx:63 AliTPCConfigParser.cxx:64 AliTPCConfigParser.cxx:65 AliTPCConfigParser.cxx:66 AliTPCConfigParser.cxx:67 AliTPCConfigParser.cxx:68 AliTPCConfigParser.cxx:69 AliTPCConfigParser.cxx:70 AliTPCConfigParser.cxx:71 AliTPCConfigParser.cxx:72 AliTPCConfigParser.cxx:73 AliTPCConfigParser.cxx:74 AliTPCConfigParser.cxx:75 AliTPCConfigParser.cxx:76 AliTPCConfigParser.cxx:77 AliTPCConfigParser.cxx:78 AliTPCConfigParser.cxx:79 AliTPCConfigParser.cxx:80 AliTPCConfigParser.cxx:81 AliTPCConfigParser.cxx:82 AliTPCConfigParser.cxx:83 AliTPCConfigParser.cxx:84 AliTPCConfigParser.cxx:85 AliTPCConfigParser.cxx:86 AliTPCConfigParser.cxx:87 AliTPCConfigParser.cxx:88 AliTPCConfigParser.cxx:89 AliTPCConfigParser.cxx:90 AliTPCConfigParser.cxx:91 AliTPCConfigParser.cxx:92 AliTPCConfigParser.cxx:93 AliTPCConfigParser.cxx:94 AliTPCConfigParser.cxx:95 AliTPCConfigParser.cxx:96 AliTPCConfigParser.cxx:97 AliTPCConfigParser.cxx:98 AliTPCConfigParser.cxx:99 AliTPCConfigParser.cxx:100 AliTPCConfigParser.cxx:101 AliTPCConfigParser.cxx:102 AliTPCConfigParser.cxx:103 AliTPCConfigParser.cxx:104 AliTPCConfigParser.cxx:105 AliTPCConfigParser.cxx:106 AliTPCConfigParser.cxx:107 AliTPCConfigParser.cxx:108 AliTPCConfigParser.cxx:109 AliTPCConfigParser.cxx:110 AliTPCConfigParser.cxx:111 AliTPCConfigParser.cxx:112 AliTPCConfigParser.cxx:113 AliTPCConfigParser.cxx:114 AliTPCConfigParser.cxx:115 AliTPCConfigParser.cxx:116 AliTPCConfigParser.cxx:117 AliTPCConfigParser.cxx:118 AliTPCConfigParser.cxx:119 AliTPCConfigParser.cxx:120 AliTPCConfigParser.cxx:121 AliTPCConfigParser.cxx:122 AliTPCConfigParser.cxx:123 AliTPCConfigParser.cxx:124 AliTPCConfigParser.cxx:125 AliTPCConfigParser.cxx:126 AliTPCConfigParser.cxx:127 AliTPCConfigParser.cxx:128 AliTPCConfigParser.cxx:129 AliTPCConfigParser.cxx:130 AliTPCConfigParser.cxx:131 AliTPCConfigParser.cxx:132 AliTPCConfigParser.cxx:133 AliTPCConfigParser.cxx:134 AliTPCConfigParser.cxx:135 AliTPCConfigParser.cxx:136 AliTPCConfigParser.cxx:137 AliTPCConfigParser.cxx:138 AliTPCConfigParser.cxx:139 AliTPCConfigParser.cxx:140 AliTPCConfigParser.cxx:141 AliTPCConfigParser.cxx:142 AliTPCConfigParser.cxx:143 AliTPCConfigParser.cxx:144 AliTPCConfigParser.cxx:145 AliTPCConfigParser.cxx:146 AliTPCConfigParser.cxx:147 AliTPCConfigParser.cxx:148 AliTPCConfigParser.cxx:149 AliTPCConfigParser.cxx:150 AliTPCConfigParser.cxx:151 AliTPCConfigParser.cxx:152 AliTPCConfigParser.cxx:153 AliTPCConfigParser.cxx:154 AliTPCConfigParser.cxx:155 AliTPCConfigParser.cxx:156 AliTPCConfigParser.cxx:157 AliTPCConfigParser.cxx:158 AliTPCConfigParser.cxx:159 AliTPCConfigParser.cxx:160 AliTPCConfigParser.cxx:161 AliTPCConfigParser.cxx:162 AliTPCConfigParser.cxx:163 AliTPCConfigParser.cxx:164 AliTPCConfigParser.cxx:165 AliTPCConfigParser.cxx:166 AliTPCConfigParser.cxx:167 AliTPCConfigParser.cxx:168 AliTPCConfigParser.cxx:169 AliTPCConfigParser.cxx:170 AliTPCConfigParser.cxx:171 AliTPCConfigParser.cxx:172 AliTPCConfigParser.cxx:173 AliTPCConfigParser.cxx:174 AliTPCConfigParser.cxx:175 AliTPCConfigParser.cxx:176 AliTPCConfigParser.cxx:177 AliTPCConfigParser.cxx:178 AliTPCConfigParser.cxx:179 AliTPCConfigParser.cxx:180 AliTPCConfigParser.cxx:181 AliTPCConfigParser.cxx:182 AliTPCConfigParser.cxx:183 AliTPCConfigParser.cxx:184 AliTPCConfigParser.cxx:185 AliTPCConfigParser.cxx:186 AliTPCConfigParser.cxx:187 AliTPCConfigParser.cxx:188 AliTPCConfigParser.cxx:189 AliTPCConfigParser.cxx:190 AliTPCConfigParser.cxx:191 AliTPCConfigParser.cxx:192 AliTPCConfigParser.cxx:193 AliTPCConfigParser.cxx:194 AliTPCConfigParser.cxx:195 AliTPCConfigParser.cxx:196 AliTPCConfigParser.cxx:197 AliTPCConfigParser.cxx:198 AliTPCConfigParser.cxx:199 AliTPCConfigParser.cxx:200 AliTPCConfigParser.cxx:201 AliTPCConfigParser.cxx:202 AliTPCConfigParser.cxx:203 AliTPCConfigParser.cxx:204 AliTPCConfigParser.cxx:205 AliTPCConfigParser.cxx:206 AliTPCConfigParser.cxx:207 AliTPCConfigParser.cxx:208 AliTPCConfigParser.cxx:209 AliTPCConfigParser.cxx:210 AliTPCConfigParser.cxx:211 AliTPCConfigParser.cxx:212 AliTPCConfigParser.cxx:213 AliTPCConfigParser.cxx:214 AliTPCConfigParser.cxx:215 AliTPCConfigParser.cxx:216 AliTPCConfigParser.cxx:217 AliTPCConfigParser.cxx:218 AliTPCConfigParser.cxx:219 AliTPCConfigParser.cxx:220 AliTPCConfigParser.cxx:221 AliTPCConfigParser.cxx:222 AliTPCConfigParser.cxx:223 AliTPCConfigParser.cxx:224 AliTPCConfigParser.cxx:225 AliTPCConfigParser.cxx:226 AliTPCConfigParser.cxx:227 AliTPCConfigParser.cxx:228 AliTPCConfigParser.cxx:229 AliTPCConfigParser.cxx:230 AliTPCConfigParser.cxx:231 AliTPCConfigParser.cxx:232 AliTPCConfigParser.cxx:233 AliTPCConfigParser.cxx:234 AliTPCConfigParser.cxx:235 AliTPCConfigParser.cxx:236 AliTPCConfigParser.cxx:237 AliTPCConfigParser.cxx:238 AliTPCConfigParser.cxx:239 AliTPCConfigParser.cxx:240 AliTPCConfigParser.cxx:241 AliTPCConfigParser.cxx:242 AliTPCConfigParser.cxx:243 AliTPCConfigParser.cxx:244 AliTPCConfigParser.cxx:245 AliTPCConfigParser.cxx:246 AliTPCConfigParser.cxx:247 AliTPCConfigParser.cxx:248 AliTPCConfigParser.cxx:249 AliTPCConfigParser.cxx:250 AliTPCConfigParser.cxx:251 AliTPCConfigParser.cxx:252 AliTPCConfigParser.cxx:253 AliTPCConfigParser.cxx:254 AliTPCConfigParser.cxx:255 AliTPCConfigParser.cxx:256 AliTPCConfigParser.cxx:257 AliTPCConfigParser.cxx:258 AliTPCConfigParser.cxx:259 AliTPCConfigParser.cxx:260 AliTPCConfigParser.cxx:261 AliTPCConfigParser.cxx:262 AliTPCConfigParser.cxx:263 AliTPCConfigParser.cxx:264 AliTPCConfigParser.cxx:265 AliTPCConfigParser.cxx:266 AliTPCConfigParser.cxx:267 AliTPCConfigParser.cxx:268 AliTPCConfigParser.cxx:269