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 if (!fRNTupleSoARecord.empty()) {
319 fClass->CreateAttributeMap();
320 fClass->GetAttributeMap()->AddProperty("rntuple.SoARecord", fRNTupleSoARecord.c_str());
321 }
322 }
323 return fClass;
324 }
325
326 /////////////////////////////////////////////////////////////////////////////
327 /// Attach the schema evolution information to TClassObject
328
329 void TGenericClassInfo::CreateRuleSet( std::vector<Internal::TSchemaHelper>& vect,
331 {
332 if ( vect.empty() ) {
333 return;
334 }
335
336 //------------------------------------------------------------------------
337 // Get the rules set
338 //////////////////////////////////////////////////////////////////////////
339
340 TSchemaRuleSet* rset = fClass->GetSchemaRules( kTRUE );
341
342 //------------------------------------------------------------------------
343 // Process the rules
344 //////////////////////////////////////////////////////////////////////////
345
346 TSchemaRule* rule;
348 std::vector<Internal::TSchemaHelper>::iterator it;
349 for( it = vect.begin(); it != vect.end(); ++it ) {
350 rule = new TSchemaRule(ProcessReadRules ? TSchemaRule::kReadRule : TSchemaRule::kReadRawRule,
351 fClass->GetName(), *it);
352
353 if (!rset->AddRule(rule, TSchemaRuleSet::kCheckAll, &errmsg)) {
354 ::Warning( "TGenericClassInfo", "The rule for class: \"%s\": version, \"%s\" and data members: \"%s\" has been skipped because %s.",
355 GetClassName(), it->fVersion.c_str(), it->fTarget.c_str(), errmsg.Data() );
356 delete rule;
357 }
358 }
359 }
360
361 const char *TGenericClassInfo::GetClassName() const
362 {
363 // Return the class name
364
365 return fClassName;
366 }
367
368
369 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionProxyInfo() const
370 {
371 // Return the set of info we have for the CollectionProxy, if any
372
374 }
375
376 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionStreamerInfo() const
377 {
378 // Return the set of info we have for the Collection Streamer, if any
379
381 }
382
383 const std::type_info &TGenericClassInfo::GetInfo() const
384 {
385 // Return the typeinfo value
386
387 return fInfo;
388 }
389
390 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRawRules() const
391 {
392 // Return the list of rule give raw access to the TBuffer.
393
394 return fReadRawRules;
395 }
396
397
398 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRules() const
399 {
400 // Return the list of Data Model Evolution regular read rules.
401 return fReadRules;
402 }
403
404 void TGenericClassInfo::SetFromTemplate()
405 {
406 // Import the information from the class template.
407
408 TNamed *info = ROOT::RegisterClassTemplate(GetClassName(), nullptr, 0);
409 if (info) SetImplFile(info->GetTitle(), info->GetUniqueID());
410 }
411
412 Int_t TGenericClassInfo::SetImplFile(const char *file, Int_t line)
413 {
414 // Set the name of the implementation file.
415
416 fImplFileName = file;
417 fImplFileLine = line;
418 if (fClass) fClass->AddImplFile(file,line);
419 return 0;
420 }
421
422 Int_t TGenericClassInfo::SetDeclFile(const char *file, Int_t line)
423 {
424 // Set the name of the declaration file.
425
426 fDeclFileName = file;
427 fDeclFileLine = line;
428 if (fClass) fClass->SetDeclFile(file,line);
429 return 0;
430 }
431
432 Short_t TGenericClassInfo::SetVersion(Short_t version)
433 {
434 // Set a class version number.
435
436 ROOT::ResetClassVersion(fClass, GetClassName(),version);
437 fVersion = version;
438 return version;
439 }
440
441 void TGenericClassInfo::SetRNTupleSoARecord(const std::string &recordName)
442 {
443 fRNTupleSoARecord = recordName;
444 }
445
446 void TGenericClassInfo::AdoptAlternate(ROOT::TClassAlt *alt)
447 {
448 fAlternate.push_back(alt);
449 }
450
451 /// Returns false if the member streamer could not be adopted (this happens if the underlying TClass had its
452 /// StreamerInfo compiled already).
453 bool TGenericClassInfo::AdoptMemberStreamer(const char *name, TMemberStreamer *strm)
454 {
455 if (fClass) {
457 return fClass->AdoptMemberStreamer(name, strm);
458 }
459
460 auto [it, inserted] = fAdoptedMemberStreamers.emplace(name, strm);
461 if (!inserted) {
462 delete it->second;
463 it->second = strm;
464 }
465 return true;
466 }
467
468 void TGenericClassInfo::AdoptCollectionProxyInfo(TCollectionProxyInfo *info)
469 {
470 // Set the info for the CollectionProxy and take ownership of the object
471 // being passed
472
475 }
476
477 void TGenericClassInfo::AdoptCollectionStreamerInfo(TCollectionProxyInfo *info)
478 {
479 // Set the info for the Collection Streamer and take ownership of the object
480 // being passed
481
484 }
485
486 Short_t TGenericClassInfo::AdoptStreamer(TClassStreamer *streamer)
487 {
488 // Set a Streamer object. The streamer object is now 'owned'
489 // by the TGenericClassInfo.
490
491 delete fStreamer; fStreamer = nullptr;
492 if (fClass) {
493 fClass->AdoptStreamer(streamer);
494 } else {
495 fStreamer = streamer;
496 }
497 return 0;
498 }
499
500 Short_t TGenericClassInfo::AdoptCollectionProxy(TVirtualCollectionProxy *collProxy)
501 {
502 // Set the CollectProxy object. The CollectionProxy object is now 'owned'
503 // by the TGenericClassInfo.
504
505 delete fCollectionProxy; fCollectionProxy = nullptr;
506 fCollectionProxy = collProxy;
507 if (fClass && fCollectionProxy && !fClass->IsZombie()) {
508 fClass->CopyCollectionProxy(*fCollectionProxy);
509 }
510 return 0;
511 }
512
513 void TGenericClassInfo::SetReadRawRules( const std::vector<Internal::TSchemaHelper>& rules )
514 {
515 // Set the list of Data Model Evolution read rules giving direct access to the TBuffer.
517 }
518
519
520 void TGenericClassInfo::SetReadRules( const std::vector<Internal::TSchemaHelper>& rules )
521 {
522 // Set the list of Data Model Evolution regular read rules.
524 }
525
526 Short_t TGenericClassInfo::SetStreamer(ClassStreamerFunc_t streamer)
527 {
528 // Set a External Streamer function.
529
530 delete fStreamer; fStreamer = nullptr;
531 if (fClass) {
532 fClass->AdoptStreamer(new TClassStreamer(streamer));
533 } else {
534 fStreamer = new TClassStreamer(streamer);
535 }
536 return 0;
537 }
538
539 void TGenericClassInfo::SetStreamerFunc(ClassStreamerFunc_t streamer)
540 {
541 // Set a wrapper around the Streamer member function.
542
543 fStreamerFunc = streamer;
544 if (fClass) fClass->SetStreamerFunc(streamer);
545 }
546
547 void TGenericClassInfo::SetConvStreamerFunc(ClassConvStreamerFunc_t streamer)
548 {
549 // Set a wrapper around the Streamer member function.
550
551 fConvStreamerFunc = streamer;
552 if (fClass) fClass->SetConvStreamerFunc(streamer);
553 }
554
555 const char *TGenericClassInfo::GetDeclFileName() const
556 {
557 // Get the name of the declaring header file.
558
559 return fDeclFileName;
560 }
561
562 Int_t TGenericClassInfo::GetDeclFileLine() const
563 {
564 // Get the declaring line number.
565
566 return fDeclFileLine;
567 }
568
569 const char *TGenericClassInfo::GetImplFileName()
570 {
571 // Get the implementation filename.
572
573 if (!fImplFileName) SetFromTemplate();
574 return fImplFileName;
575 }
576
577 Int_t TGenericClassInfo::GetImplFileLine()
578 {
579 // Get the ClassDef line number.
580
581 if (!fImplFileLine) SetFromTemplate();
582 return fImplFileLine;
583 }
584
585 Int_t TGenericClassInfo::GetVersion() const
586 {
587 // Return the class version number.
588
589 return fVersion;
590 }
591
592 TClass *TGenericClassInfo::IsA(const void *obj)
593 {
594 // Return the actual type of the object.
595
596 return (*GetIsA())(obj);
597 }
598
599 TVirtualIsAProxy* TGenericClassInfo::GetIsA() const
600 {
601 // Return the IsA proxy.
602
603 return fIsA;
604 }
605
606 void TGenericClassInfo::SetNew(NewFunc_t newFunc)
607 {
608 // Install a new wrapper around 'new'.
609
610 fNew = newFunc;
611 if (fClass) fClass->SetNew(fNew);
612 }
613
614 void TGenericClassInfo::SetNewArray(NewArrFunc_t newArrayFunc)
615 {
616 // Install a new wrapper around 'new []'.
617
618 fNewArray = newArrayFunc;
619 if (fClass) fClass->SetNewArray(fNewArray);
620 }
621
622 void TGenericClassInfo::SetDelete(DelFunc_t deleteFunc)
623 {
624 // Install a new wrapper around 'delete'.
625
626 fDelete = deleteFunc;
627 if (fClass) fClass->SetDelete(fDelete);
628 }
629
630 void TGenericClassInfo::SetDeleteArray(DelArrFunc_t deleteArrayFunc)
631 {
632 // Install a new wrapper around 'delete []'.
633
634 fDeleteArray = deleteArrayFunc;
635 if (fClass) fClass->SetDeleteArray(fDeleteArray);
636 }
637
638 void TGenericClassInfo::SetDestructor(DesFunc_t destructorFunc)
639 {
640 // Install a new wrapper around the destructor.
641
642 fDestructor = destructorFunc;
643 if (fClass) fClass->SetDestructor(fDestructor);
644 }
645
646 void TGenericClassInfo::SetDirectoryAutoAdd(DirAutoAdd_t func)
647 {
648 // Install a new wrapper around SetDirectoryAutoAdd.
649
650 fDirAutoAdd = func;
651 if (fClass) fClass->SetDirectoryAutoAdd(fDirAutoAdd);
652 }
653
654 void TGenericClassInfo::SetMerge(MergeFunc_t func)
655 {
656 // Install a new wrapper around the Merge function.
657
658 fMerge = func;
659 if (fClass) fClass->SetMerge(fMerge);
660 }
661
662 void TGenericClassInfo::SetResetAfterMerge(ResetAfterMergeFunc_t func)
663 {
664 // Install a new wrapper around the Merge function.
665
666 fResetAfterMerge = func;
667 if (fClass) fClass->SetResetAfterMerge(fResetAfterMerge);
668 }
669
670 NewFunc_t TGenericClassInfo::GetNew() const
671 {
672 // Get the wrapper around 'new'.
673
674 return fNew;
675 }
676
677 NewArrFunc_t TGenericClassInfo::GetNewArray() const
678 {
679 // Get the wrapper around 'new []'.
680
681 return fNewArray;
682 }
683
684 DelFunc_t TGenericClassInfo::GetDelete() const
685 {
686 // Get the wrapper around 'delete'.
687
688 return fDelete;
689 }
690
691 DelArrFunc_t TGenericClassInfo::GetDeleteArray() const
692 {
693 // Get the wrapper around 'delete []'.
694
695 return fDeleteArray;
696 }
697
698 DesFunc_t TGenericClassInfo::GetDestructor() const
699 {
700 // Get the wrapper around the destructor.
701
702 return fDestructor;
703 }
704
705 DirAutoAdd_t TGenericClassInfo::GetDirectoryAutoAdd() const
706 {
707 // Get the wrapper around the directory-auto-add function .
708
709 return fDirAutoAdd;
710 }
711
712}
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:157
R__EXTERN TVirtualMutex * gInterpreterMutex
@ kInvalidObject
Definition TObject.h:382
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:2920
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.