30 std::string GetDemangledTypeName(
const std::type_info &t)
33 char *name = TClassEdit::DemangleName(t.name(), status);
35 if (!name || status != 0)
39 TClassEdit::GetNormalizedName(ret, name);
44 const TInitBehavior *DefineBehavior(
void * ,
51 static TDefaultInitBehavior theDefault;
55 void TCDGIILIBase::SetInstance(::ROOT::TGenericClassInfo& R__instance,
56 NewFunc_t New, NewArrFunc_t NewArray,
57 DelFunc_t Delete, DelArrFunc_t DeleteArray,
59 R__LOCKGUARD(gROOTMutex);
60 R__instance.SetNew(New);
61 R__instance.SetNewArray(NewArray);
62 R__instance.SetDelete(Delete);
63 R__instance.SetDeleteArray(DeleteArray);
64 R__instance.SetDestructor(Destruct);
65 R__instance.SetImplFile(
"", -1);
68 void TCDGIILIBase::SetName(
const std::string& name,
69 std::string& nameMember) {
70 R__LOCKGUARD(gInterpreterMutex);
71 if (nameMember.empty()) {
72 TClassEdit::GetNormalizedName(nameMember, name);
76 void TCDGIILIBase::SetfgIsA(atomic_TClass_ptr& isA, TClass*(*dictfun)()) {
78 R__LOCKGUARD(gInterpreterMutex);
85 TGenericClassInfo::TGenericClassInfo(
const char *fullClassname,
86 const char *declFileName, Int_t declFileLine,
87 const std::type_info &info,
const Internal::TInitBehavior *action,
88 DictFuncPtr_t dictionary,
89 TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof)
90 : fAction(action), fClass(0), fClassName(fullClassname),
91 fDeclFileName(declFileName), fDeclFileLine(declFileLine),
92 fDictionary(dictionary), fInfo(info),
93 fImplFileName(0), fImplFileLine(0),
96 fMerge(0),fResetAfterMerge(0),fNew(0),fNewArray(0),fDelete(0),fDeleteArray(0),fDestructor(0), fDirAutoAdd(0), fStreamer(0),
97 fStreamerFunc(0), fConvStreamerFunc(0), fCollectionProxy(0), fSizeof(sizof), fPragmaBits(pragmabits),
98 fCollectionProxyInfo(0), fCollectionStreamerInfo(0)
105 TGenericClassInfo::TGenericClassInfo(
const char *fullClassname, Int_t version,
106 const char *declFileName, Int_t declFileLine,
107 const std::type_info &info,
const Internal::TInitBehavior *action,
108 DictFuncPtr_t dictionary,
109 TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof)
110 : fAction(action), fClass(0), fClassName(fullClassname),
111 fDeclFileName(declFileName), fDeclFileLine(declFileLine),
112 fDictionary(dictionary), fInfo(info),
113 fImplFileName(0), fImplFileLine(0),
116 fMerge(0),fResetAfterMerge(0),fNew(0),fNewArray(0),fDelete(0),fDeleteArray(0),fDestructor(0), fDirAutoAdd(0), fStreamer(0),
117 fStreamerFunc(0), fConvStreamerFunc(0), fCollectionProxy(0), fSizeof(sizof), fPragmaBits(pragmabits),
118 fCollectionProxyInfo(0), fCollectionStreamerInfo(0)
126 class TForNamespace {};
128 TGenericClassInfo::TGenericClassInfo(
const char *fullClassname, Int_t version,
129 const char *declFileName, Int_t declFileLine,
130 const Internal::TInitBehavior *action,
131 DictFuncPtr_t dictionary, Int_t pragmabits)
132 : fAction(action), fClass(0), fClassName(fullClassname),
133 fDeclFileName(declFileName), fDeclFileLine(declFileLine),
134 fDictionary(dictionary), fInfo(typeid(TForNamespace)),
135 fImplFileName(0), fImplFileLine(0),
138 fMerge(0),fResetAfterMerge(0),fNew(0),fNewArray(0),fDelete(0),fDeleteArray(0),fDestructor(0), fDirAutoAdd(0), fStreamer(0),
139 fStreamerFunc(0), fConvStreamerFunc(0), fCollectionProxy(0), fSizeof(0), fPragmaBits(pragmabits),
140 fCollectionProxyInfo(0), fCollectionStreamerInfo(0)
196 void TGenericClassInfo::Init(Int_t pragmabits)
201 if (fVersion==-2) fVersion = TVirtualStreamerInfo::Class_Version();
202 if (!fAction)
return;
203 GetAction().Register(fClassName,
210 TGenericClassInfo::~TGenericClassInfo()
214 delete fCollectionProxyInfo;
215 delete fCollectionStreamerInfo;
217 if (!fClass)
delete fIsA;
219 using ROOT::Internal::gROOTLocal;
220 if (!gROOTLocal || !gROOTLocal->Initialized() || !gROOTLocal->GetListOfClasses())
return;
221 if (fAction) GetAction().Unregister(GetClassName());
224 const Internal::TInitBehavior &TGenericClassInfo::GetAction()
const
231 TClass *TGenericClassInfo::GetClass()
242 ::Fatal(
"TClass::TClass",
"ROOT system not initialized");
244 if (!fClass && fAction) {
245 R__LOCKGUARD(gInterpreterMutex);
248 if (fClass)
return fClass;
250 fClass = GetAction().CreateClass(GetClassName(),
258 if (fPragmaBits & TClassTable::kHasCustomStreamerMember) {
259 fClass->SetBit(TClass::kHasCustomStreamerMember);
261 fClass->SetNew(fNew);
262 fClass->SetNewArray(fNewArray);
263 fClass->SetDelete(fDelete);
264 fClass->SetDeleteArray(fDeleteArray);
265 fClass->SetDestructor(fDestructor);
266 fClass->SetDirectoryAutoAdd(fDirAutoAdd);
267 fClass->SetStreamerFunc(fStreamerFunc);
268 fClass->SetConvStreamerFunc(fConvStreamerFunc);
269 fClass->SetMerge(fMerge);
270 fClass->SetResetAfterMerge(fResetAfterMerge);
271 fClass->AdoptStreamer(fStreamer); fStreamer = 0;
274 if (!fClass->IsZombie()) {
275 if (fCollectionProxy) fClass->CopyCollectionProxy(*fCollectionProxy);
276 else if (fCollectionProxyInfo) {
277 fClass->SetCollectionProxy(*fCollectionProxyInfo);
280 fClass->SetClassSize(fSizeof);
286 CreateRuleSet( fReadRules,
true );
287 CreateRuleSet( fReadRawRules,
false );
295 void TGenericClassInfo::CreateRuleSet( std::vector<Internal::TSchemaHelper>& vect,
296 Bool_t ProcessReadRules )
298 if ( vect.empty() ) {
306 TSchemaRuleSet* rset = fClass->GetSchemaRules( kTRUE );
314 std::vector<Internal::TSchemaHelper>::iterator it;
315 for( it = vect.begin(); it != vect.end(); ++it ) {
316 rule =
new TSchemaRule();
317 rule->SetTarget( it->fTarget );
318 rule->SetTargetClass( fClass->GetName() );
319 rule->SetSourceClass( it->fSourceClass );
320 rule->SetSource( it->fSource );
321 rule->SetCode( it->fCode );
322 rule->SetVersion( it->fVersion );
323 rule->SetChecksum( it->fChecksum );
324 rule->SetEmbed( it->fEmbed );
325 rule->SetInclude( it->fInclude );
326 rule->SetAttributes( it->fAttributes );
328 if( ProcessReadRules ) {
329 rule->SetRuleType( TSchemaRule::kReadRule );
330 rule->SetReadFunctionPointer( (TSchemaRule::ReadFuncPtr_t)it->fFunctionPtr );
333 rule->SetRuleType( TSchemaRule::kReadRawRule );
334 rule->SetReadRawFunctionPointer( (TSchemaRule::ReadRawFuncPtr_t)it->fFunctionPtr );
336 if( !rset->AddRule( rule, TSchemaRuleSet::kCheckAll, &errmsg ) ) {
337 ::Warning(
"TGenericClassInfo",
"The rule for class: \"%s\": version, \"%s\" and data members: \"%s\" has been skipped because %s.",
338 GetClassName(), it->fVersion.c_str(), it->fTarget.c_str(), errmsg.Data() );
344 const char *TGenericClassInfo::GetClassName()
const
352 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionProxyInfo()
const
356 return fCollectionProxyInfo;
359 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionStreamerInfo()
const
363 return fCollectionProxyInfo;
366 const std::type_info &TGenericClassInfo::GetInfo()
const
373 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRawRules()
const
377 return fReadRawRules;
381 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRules()
const
387 void TGenericClassInfo::SetFromTemplate()
391 TNamed *info = ROOT::RegisterClassTemplate(GetClassName(), 0, 0);
392 if (info) SetImplFile(info->GetTitle(), info->GetUniqueID());
395 Int_t TGenericClassInfo::SetImplFile(
const char *file, Int_t line)
399 fImplFileName = file;
400 fImplFileLine = line;
401 if (fClass) fClass->AddImplFile(file,line);
405 Int_t TGenericClassInfo::SetDeclFile(
const char *file, Int_t line)
409 fDeclFileName = file;
410 fDeclFileLine = line;
411 if (fClass) fClass->SetDeclFile(file,line);
415 Short_t TGenericClassInfo::SetVersion(Short_t version)
419 ROOT::ResetClassVersion(fClass, GetClassName(),version);
424 void TGenericClassInfo::AdoptCollectionProxyInfo(TCollectionProxyInfo *info)
429 delete fCollectionProxyInfo;;
430 fCollectionProxyInfo = info;
433 void TGenericClassInfo::AdoptCollectionStreamerInfo(TCollectionProxyInfo *info)
438 delete fCollectionStreamerInfo;
439 fCollectionStreamerInfo = info;
442 Short_t TGenericClassInfo::AdoptStreamer(TClassStreamer *streamer)
447 delete fStreamer; fStreamer = 0;
449 fClass->AdoptStreamer(streamer);
451 fStreamer = streamer;
456 Short_t TGenericClassInfo::AdoptCollectionProxy(TVirtualCollectionProxy *collProxy)
461 delete fCollectionProxy; fCollectionProxy = 0;
462 fCollectionProxy = collProxy;
463 if (fClass && fCollectionProxy && !fClass->IsZombie()) {
464 fClass->CopyCollectionProxy(*fCollectionProxy);
469 void TGenericClassInfo::SetReadRawRules(
const std::vector<Internal::TSchemaHelper>& rules )
472 fReadRawRules = rules;
476 void TGenericClassInfo::SetReadRules(
const std::vector<Internal::TSchemaHelper>& rules )
482 Short_t TGenericClassInfo::SetStreamer(ClassStreamerFunc_t streamer)
486 delete fStreamer; fStreamer = 0;
488 fClass->AdoptStreamer(
new TClassStreamer(streamer));
490 fStreamer =
new TClassStreamer(streamer);
495 void TGenericClassInfo::SetStreamerFunc(ClassStreamerFunc_t streamer)
499 fStreamerFunc = streamer;
500 if (fClass) fClass->SetStreamerFunc(streamer);
503 void TGenericClassInfo::SetConvStreamerFunc(ClassConvStreamerFunc_t streamer)
507 fConvStreamerFunc = streamer;
508 if (fClass) fClass->SetConvStreamerFunc(streamer);
511 const char *TGenericClassInfo::GetDeclFileName()
const
515 return fDeclFileName;
518 Int_t TGenericClassInfo::GetDeclFileLine()
const
522 return fDeclFileLine;
525 const char *TGenericClassInfo::GetImplFileName()
529 if (!fImplFileName) SetFromTemplate();
530 return fImplFileName;
533 Int_t TGenericClassInfo::GetImplFileLine()
537 if (!fImplFileLine) SetFromTemplate();
538 return fImplFileLine;
541 Int_t TGenericClassInfo::GetVersion()
const
548 TClass *TGenericClassInfo::IsA(
const void *obj)
552 return (*GetIsA())(obj);
555 TVirtualIsAProxy* TGenericClassInfo::GetIsA()
const
562 void TGenericClassInfo::SetNew(NewFunc_t newFunc)
567 if (fClass) fClass->SetNew(fNew);
570 void TGenericClassInfo::SetNewArray(NewArrFunc_t newArrayFunc)
574 fNewArray = newArrayFunc;
575 if (fClass) fClass->SetNewArray(fNewArray);
578 void TGenericClassInfo::SetDelete(DelFunc_t deleteFunc)
582 fDelete = deleteFunc;
583 if (fClass) fClass->SetDelete(fDelete);
586 void TGenericClassInfo::SetDeleteArray(DelArrFunc_t deleteArrayFunc)
590 fDeleteArray = deleteArrayFunc;
591 if (fClass) fClass->SetDeleteArray(fDeleteArray);
594 void TGenericClassInfo::SetDestructor(DesFunc_t destructorFunc)
598 fDestructor = destructorFunc;
599 if (fClass) fClass->SetDestructor(fDestructor);
602 void TGenericClassInfo::SetDirectoryAutoAdd(DirAutoAdd_t func)
607 if (fClass) fClass->SetDirectoryAutoAdd(fDirAutoAdd);
610 void TGenericClassInfo::SetMerge(MergeFunc_t func)
615 if (fClass) fClass->SetMerge(fMerge);
618 void TGenericClassInfo::SetResetAfterMerge(ResetAfterMergeFunc_t func)
622 fResetAfterMerge = func;
623 if (fClass) fClass->SetResetAfterMerge(fResetAfterMerge);
626 NewFunc_t TGenericClassInfo::GetNew()
const
633 NewArrFunc_t TGenericClassInfo::GetNewArray()
const
640 DelFunc_t TGenericClassInfo::GetDelete()
const
647 DelArrFunc_t TGenericClassInfo::GetDeleteArray()
const
654 DesFunc_t TGenericClassInfo::GetDestructor()
const
661 DirAutoAdd_t TGenericClassInfo::GetDirectoryAutoAdd()
const