#include "hcondparasciifileio.h"
#include "hparcond.h"
#include "hparamlist.h"
#include "TClass.h"
ClassImp(HCondParAsciiFileIo)
HCondParAsciiFileIo::HCondParAsciiFileIo(fstream* f) : HDetParAsciiFileIo(f) {
fName="HCondParIo";
}
Bool_t HCondParAsciiFileIo::init(HParSet* pPar,Int_t* set) {
if (!pFile) return kFALSE;
if (pPar->InheritsFrom("HParCond"))
return readCond((HParCond*)pPar);
Error("HCondParAsciiFileIo::init(HParSet*,Int_t*)",
"%s does not inherit from HParCond",pPar->GetName());
return kFALSE;
}
Int_t HCondParAsciiFileIo::write(HParSet* pPar) {
if (!pFile) return -1;
if (pPar->InheritsFrom("HParCond"))
return writeCond((HParCond*)pPar);
Error("HCondParAsciiFileIo::write(HParSet*)",
"%s does not inherit from HParCond",pPar->GetName());
return -1;
}
Bool_t HCondParAsciiFileIo::readCond(HParCond* pPar) {
if (!pFile) return kFALSE;
pFile->clear();
pFile->seekg(0,ios::beg);
Text_t* name=(Char_t*)pPar->GetName();
if (!findContainer(name)) return kFALSE;
HParamList* paramList = new HParamList;
const Int_t maxbuf=8000;
Text_t buf[maxbuf];
buf[0]='\0';
TString s, pName, pVal, pType;
Ssiz_t n, m;
while (buf[0]!='#' && !pFile->eof()) {
pFile->getline(buf,maxbuf);
if (buf[0]!='/' && buf[0]!='#') {
s=buf;
n=s.First(':');
if (n==-1) {
Error("readCond(HParCond*)",
"%s:\n Missing backslash for parameter %s",name,pName.Data());
delete paramList;
return kFALSE;
}
pName=s(0,n);
s=s(n+1,s.Length()-n-1);
s=s.Strip(s.kLeading);
if (pName.CompareTo("author")==0 || pName.CompareTo("description")==0) {
m=s.Last('\\');
if (m<=0) {
pVal=s;
} else {
pVal=s(0,m);
pVal+="\n";
while (m>0) {
pFile->getline(buf,maxbuf);
if (buf[0]!='/') {
s=buf;
m=s.Last('\\');
if (m>0) {
pVal+=s(0,m);
pVal+="\n";
} else {
pVal+=s;
}
}
}
}
if (pName.CompareTo("author")==0) {
pPar->setAuthor(pVal.Data());
} else if (pName.CompareTo("description")==0) {
pPar->setDescription(pVal.Data());
}
} else {
n=s.First(' ');
pType=s(0,n);
s=s(n+1,s.Length()-n-1);
s=s.Strip(s.kLeading);
if (pType.CompareTo("Text_t")==0) {
m=s.Last('\\');
if (m<0) {
pVal=s;
} else {
pVal="";
while (m>=0) {
pFile->getline(buf,maxbuf);
if (buf[0]!='/') {
s=buf;
m=s.Last('\\');
if (m>0) {
pVal+=s(0,m);
pVal+="\n";
} else {
pVal+=s;
}
}
}
}
pVal=pVal.Strip(pVal.kLeading);
if (pVal.Length()>0) {
paramList->add(pName.Data(),pVal.Data());
}
} else {
UChar_t* val=0;
Int_t length=0;
if (pType.CompareTo("Int_t")==0) {
Int_t v=0;
val=readData(v,"%i",s,length);
} else if (pType.CompareTo("UInt_t")==0) {
UInt_t v=0;
val=readData(v,"0x%x",s,length);
} else if (pType.CompareTo("Float_t")==0){
Float_t v=0.F;
val=readData(v,"%f",s,length);
} else if (pType.CompareTo("Double_t")==0) {
Double_t v=0.;
val=readData(v,"%lf",s,length);
} else if (pType.CompareTo("Char_t")==0) {
Char_t v='0';
val=readData(v,"%c",s,length);
} else {
Error("readCond(HParCond*)",
"%s:\n Parameter %s with unsupported type %s",
name,pName.Data(),pType.Data());
delete paramList;
return kFALSE;
}
HParamObj* obj=new HParamObj(pName.Data());
obj->setParamType(pType.Data());
UChar_t* pValue=obj->setLength(length);
memcpy(pValue,val,length);
paramList->getList()->Add(obj);
if (val) delete [] val;
}
}
}
}
Bool_t allFound=pPar->getParams(paramList);
if (allFound) {
pPar->setInputVersion(1,inputNumber);
pPar->setChanged();
printf("%s initialized from Ascii file\n",name);
} else pPar->setInputVersion(-1,inputNumber);
delete paramList;
return allFound;
}
template <class type> UChar_t* HCondParAsciiFileIo::readData(
type t,const Char_t* format,TString& line, Int_t& length) {
const Int_t st=sizeof(t);
const Int_t maxbuf=8000;
const Int_t bufSizeExt=10000*st;
const Char_t d[]=" ";
Text_t buf[maxbuf];
TString s;
Int_t l=0, bufSize=bufSizeExt;
UChar_t* val=new UChar_t[bufSize];
Ssiz_t m=line.Last('\\');
if (m<0) {
sscanf(line.Data(),format,&t);
memcpy(&val[l],&t,st);
length=st;
} else {
do {
pFile->getline(buf,maxbuf);
if (buf[0]!='/' && buf[0]!='#') {
TString s=buf;
m=s.Last('\\');
if (m>0) s=s(0,s.Length()-2);
if ((bufSize-1000)<l) {
bufSize+=bufSizeExt;
UChar_t* va=new UChar_t[bufSize];
memcpy(va,val,l);
delete [] val;
val=va;
}
Char_t* ss=strtok((Char_t*)s.Data(),d);
while (ss!=0) {
sscanf(ss,format,&t);
memcpy(&val[l],&t,st);
l+=st;
ss=strtok(NULL,d);
}
}
} while (buf[0]!='#' && !pFile->eof() && m>0);
length=l;
}
return val;
}
Int_t HCondParAsciiFileIo::writeCond(HParCond* pPar) {
if (pFile) {
const Text_t* name=pPar->GetName();
const Text_t* context=pPar->getParamContext();
*pFile<<sepLine;
*pFile<<"# Class: "<<pPar->IsA()->GetName()<<"\n# Context: "<<context<<"\n";
*pFile<<sepLine;
*pFile<<"["<<name<<"]\n";
writeComment(pPar);
*pFile<<"//-----------------------------------------------------------"
"-----------------\n";
HParamList* paramList = new HParamList;
pPar->putParams(paramList);
TList* pList=paramList->getList();
TIter next(pList);
HParamObj* po;
while ((po=(HParamObj*)next())) {
const Char_t* pType=po->getParamType();
UChar_t* pValue=po->getParamValue();
if (po->isBasicType()&&strcmp(pType,"UChar_t")!=0) {
if (strcmp(pType,"Text_t")==0) {
TString val((Char_t*)pValue,po->getLength());
val.ReplaceAll("\n"," \\\n");
*pFile<<po->GetName()<<": "<<pType<<" \\\n "<<val.Data()<<endl;
} else {
Int_t nParams=po->getNumParams();
if (nParams==1) {
*pFile<<po->GetName()<<": "<<pType<<" ";
} else {
*pFile<<po->GetName()<<": "<<pType<<" \\\n ";
}
if (strcmp(pType,"Char_t")==0) {
writeData((Char_t*)pValue,nParams);
} else if (strcmp(pType,"Int_t")==0) {
writeData((Int_t*)pValue,nParams);
} else if (strcmp(pType,"UInt_t")==0) {
writeHexData((UInt_t*)pValue,nParams);
} else if (strcmp(pType,"Float_t")==0) {
writeData((Float_t*)pValue,nParams);
} else if (strcmp(pType,"Double_t")==0) {
writeData((Double_t*)pValue,nParams);
}
}
} else {
Error("writeCond(HParCond*)",
"Type %s of parameter %s not supported by ASCII I/O",
pType,po->GetName());
}
}
*pFile<<sepLine;
delete paramList;
pPar->setChanged(kFALSE);
return 1;
}
Error("writeCond(HParCond*)",
"Output is not writable");
return -1;
}
template <class type> void HCondParAsciiFileIo::writeData(type* val, Int_t nParams) {
Int_t i=0, k=0;
while (k<nParams) {
if (i==10) {
*pFile<<" \\\n ";
i=0;
}
*pFile<<val[k]<<" ";
i++;
k++;
}
*pFile<<endl;
}
void HCondParAsciiFileIo::writeHexData(UInt_t* val, Int_t nParams) {
Text_t buf[11];
Int_t i=0, k=0;
while (k<nParams) {
if (i==10) {
*pFile<<" \\\n ";
i=0;
}
sprintf(buf,"0x%08x",val[k]);
*pFile<<buf<<" ";
i++;
k++;
}
*pFile<<endl;
}
hcondparasciifileio.cc:10 hcondparasciifileio.cc:11 hcondparasciifileio.cc:12 hcondparasciifileio.cc:13 hcondparasciifileio.cc:14 hcondparasciifileio.cc:15 hcondparasciifileio.cc:16 hcondparasciifileio.cc:17 hcondparasciifileio.cc:18 hcondparasciifileio.cc:19 hcondparasciifileio.cc:20 hcondparasciifileio.cc:21 hcondparasciifileio.cc:22 hcondparasciifileio.cc:23 hcondparasciifileio.cc:24 hcondparasciifileio.cc:25 hcondparasciifileio.cc:26 hcondparasciifileio.cc:27 hcondparasciifileio.cc:28 hcondparasciifileio.cc:29 hcondparasciifileio.cc:30 hcondparasciifileio.cc:31 hcondparasciifileio.cc:32 hcondparasciifileio.cc:33 hcondparasciifileio.cc:34 hcondparasciifileio.cc:35 hcondparasciifileio.cc:36 hcondparasciifileio.cc:37 hcondparasciifileio.cc:38 hcondparasciifileio.cc:39 hcondparasciifileio.cc:40 hcondparasciifileio.cc:41 hcondparasciifileio.cc:42 hcondparasciifileio.cc:43 hcondparasciifileio.cc:44 hcondparasciifileio.cc:45 hcondparasciifileio.cc:46 hcondparasciifileio.cc:47 hcondparasciifileio.cc:48 hcondparasciifileio.cc:49 hcondparasciifileio.cc:50 hcondparasciifileio.cc:51 hcondparasciifileio.cc:52 hcondparasciifileio.cc:53 hcondparasciifileio.cc:54 hcondparasciifileio.cc:55 hcondparasciifileio.cc:56 hcondparasciifileio.cc:57 hcondparasciifileio.cc:58 hcondparasciifileio.cc:59 hcondparasciifileio.cc:60 hcondparasciifileio.cc:61 hcondparasciifileio.cc:62 hcondparasciifileio.cc:63 hcondparasciifileio.cc:64 hcondparasciifileio.cc:65 hcondparasciifileio.cc:66 hcondparasciifileio.cc:67 hcondparasciifileio.cc:68 hcondparasciifileio.cc:69 hcondparasciifileio.cc:70 hcondparasciifileio.cc:71 hcondparasciifileio.cc:72 hcondparasciifileio.cc:73 hcondparasciifileio.cc:74 hcondparasciifileio.cc:75 hcondparasciifileio.cc:76 hcondparasciifileio.cc:77 hcondparasciifileio.cc:78 hcondparasciifileio.cc:79 hcondparasciifileio.cc:80 hcondparasciifileio.cc:81 hcondparasciifileio.cc:82 hcondparasciifileio.cc:83 hcondparasciifileio.cc:84 hcondparasciifileio.cc:85 hcondparasciifileio.cc:86 hcondparasciifileio.cc:87 hcondparasciifileio.cc:88 hcondparasciifileio.cc:89 hcondparasciifileio.cc:90 hcondparasciifileio.cc:91 hcondparasciifileio.cc:92 hcondparasciifileio.cc:93 hcondparasciifileio.cc:94 hcondparasciifileio.cc:95 hcondparasciifileio.cc:96 hcondparasciifileio.cc:97 hcondparasciifileio.cc:98 hcondparasciifileio.cc:99 hcondparasciifileio.cc:100 hcondparasciifileio.cc:101 hcondparasciifileio.cc:102 hcondparasciifileio.cc:103 hcondparasciifileio.cc:104 hcondparasciifileio.cc:105 hcondparasciifileio.cc:106 hcondparasciifileio.cc:107 hcondparasciifileio.cc:108 hcondparasciifileio.cc:109 hcondparasciifileio.cc:110 hcondparasciifileio.cc:111 hcondparasciifileio.cc:112 hcondparasciifileio.cc:113 hcondparasciifileio.cc:114 hcondparasciifileio.cc:115 hcondparasciifileio.cc:116 hcondparasciifileio.cc:117 hcondparasciifileio.cc:118 hcondparasciifileio.cc:119 hcondparasciifileio.cc:120 hcondparasciifileio.cc:121 hcondparasciifileio.cc:122 hcondparasciifileio.cc:123 hcondparasciifileio.cc:124 hcondparasciifileio.cc:125 hcondparasciifileio.cc:126 hcondparasciifileio.cc:127 hcondparasciifileio.cc:128 hcondparasciifileio.cc:129 hcondparasciifileio.cc:130 hcondparasciifileio.cc:131 hcondparasciifileio.cc:132 hcondparasciifileio.cc:133 hcondparasciifileio.cc:134 hcondparasciifileio.cc:135 hcondparasciifileio.cc:136 hcondparasciifileio.cc:137 hcondparasciifileio.cc:138 hcondparasciifileio.cc:139 hcondparasciifileio.cc:140 hcondparasciifileio.cc:141 hcondparasciifileio.cc:142 hcondparasciifileio.cc:143 hcondparasciifileio.cc:144 hcondparasciifileio.cc:145 hcondparasciifileio.cc:146 hcondparasciifileio.cc:147 hcondparasciifileio.cc:148 hcondparasciifileio.cc:149 hcondparasciifileio.cc:150 hcondparasciifileio.cc:151 hcondparasciifileio.cc:152 hcondparasciifileio.cc:153 hcondparasciifileio.cc:154 hcondparasciifileio.cc:155 hcondparasciifileio.cc:156 hcondparasciifileio.cc:157 hcondparasciifileio.cc:158 hcondparasciifileio.cc:159 hcondparasciifileio.cc:160 hcondparasciifileio.cc:161 hcondparasciifileio.cc:162 hcondparasciifileio.cc:163 hcondparasciifileio.cc:164 hcondparasciifileio.cc:165 hcondparasciifileio.cc:166 hcondparasciifileio.cc:167 hcondparasciifileio.cc:168 hcondparasciifileio.cc:169 hcondparasciifileio.cc:170 hcondparasciifileio.cc:171 hcondparasciifileio.cc:172 hcondparasciifileio.cc:173 hcondparasciifileio.cc:174 hcondparasciifileio.cc:175 hcondparasciifileio.cc:176 hcondparasciifileio.cc:177 hcondparasciifileio.cc:178 hcondparasciifileio.cc:179 hcondparasciifileio.cc:180 hcondparasciifileio.cc:181 hcondparasciifileio.cc:182 hcondparasciifileio.cc:183 hcondparasciifileio.cc:184 hcondparasciifileio.cc:185 hcondparasciifileio.cc:186 hcondparasciifileio.cc:187 hcondparasciifileio.cc:188 hcondparasciifileio.cc:189 hcondparasciifileio.cc:190 hcondparasciifileio.cc:191 hcondparasciifileio.cc:192 hcondparasciifileio.cc:193 hcondparasciifileio.cc:194 hcondparasciifileio.cc:195 hcondparasciifileio.cc:196 hcondparasciifileio.cc:197 hcondparasciifileio.cc:198 hcondparasciifileio.cc:199 hcondparasciifileio.cc:200 hcondparasciifileio.cc:201 hcondparasciifileio.cc:202 hcondparasciifileio.cc:203 hcondparasciifileio.cc:204 hcondparasciifileio.cc:205 hcondparasciifileio.cc:206 hcondparasciifileio.cc:207 hcondparasciifileio.cc:208 hcondparasciifileio.cc:209 hcondparasciifileio.cc:210 hcondparasciifileio.cc:211 hcondparasciifileio.cc:212 hcondparasciifileio.cc:213 hcondparasciifileio.cc:214 hcondparasciifileio.cc:215 hcondparasciifileio.cc:216 hcondparasciifileio.cc:217 hcondparasciifileio.cc:218 hcondparasciifileio.cc:219 hcondparasciifileio.cc:220 hcondparasciifileio.cc:221 hcondparasciifileio.cc:222 hcondparasciifileio.cc:223 hcondparasciifileio.cc:224 hcondparasciifileio.cc:225 hcondparasciifileio.cc:226 hcondparasciifileio.cc:227 hcondparasciifileio.cc:228 hcondparasciifileio.cc:229 hcondparasciifileio.cc:230 hcondparasciifileio.cc:231 hcondparasciifileio.cc:232 hcondparasciifileio.cc:233 hcondparasciifileio.cc:234 hcondparasciifileio.cc:235 hcondparasciifileio.cc:236 hcondparasciifileio.cc:237 hcondparasciifileio.cc:238 hcondparasciifileio.cc:239 hcondparasciifileio.cc:240 hcondparasciifileio.cc:241 hcondparasciifileio.cc:242 hcondparasciifileio.cc:243 hcondparasciifileio.cc:244 hcondparasciifileio.cc:245 hcondparasciifileio.cc:246 hcondparasciifileio.cc:247 hcondparasciifileio.cc:248 hcondparasciifileio.cc:249 hcondparasciifileio.cc:250 hcondparasciifileio.cc:251 hcondparasciifileio.cc:252 hcondparasciifileio.cc:253 hcondparasciifileio.cc:254 hcondparasciifileio.cc:255 hcondparasciifileio.cc:256 hcondparasciifileio.cc:257 hcondparasciifileio.cc:258 hcondparasciifileio.cc:259 hcondparasciifileio.cc:260 hcondparasciifileio.cc:261 hcondparasciifileio.cc:262 hcondparasciifileio.cc:263 hcondparasciifileio.cc:264 hcondparasciifileio.cc:265 hcondparasciifileio.cc:266 hcondparasciifileio.cc:267 hcondparasciifileio.cc:268 hcondparasciifileio.cc:269 hcondparasciifileio.cc:270 hcondparasciifileio.cc:271 hcondparasciifileio.cc:272 hcondparasciifileio.cc:273 hcondparasciifileio.cc:274 hcondparasciifileio.cc:275 hcondparasciifileio.cc:276 hcondparasciifileio.cc:277 hcondparasciifileio.cc:278 hcondparasciifileio.cc:279 hcondparasciifileio.cc:280 hcondparasciifileio.cc:281 hcondparasciifileio.cc:282 hcondparasciifileio.cc:283 hcondparasciifileio.cc:284 hcondparasciifileio.cc:285 hcondparasciifileio.cc:286 hcondparasciifileio.cc:287 hcondparasciifileio.cc:288 hcondparasciifileio.cc:289 hcondparasciifileio.cc:290 hcondparasciifileio.cc:291 hcondparasciifileio.cc:292 hcondparasciifileio.cc:293 hcondparasciifileio.cc:294 hcondparasciifileio.cc:295 hcondparasciifileio.cc:296 hcondparasciifileio.cc:297 hcondparasciifileio.cc:298 hcondparasciifileio.cc:299 hcondparasciifileio.cc:300 hcondparasciifileio.cc:301 hcondparasciifileio.cc:302 hcondparasciifileio.cc:303 hcondparasciifileio.cc:304 hcondparasciifileio.cc:305 hcondparasciifileio.cc:306 hcondparasciifileio.cc:307 hcondparasciifileio.cc:308