Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGenericClassInfo.cxx
Go to the documentation of this file.
1// @(#)root/meta:$Id$
2// Author: Philippe Canal 08/05/2002
3
4/*************************************************************************
5 * Copyright (C) 1995-2002, Rene Brun, Fons Rademakers and al. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#include "TROOT.h"
13#include "TClass.h"
14#include "TClassEdit.h"
15#include "TDictAttributeMap.h"
17#include "TStreamer.h"
18#include "TVirtualIsAProxy.h"
21#include "TSchemaRule.h"
22#include "TSchemaRuleSet.h"
23#include "TError.h"
24#include "TVirtualMutex.h"
25#include "TInterpreter.h"
26#include "TClassTable.h"
27
28namespace ROOT {
29namespace Internal {
30
31 std::string GetDemangledTypeName(const std::type_info &t)
32 {
33 int status = 0;
34 char *name = TClassEdit::DemangleName(t.name(), status);
35
36 if (!name || status != 0)
37 return "";
38
39 std::string ret;
41 free(name);
42 return ret;
43 }
44
45 const TInitBehavior *DefineBehavior(void * /*parent_type*/,
46 void * /*actual_type*/)
47 {
48
49 // This function loads the default behavior for the
50 // loading of classes.
51
53 return &theDefault;
54 }
55
56 void TCDGIILIBase::SetInstance(::ROOT::TGenericClassInfo& R__instance,
57 NewFunc_t New, NewArrFunc_t NewArray,
58 DelFunc_t Delete, DelArrFunc_t DeleteArray,
59 DesFunc_t Destruct) {
61 R__instance.SetNew(New);
62 R__instance.SetNewArray(NewArray);
63 R__instance.SetDelete(Delete);
64 R__instance.SetDeleteArray(DeleteArray);
65 R__instance.SetDestructor(Destruct);
66 R__instance.SetImplFile("", -1);
67 }
68
69 void TCDGIILIBase::SetName(const std::string& name,
70 std::string& nameMember) {
72 if (nameMember.empty()) {
74 }
75 }
76
83} // Internal
84
85
86 TGenericClassInfo::TGenericClassInfo(const char *fullClassname,
87 const char *declFileName, Int_t declFileLine,
88 const std::type_info &info, const Internal::TInitBehavior *action,
91 : fAction(action), fClass(nullptr), fClassName(fullClassname),
92 fDeclFileName(declFileName), fDeclFileLine(declFileLine),
94 fImplFileName(nullptr), fImplFileLine(0),
95 fIsA(isa),
96 fVersion(1),
97 fMerge(nullptr),fResetAfterMerge(nullptr),fNew(nullptr),fNewArray(nullptr),fDelete(nullptr),fDeleteArray(nullptr),fDestructor(nullptr), fDirAutoAdd(nullptr), fStreamer(nullptr),
98 fStreamerFunc(nullptr), fConvStreamerFunc(nullptr), fCollectionProxy(nullptr), fSizeof(sizof), fPragmaBits(pragmabits),
100 {
101 // Constructor.
102
103 Init(pragmabits);
104 }
105
106 TGenericClassInfo::TGenericClassInfo(const char *fullClassname, Int_t version,
107 const char *declFileName, Int_t declFileLine,
108 const std::type_info &info, const Internal::TInitBehavior *action,
111 : fAction(action), fClass(nullptr), fClassName(fullClassname),
112 fDeclFileName(declFileName), fDeclFileLine(declFileLine),
113 fDictionary(dictionary), fInfo(info),
114 fImplFileName(nullptr), fImplFileLine(0),
115 fIsA(isa),
116 fVersion(version),
117 fMerge(nullptr),fResetAfterMerge(nullptr),fNew(nullptr),fNewArray(nullptr),fDelete(nullptr),fDeleteArray(nullptr),fDestructor(nullptr), fDirAutoAdd(nullptr), fStreamer(nullptr),
118 fStreamerFunc(nullptr), fConvStreamerFunc(nullptr), fCollectionProxy(nullptr), fSizeof(sizof), fPragmaBits(pragmabits),
120
121 {
122 // Constructor with version number and no showmembers.
123
124 Init(pragmabits);
125 }
126
127 class TForNamespace {}; // Dummy class to give a typeid to namespace (See also TClassTable.cc)
128
129 TGenericClassInfo::TGenericClassInfo(const char *fullClassname, Int_t version,
130 const char *declFileName, Int_t declFileLine,
131 const Internal::TInitBehavior *action,
133 : fAction(action), fClass(nullptr), fClassName(fullClassname),
134 fDeclFileName(declFileName), fDeclFileLine(declFileLine),
135 fDictionary(dictionary), fInfo(typeid(TForNamespace)),
136 fImplFileName(nullptr), fImplFileLine(0),
137 fIsA(nullptr),
138 fVersion(version),
139 fMerge(nullptr),fResetAfterMerge(nullptr),fNew(nullptr),fNewArray(nullptr),fDelete(nullptr),fDeleteArray(nullptr),fDestructor(nullptr), fDirAutoAdd(nullptr), fStreamer(nullptr),
140 fStreamerFunc(nullptr), fConvStreamerFunc(nullptr), fCollectionProxy(nullptr), fSizeof(0), fPragmaBits(pragmabits),
142
143 {
144 // Constructor for namespace
145
147 }
148
149 /* TGenericClassInfo::TGenericClassInfo(const TGenericClassInfo& gci) :
150 fAction(gci.fAction),
151 fClass(gci.fClass),
152 fClassName(gci.fClassName),
153 fDeclFileName(gci.fDeclFileName),
154 fDeclFileLine(gci.fDeclFileLine),
155 fDictionary(gci.fDictionary),
156 fInfo(gci.fInfo),
157 fImplFileName(gci.fImplFileName),
158 fImplFileLine(gci.fImplFileLine),
159 fIsA(gci.fIsA),
160 fVersion(gci.fVersion),
161 fNew(gci.fNew),
162 fNewArray(gci.fNewArray),
163 fDelete(gci.fDelete),
164 fDeleteArray(gci.fDeleteArray),
165 fDestructor(gci.fDestructor),
166 fStreamer(gci.fStreamer),
167 fCollectionProxy(gci.fCollectionProxy),
168 fSizeof(gci.fSizeof)
169 { }
170
171 TGenericClassInfo& TGenericClassInfo::operator=(const TGenericClassInfo& gci)
172 {
173 if(this!=&gci) {
174 fAction=gci.fAction;
175 fClass=gci.fClass;
176 fClassName=gci.fClassName;
177 fDeclFileName=gci.fDeclFileName;
178 fDeclFileLine=gci.fDeclFileLine;
179 fDictionary=gci.fDictionary;
180 fInfo=gci.fInfo;
181 fImplFileName=gci.fImplFileName;
182 fImplFileLine=gci.fImplFileLine;
183 fIsA=gci.fIsA;
184 fVersion=gci.fVersion;
185 fNew=gci.fNew;
186 fNewArray=gci.fNewArray;
187 fDelete=gci.fDelete;
188 fDeleteArray=gci.fDeleteArray;
189 fDestructor=gci.fDestructor;
190 fStreamer=gci.fStreamer;
191 fCollectionProxy=gci.fCollectionProxy;
192 fSizeof=gci.fSizeof;
193 } return *this;
194 }
195 */
196
197 void TGenericClassInfo::Init(Int_t pragmabits)
198 {
199 // Initilization routine.
200
201 //TVirtualStreamerInfo::Class_Version MUST be the same as TStreamerInfo::Class_Version
202 if (fVersion==-2) fVersion = TVirtualStreamerInfo::Class_Version();
203 if (!fAction) return;
204 GetAction().Register(fClassName,
205 fVersion,
206 fInfo, // typeid(RootClass),
208 pragmabits);
209 }
210
211 TGenericClassInfo::~TGenericClassInfo()
212 {
213 // Destructor.
214
217 delete fStreamer;
218 if (!fClass)
219 delete fIsA; // fIsA is adopted by the class if any.
220 fIsA = nullptr;
223 return;
224 for(auto alt : fAlternate)
226 if (fAction)
227 GetAction().Unregister(GetClassName(), fClass);
228 }
229
230 const Internal::TInitBehavior &TGenericClassInfo::GetAction() const
231 {
232 // Return the creator action.
233
234 return *fAction;
235 }
236
237 TClass *TGenericClassInfo::GetClass()
238 {
239 // Generate and return the TClass object.
240
241 // First make sure that TROOT is initialized, do this before checking
242 // for fClass. If the request is for the TClass of TObject and TROOT
243 // is not initialized, the TROOT creation (because of the ROOT pcm files)
244 // will lead to its own request of the TClass for TObject and thus
245 // upon returning, the TClass for TObject will have already been created
246 // and fClass will have been set.
247 if (!gROOT)
248 ::Fatal("TClass::TClass", "ROOT system not initialized");
249
250 if (gROOT->TestBit(kInvalidObject)) {
251 if (gDebug > 1)
252 ::Warning("TClass::TClass", "ROOT system is being torn down");
253 // We are at the end of time, let's do the minimum, silently.
254 return new TClass(GetClassName(), true);
255 }
256
257 if (!fClass && fAction) {
259 // Check again, while we waited for the lock, something else might
260 // have set fClass.
261 if (fClass) return fClass;
262
263 fClass = GetAction().CreateClass(GetClassName(),
264 GetVersion(),
265 GetInfo(),
266 GetIsA(),
267 GetDeclFileName(),
268 GetImplFileName(),
269 GetDeclFileLine(),
270 GetImplFileLine());
272 fClass->fHasCustomStreamerMember = true;
273 }
274 fClass->SetNew(fNew);
275 fClass->SetNewArray(fNewArray);
276 fClass->SetDelete(fDelete);
277 fClass->SetDeleteArray(fDeleteArray);
278 fClass->SetDestructor(fDestructor);
279 fClass->SetDirectoryAutoAdd(fDirAutoAdd);
280 fClass->SetStreamerFunc(fStreamerFunc);
281 fClass->SetConvStreamerFunc(fConvStreamerFunc);
282 fClass->SetMerge(fMerge);
283 fClass->SetResetAfterMerge(fResetAfterMerge);
284 fClass->AdoptStreamer(fStreamer);
285 fStreamer = nullptr;
286 for (const auto &[name, strm] : fAdoptedMemberStreamers)
287 fClass->AdoptMemberStreamer(name.c_str(), strm);
289 // If IsZombie is true, something went wrong and we will not be
290 // able to properly copy the collection proxy
291 if (!fClass->IsZombie()) {
292 if (fCollectionProxy) fClass->CopyCollectionProxy(*fCollectionProxy);
293 else if (fCollectionProxyInfo) {
294 fClass->SetCollectionProxy(*fCollectionProxyInfo);
295 }
296 }
297 fClass->SetClassSize(fSizeof);
298
299 //---------------------------------------------------------------------
300 // Attach the schema evolution information
301 ///////////////////////////////////////////////////////////////////////
302
303 CreateRuleSet( fReadRules, true );
305
307 fClass->CreateAttributeMap();
308 // The force-split and force-unsplit flags are mutually exclusive
312 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "false");
314 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "true");
315 }
316 }
317 }
318 return fClass;
319 }
320
321 /////////////////////////////////////////////////////////////////////////////
322 /// Attach the schema evolution information to TClassObject
323
324 void TGenericClassInfo::CreateRuleSet( std::vector<Internal::TSchemaHelper>& vect,
326 {
327 if ( vect.empty() ) {
328 return;
329 }
330
331 //------------------------------------------------------------------------
332 // Get the rules set
333 //////////////////////////////////////////////////////////////////////////
334
335 TSchemaRuleSet* rset = fClass->GetSchemaRules( kTRUE );
336
337 //------------------------------------------------------------------------
338 // Process the rules
339 //////////////////////////////////////////////////////////////////////////
340
341 TSchemaRule* rule;
343 std::vector<Internal::TSchemaHelper>::iterator it;
344 for( it = vect.begin(); it != vect.end(); ++it ) {
345 rule = new TSchemaRule(ProcessReadRules ? TSchemaRule::kReadRule : TSchemaRule::kReadRawRule,
346 fClass->GetName(), *it);
347
348 if (!rset->AddRule(rule, TSchemaRuleSet::kCheckAll, &errmsg)) {
349 ::Warning( "TGenericClassInfo", "The rule for class: \"%s\": version, \"%s\" and data members: \"%s\" has been skipped because %s.",
350 GetClassName(), it->fVersion.c_str(), it->fTarget.c_str(), errmsg.Data() );
351 delete rule;
352 }
353 }
354 }
355
356 const char *TGenericClassInfo::GetClassName() const
357 {
358 // Return the class name
359
360 return fClassName;
361 }
362
363
364 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionProxyInfo() const
365 {
366 // Return the set of info we have for the CollectionProxy, if any
367
369 }
370
371 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionStreamerInfo() const
372 {
373 // Return the set of info we have for the Collection Streamer, if any
374
376 }
377
378 const std::type_info &TGenericClassInfo::GetInfo() const
379 {
380 // Return the typeinfo value
381
382 return fInfo;
383 }
384
385 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRawRules() const
386 {
387 // Return the list of rule give raw access to the TBuffer.
388
389 return fReadRawRules;
390 }
391
392
393 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRules() const
394 {
395 // Return the list of Data Model Evolution regular read rules.
396 return fReadRules;
397 }
398
399 void TGenericClassInfo::SetFromTemplate()
400 {
401 // Import the information from the class template.
402
403 TNamed *info = ROOT::RegisterClassTemplate(GetClassName(), nullptr, 0);
404 if (info) SetImplFile(info->GetTitle(), info->GetUniqueID());
405 }
406
407 Int_t TGenericClassInfo::SetImplFile(const char *file, Int_t line)
408 {
409 // Set the name of the implementation file.
410
411 fImplFileName = file;
412 fImplFileLine = line;
413 if (fClass) fClass->AddImplFile(file,line);
414 return 0;
415 }
416
417 Int_t TGenericClassInfo::SetDeclFile(const char *file, Int_t line)
418 {
419 // Set the name of the declaration file.
420
421 fDeclFileName = file;
422 fDeclFileLine = line;
423 if (fClass) fClass->SetDeclFile(file,line);
424 return 0;
425 }
426
427 Short_t TGenericClassInfo::SetVersion(Short_t version)
428 {
429 // Set a class version number.
430
431 ROOT::ResetClassVersion(fClass, GetClassName(),version);
432 fVersion = version;
433 return version;
434 }
435
436 void TGenericClassInfo::AdoptAlternate(ROOT::TClassAlt *alt)
437 {
438 fAlternate.push_back(alt);
439 }
440
441 /// Returns false if the member streamer could not be adopted (this happens if the underlying TClass had its
442 /// StreamerInfo compiled already).
443 bool TGenericClassInfo::AdoptMemberStreamer(const char *name, TMemberStreamer *strm)
444 {
445 if (fClass) {
447 return fClass->AdoptMemberStreamer(name, strm);
448 }
449
450 auto [it, inserted] = fAdoptedMemberStreamers.emplace(name, strm);
451 if (!inserted) {
452 delete it->second;
453 it->second = strm;
454 }
455 return true;
456 }
457
458 void TGenericClassInfo::AdoptCollectionProxyInfo(TCollectionProxyInfo *info)
459 {
460 // Set the info for the CollectionProxy and take ownership of the object
461 // being passed
462
465 }
466
467 void TGenericClassInfo::AdoptCollectionStreamerInfo(TCollectionProxyInfo *info)
468 {
469 // Set the info for the Collection Streamer and take ownership of the object
470 // being passed
471
474 }
475
476 Short_t TGenericClassInfo::AdoptStreamer(TClassStreamer *streamer)
477 {
478 // Set a Streamer object. The streamer object is now 'owned'
479 // by the TGenericClassInfo.
480
481 delete fStreamer; fStreamer = nullptr;
482 if (fClass) {
483 fClass->AdoptStreamer(streamer);
484 } else {
485 fStreamer = streamer;
486 }
487 return 0;
488 }
489
490 Short_t TGenericClassInfo::AdoptCollectionProxy(TVirtualCollectionProxy *collProxy)
491 {
492 // Set the CollectProxy object. The CollectionProxy object is now 'owned'
493 // by the TGenericClassInfo.
494
495 delete fCollectionProxy; fCollectionProxy = nullptr;
496 fCollectionProxy = collProxy;
497 if (fClass && fCollectionProxy && !fClass->IsZombie()) {
498 fClass->CopyCollectionProxy(*fCollectionProxy);
499 }
500 return 0;
501 }
502
503 void TGenericClassInfo::SetReadRawRules( const std::vector<Internal::TSchemaHelper>& rules )
504 {
505 // Set the list of Data Model Evolution read rules giving direct access to the TBuffer.
507 }
508
509
510 void TGenericClassInfo::SetReadRules( const std::vector<Internal::TSchemaHelper>& rules )
511 {
512 // Set the list of Data Model Evolution regular read rules.
514 }
515
516 Short_t TGenericClassInfo::SetStreamer(ClassStreamerFunc_t streamer)
517 {
518 // Set a External Streamer function.
519
520 delete fStreamer; fStreamer = nullptr;
521 if (fClass) {
522 fClass->AdoptStreamer(new TClassStreamer(streamer));
523 } else {
524 fStreamer = new TClassStreamer(streamer);
525 }
526 return 0;
527 }
528
529 void TGenericClassInfo::SetStreamerFunc(ClassStreamerFunc_t streamer)
530 {
531 // Set a wrapper around the Streamer member function.
532
533 fStreamerFunc = streamer;
534 if (fClass) fClass->SetStreamerFunc(streamer);
535 }
536
537 void TGenericClassInfo::SetConvStreamerFunc(ClassConvStreamerFunc_t streamer)
538 {
539 // Set a wrapper around the Streamer member function.
540
541 fConvStreamerFunc = streamer;
542 if (fClass) fClass->SetConvStreamerFunc(streamer);
543 }
544
545 const char *TGenericClassInfo::GetDeclFileName() const
546 {
547 // Get the name of the declaring header file.
548
549 return fDeclFileName;
550 }
551
552 Int_t TGenericClassInfo::GetDeclFileLine() const
553 {
554 // Get the declaring line number.
555
556 return fDeclFileLine;
557 }
558
559 const char *TGenericClassInfo::GetImplFileName()
560 {
561 // Get the implementation filename.
562
563 if (!fImplFileName) SetFromTemplate();
564 return fImplFileName;
565 }
566
567 Int_t TGenericClassInfo::GetImplFileLine()
568 {
569 // Get the ClassDef line number.
570
571 if (!fImplFileLine) SetFromTemplate();
572 return fImplFileLine;
573 }
574
575 Int_t TGenericClassInfo::GetVersion() const
576 {
577 // Return the class version number.
578
579 return fVersion;
580 }
581
582 TClass *TGenericClassInfo::IsA(const void *obj)
583 {
584 // Return the actual type of the object.
585
586 return (*GetIsA())(obj);
587 }
588
589 TVirtualIsAProxy* TGenericClassInfo::GetIsA() const
590 {
591 // Return the IsA proxy.
592
593 return fIsA;
594 }
595
596 void TGenericClassInfo::SetNew(NewFunc_t newFunc)
597 {
598 // Install a new wrapper around 'new'.
599
600 fNew = newFunc;
601 if (fClass) fClass->SetNew(fNew);
602 }
603
604 void TGenericClassInfo::SetNewArray(NewArrFunc_t newArrayFunc)
605 {
606 // Install a new wrapper around 'new []'.
607
608 fNewArray = newArrayFunc;
609 if (fClass) fClass->SetNewArray(fNewArray);
610 }
611
612 void TGenericClassInfo::SetDelete(DelFunc_t deleteFunc)
613 {
614 // Install a new wrapper around 'delete'.
615
616 fDelete = deleteFunc;
617 if (fClass) fClass->SetDelete(fDelete);
618 }
619
620 void TGenericClassInfo::SetDeleteArray(DelArrFunc_t deleteArrayFunc)
621 {
622 // Install a new wrapper around 'delete []'.
623
624 fDeleteArray = deleteArrayFunc;
625 if (fClass) fClass->SetDeleteArray(fDeleteArray);
626 }
627
628 void TGenericClassInfo::SetDestructor(DesFunc_t destructorFunc)
629 {
630 // Install a new wrapper around the destructor.
631
632 fDestructor = destructorFunc;
633 if (fClass) fClass->SetDestructor(fDestructor);
634 }
635
636 void TGenericClassInfo::SetDirectoryAutoAdd(DirAutoAdd_t func)
637 {
638 // Install a new wrapper around SetDirectoryAutoAdd.
639
640 fDirAutoAdd = func;
641 if (fClass) fClass->SetDirectoryAutoAdd(fDirAutoAdd);
642 }
643
644 void TGenericClassInfo::SetMerge(MergeFunc_t func)
645 {
646 // Install a new wrapper around the Merge function.
647
648 fMerge = func;
649 if (fClass) fClass->SetMerge(fMerge);
650 }
651
652 void TGenericClassInfo::SetResetAfterMerge(ResetAfterMergeFunc_t func)
653 {
654 // Install a new wrapper around the Merge function.
655
656 fResetAfterMerge = func;
657 if (fClass) fClass->SetResetAfterMerge(fResetAfterMerge);
658 }
659
660 NewFunc_t TGenericClassInfo::GetNew() const
661 {
662 // Get the wrapper around 'new'.
663
664 return fNew;
665 }
666
667 NewArrFunc_t TGenericClassInfo::GetNewArray() const
668 {
669 // Get the wrapper around 'new []'.
670
671 return fNewArray;
672 }
673
674 DelFunc_t TGenericClassInfo::GetDelete() const
675 {
676 // Get the wrapper around 'delete'.
677
678 return fDelete;
679 }
680
681 DelArrFunc_t TGenericClassInfo::GetDeleteArray() const
682 {
683 // Get the wrapper around 'delete []'.
684
685 return fDeleteArray;
686 }
687
688 DesFunc_t TGenericClassInfo::GetDestructor() const
689 {
690 // Get the wrapper around the destructor.
691
692 return fDestructor;
693 }
694
695 DirAutoAdd_t TGenericClassInfo::GetDirectoryAutoAdd() const
696 {
697 // Get the wrapper around the directory-auto-add function .
698
699 return fDirAutoAdd;
700 }
701
702}
Cppyy::TCppType_t fClass
bool Bool_t
Boolean (0=false, 1=true) (bool)
Definition RtypesCore.h:77
int Int_t
Signed integer 4 bytes (int)
Definition RtypesCore.h:59
short Short_t
Signed Short integer 2 bytes (short)
Definition RtypesCore.h:53
constexpr Bool_t kTRUE
Definition RtypesCore.h:107
TClass *(* DictFuncPtr_t)()
Definition Rtypes.h:86
std::atomic< TClass * > atomic_TClass_ptr
Definition Rtypes.h:202
void(* ClassStreamerFunc_t)(TBuffer &, void *)
Definition Rtypes.h:78
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
Definition Rtypes.h:79
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Definition TError.cxx:252
void Fatal(const char *location, const char *msgfmt,...)
Use this function in case of a fatal error. It will abort the program.
Definition TError.cxx:267
char name[80]
Definition TGX11.cxx:110
R__EXTERN TVirtualMutex * gInterpreterMutex
@ kInvalidObject
Definition TObject.h:379
Int_t gDebug
Global variable setting the debug level. Set to 0 to disable, increase it in steps of 1 to increase t...
Definition TROOT.cxx:627
R__EXTERN TVirtualMutex * gROOTMutex
Definition TROOT.h:63
#define gROOT
Definition TROOT.h:414
#define R__LOCKGUARD(mutex)
#define free
Definition civetweb.c:1578
static void SetInstance(::ROOT::TGenericClassInfo &R__instance, NewFunc_t, NewArrFunc_t, DelFunc_t, DelArrFunc_t, DesFunc_t)
static void SetName(const std::string &name, std::string &nameMember)
static void SetfgIsA(atomic_TClass_ptr &isA, TClass *(*dictfun)())
const_iterator begin() const
const_iterator end() const
@ kNtplForceStreamerMode
Definition TClassTable.h:73
@ kHasCustomStreamerMember
Definition TClassTable.h:71
@ kNtplForceNativeMode
Definition TClassTable.h:72
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:84
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
TCollection * GetListOfClasses() const
Definition TROOT.h:238
static Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized.
Definition TROOT.cxx:2917
Basic string class.
Definition TString.h:138
Defines a common interface to inspect/change the contents of an object that represents a collection.
static constexpr Version_t Class_Version()
TLine * line
R__EXTERN TROOT * gROOTLocal
Definition TROOT.h:387
const TInitBehavior * DefineBehavior(void *, void *)
std::string GetDemangledTypeName(const std::type_info &t)
void(* DirAutoAdd_t)(void *, TDirectory *)
Definition Rtypes.h:120
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
Definition Rtypes.h:122
void(* DesFunc_t)(void *)
Definition Rtypes.h:119
void(* DelFunc_t)(void *)
Definition Rtypes.h:117
TNamed * RegisterClassTemplate(const char *name, const char *file, Int_t line)
Global function to register the implementation file and line of a class template (i....
void *(* NewArrFunc_t)(Long_t size, void *arena)
Definition Rtypes.h:116
void ResetClassVersion(TClass *, const char *, Short_t)
Global function to update the version number.
void(* DelArrFunc_t)(void *)
Definition Rtypes.h:118
void *(* NewFunc_t)(void *)
Definition Rtypes.h:115
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
Definition Rtypes.h:121
void RemoveClassAlternate(ROOT::TClassAlt *)
void Init(TClassEdit::TInterpreterLookupHelper *helper)
char * DemangleName(const char *mangled_name, int &errorCode)
Definition TClassEdit.h:255
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.