26 TVirtualStreamerInfo *TVirtualStreamerInfo::fgInfoFactory = 0;
28 Bool_t TVirtualStreamerInfo::fgCanDelete = kTRUE;
29 Bool_t TVirtualStreamerInfo::fgOptimize = kTRUE;
30 Bool_t TVirtualStreamerInfo::fgStreamMemberWise = kTRUE;
32 ClassImp(TVirtualStreamerInfo);
37 TVirtualStreamerInfo::TVirtualStreamerInfo() : fOptimized(kFALSE), fIsBuilt(kFALSE), fIsCompiled(kFALSE)
44 TVirtualStreamerInfo::TVirtualStreamerInfo(TClass *cl)
45 : TNamed(cl->GetName(),
""), fOptimized(kFALSE), fIsBuilt(kFALSE), fIsCompiled(kFALSE)
52 TVirtualStreamerInfo::TVirtualStreamerInfo(
const TVirtualStreamerInfo& info)
53 : TNamed(info), fOptimized(kFALSE), fIsBuilt(kFALSE), fIsCompiled(kFALSE)
60 TVirtualStreamerInfo& TVirtualStreamerInfo::operator=(
const TVirtualStreamerInfo& info)
63 TNamed::operator=(info);
71 TVirtualStreamerInfo::~TVirtualStreamerInfo()
78 Bool_t TVirtualStreamerInfo::CanDelete()
86 Bool_t TVirtualStreamerInfo::CanOptimize()
99 const char *TVirtualStreamerInfo::GetElementCounterStart(
const char *dmTitle)
101 for (
const char *lbracket = dmTitle; *lbracket; ++lbracket) {
103 if ( (*lbracket) ==
'[' )
return lbracket;
104 if ( (*lbracket) !=
'/' && !isspace(*lbracket) ) {
117 TStreamerBasicType *TVirtualStreamerInfo::GetElementCounter(
const char *countName, TClass *cl)
119 TVirtualStreamerInfo *info;
121 R__LOCKGUARD(gInterpreterMutex);
122 const TObjArray *sinfos = cl->GetStreamerInfos();
123 info = (TVirtualStreamerInfo *)sinfos->At(cl->GetClassVersion());
126 if (!info || !info->IsCompiled()) {
136 info = cl->GetStreamerInfo();
139 TStreamerElement *element = (TStreamerElement *)info->GetElements()->FindObject(countName);
140 if (!element)
return 0;
141 if (element->IsA() == TStreamerBasicType::Class())
return (TStreamerBasicType*)element;
155 Bool_t TVirtualStreamerInfo::GetStreamMemberWise()
157 return fgStreamMemberWise;
167 void TVirtualStreamerInfo::Optimize(Bool_t opt)
177 TVirtualStreamerInfo *TVirtualStreamerInfo::Factory()
179 if (!fgInfoFactory) {
180 R__LOCKGUARD(gInterpreterMutex);
182 if ((h = gROOT->GetPluginManager()->FindHandler(
"TVirtualStreamerInfo",
"TStreamerInfo"))) {
183 if (h->LoadPlugin() == -1) {
184 ::Fatal(
"TVirtualStreamerInfo::Factory",
185 "The plugin handler for TVirtualStreamerInfo was found but failed to load!");
187 fgInfoFactory = (TVirtualStreamerInfo*) h->ExecPlugin(0);
188 if (fgInfoFactory == 0) {
189 ::Fatal(
"TVirtualStreamerInfo::Factory",
190 "The plugin handler for TVirtualStreamerInfo was found but failed to create the factory object!");
193 TString filename(
"$ROOTSYS/etc/plugins/TVirtualStreamerInfo");
194 gSystem->ExpandPathName(filename);
195 if (gSystem->AccessPathName(filename)) {
196 ::Fatal(
"TVirtualStreamerInfo::Factory",
197 "Cannot find the plugin handler for TVirtualStreamerInfo! "
198 "$ROOTSYS/etc/plugins/TVirtualStreamerInfo does not exist "
199 "or is inaccessible.");
201 ::Fatal(
"TVirtualStreamerInfo::Factory",
202 "Cannot find the plugin handler for TVirtualStreamerInfo! "
203 "However $ROOTSYS/etc/plugins/TVirtualStreamerInfo is accessible, "
204 "Check the content of this directory!");
209 return fgInfoFactory;
220 void TVirtualStreamerInfo::SetCanDelete(Bool_t opt)
228 void TVirtualStreamerInfo::SetFactory(TVirtualStreamerInfo *factory)
230 R__LOCKGUARD(gInterpreterMutex);
231 auto old = fgInfoFactory;
232 fgInfoFactory = factory;
243 Bool_t TVirtualStreamerInfo::SetStreamMemberWise(Bool_t enable)
249 Bool_t prev = fgStreamMemberWise;
250 fgStreamMemberWise = enable;
257 void TVirtualStreamerInfo::Streamer(TBuffer &R__b)
259 TNamed::Streamer(R__b);