using namespace std;
#include "hcontfact.h"
#include "hades.h"
#include "hruntimedb.h"
#include "TObjString.h"
#include <iostream>
#include <iomanip>
ClassImp(HContainer)
ClassImp(HContFact)
HContainer::HContainer() { contexts=0; }
HContainer::HContainer(const Char_t* name, const Char_t* title,
const Char_t* defContext)
: TNamed(name, title) {
contexts=new TList;
addContext(defContext);
actualContext="";
}
HContainer::~HContainer() {
if (contexts) {
contexts->Delete();
delete contexts;
}
}
void HContainer::addContext(const Char_t* name) {
TObjString* c=new TObjString(name);
contexts->Add(c);
}
Bool_t HContainer::setActualContext(const Char_t* c) {
if (contexts->FindObject(c)) {
if (actualContext.IsNull()) actualContext=c;
else Warning("addContext",
"Actual context of parameter container %s already defined as %s",
GetName(),actualContext.Data());
return kTRUE;
}
return kFALSE;
}
const Char_t* HContainer::getDefaultContext() {
return ((TObjString*)contexts->At(0))->String().Data();
}
void HContainer::print() {
cout<<fName<<"\t"<<fTitle<<"\n";
if (!actualContext.IsNull()) cout<<" actual context: "<<actualContext<<"\n";
else {
TIter next(contexts);
Int_t i=0;
TObjString* c;
cout<<" all contexts:"<<"\n";
while ((c=(TObjString*)next())) {
if (c->String().IsNull()) cout<<" \"\"";
else cout<<" "<<c->String();
if (i==0) cout<<"\t default";
cout<<"\n";
i++;
}
}
}
TString HContainer::getConcatName() {
TString cn=fName;
if (!actualContext.IsNull() && actualContext!=((TObjString*)contexts->At(0))->String()) {
cn+="_";
cn+=actualContext;
}
return cn;
}
const Char_t* HContainer::getContext() {
if (!actualContext.IsNull()) return actualContext.Data();
else return getDefaultContext();
}
HContFact::HContFact() : TNamed() {
containers=new TList;
}
HContFact::~HContFact() {
containers->Delete();
delete containers;
}
Bool_t HContFact::addContext(const Char_t* name) {
HContainer* c=0;
Bool_t found=kFALSE;
TIter next(containers);
while ((c=(HContainer*)next())) {
if (c->setActualContext(name)) found=kTRUE;
}
return found;
}
HParSet* HContFact::getContainer(const Char_t* name) {
HContainer* c=(HContainer*)(containers->FindObject(name));
HParSet* cont=0;
if (c) {
TString cn=c->getConcatName();
HRuntimeDb* rtdb=gHades->getRuntimeDb();
if (!(cont=rtdb->findContainer(c->getConcatName().Data()))) {
if (strlen(c->getActualContext())==0) c->setActualContext(c->getDefaultContext());
cont=createContainer(c);
if (cont) rtdb->addContainer(cont);
else Error("getContainer(const Char_t* name)","Container %s not created",name);
}
}
return cont;
}
void HContFact::print() {
cout<<"---------------------------------------------------------------------------"<<"\n";
cout<<GetName()<<": "<<GetTitle()<<"\n";
cout<<"---------------------------------------------------------------------------"<<"\n";
HContainer* c;
TIter next(containers);
while ((c=(HContainer*)next())) c->print();
}
Last change: Sat May 22 12:54:04 2010
Last generated: 2010-05-22 12:54
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.