Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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); fStreamer = nullptr;
285 // If IsZombie is true, something went wrong and we will not be
286 // able to properly copy the collection proxy
287 if (!fClass->IsZombie()) {
288 if (fCollectionProxy) fClass->CopyCollectionProxy(*fCollectionProxy);
289 else if (fCollectionProxyInfo) {
290 fClass->SetCollectionProxy(*fCollectionProxyInfo);
291 }
292 }
293 fClass->SetClassSize(fSizeof);
294
295 //---------------------------------------------------------------------
296 // Attach the schema evolution information
297 ///////////////////////////////////////////////////////////////////////
298
299 CreateRuleSet( fReadRules, true );
301
303 fClass->CreateAttributeMap();
304 // The force-split and force-unsplit flags are mutually exclusive
308 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "false");
310 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "true");
311 }
312 }
313 }
314 return fClass;
315 }
316
317 /////////////////////////////////////////////////////////////////////////////
318 /// Attach the schema evolution information to TClassObject
319
320 void TGenericClassInfo::CreateRuleSet( std::vector<Internal::TSchemaHelper>& vect,
322 {
323 if ( vect.empty() ) {
324 return;
325 }
326
327 //------------------------------------------------------------------------
328 // Get the rules set
329 //////////////////////////////////////////////////////////////////////////
330
331 TSchemaRuleSet* rset = fClass->GetSchemaRules( kTRUE );
332
333 //------------------------------------------------------------------------
334 // Process the rules
335 //////////////////////////////////////////////////////////////////////////
336
337 TSchemaRule* rule;
339 std::vector<Internal::TSchemaHelper>::iterator it;
340 for( it = vect.begin(); it != vect.end(); ++it ) {
341 rule = new TSchemaRule(ProcessReadRules ? TSchemaRule::kReadRule : TSchemaRule::kReadRawRule,
342 fClass->GetName(), *it);
343
344 if (!rset->AddRule(rule, TSchemaRuleSet::kCheckAll, &errmsg)) {
345 ::Warning( "TGenericClassInfo", "The rule for class: \"%s\": version, \"%s\" and data members: \"%s\" has been skipped because %s.",
346 GetClassName(), it->fVersion.c_str(), it->fTarget.c_str(), errmsg.Data() );
347 delete rule;
348 }
349 }
350 }
351
352 const char *TGenericClassInfo::GetClassName() const
353 {
354 // Return the class name
355
356 return fClassName;
357 }
358
359
360 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionProxyInfo() const
361 {
362 // Return the set of info we have for the CollectionProxy, if any
363
365 }
366
367 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionStreamerInfo() const
368 {
369 // Return the set of info we have for the Collection Streamer, if any
370
372 }
373
374 const std::type_info &TGenericClassInfo::GetInfo() const
375 {
376 // Return the typeinfo value
377
378 return fInfo;
379 }
380
381 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRawRules() const
382 {
383 // Return the list of rule give raw access to the TBuffer.
384
385 return fReadRawRules;
386 }
387
388
389 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRules() const
390 {
391 // Return the list of Data Model Evolution regular read rules.
392 return fReadRules;
393 }
394
395 void TGenericClassInfo::SetFromTemplate()
396 {
397 // Import the information from the class template.
398
399 TNamed *info = ROOT::RegisterClassTemplate(GetClassName(), nullptr, 0);
400 if (info) SetImplFile(info->GetTitle(), info->GetUniqueID());
401 }
402
403 Int_t TGenericClassInfo::SetImplFile(const char *file, Int_t line)
404 {
405 // Set the name of the implementation file.
406
407 fImplFileName = file;
408 fImplFileLine = line;
409 if (fClass) fClass->AddImplFile(file,line);
410 return 0;
411 }
412
413 Int_t TGenericClassInfo::SetDeclFile(const char *file, Int_t line)
414 {
415 // Set the name of the declaration file.
416
417 fDeclFileName = file;
418 fDeclFileLine = line;
419 if (fClass) fClass->SetDeclFile(file,line);
420 return 0;
421 }
422
423 Short_t TGenericClassInfo::SetVersion(Short_t version)
424 {
425 // Set a class version number.
426
427 ROOT::ResetClassVersion(fClass, GetClassName(),version);
428 fVersion = version;
429 return version;
430 }
431
432 void TGenericClassInfo::AdoptAlternate(ROOT::TClassAlt *alt)
433 {
434 fAlternate.push_back(alt);
435 }
436
437 void TGenericClassInfo::AdoptCollectionProxyInfo(TCollectionProxyInfo *info)
438 {
439 // Set the info for the CollectionProxy and take ownership of the object
440 // being passed
441
444 }
445
446 void TGenericClassInfo::AdoptCollectionStreamerInfo(TCollectionProxyInfo *info)
447 {
448 // Set the info for the Collection Streamer and take ownership of the object
449 // being passed
450
453 }
454
455 Short_t TGenericClassInfo::AdoptStreamer(TClassStreamer *streamer)
456 {
457 // Set a Streamer object. The streamer object is now 'owned'
458 // by the TGenericClassInfo.
459
460 delete fStreamer; fStreamer = nullptr;
461 if (fClass) {
462 fClass->AdoptStreamer(streamer);
463 } else {
464 fStreamer = streamer;
465 }
466 return 0;
467 }
468
469 Short_t TGenericClassInfo::AdoptCollectionProxy(TVirtualCollectionProxy *collProxy)
470 {
471 // Set the CollectProxy object. The CollectionProxy object is now 'owned'
472 // by the TGenericClassInfo.
473
474 delete fCollectionProxy; fCollectionProxy = nullptr;
475 fCollectionProxy = collProxy;
476 if (fClass && fCollectionProxy && !fClass->IsZombie()) {
477 fClass->CopyCollectionProxy(*fCollectionProxy);
478 }
479 return 0;
480 }
481
482 void TGenericClassInfo::SetReadRawRules( const std::vector<Internal::TSchemaHelper>& rules )
483 {
484 // Set the list of Data Model Evolution read rules giving direct access to the TBuffer.
486 }
487
488
489 void TGenericClassInfo::SetReadRules( const std::vector<Internal::TSchemaHelper>& rules )
490 {
491 // Set the list of Data Model Evolution regular read rules.
493 }
494
495 Short_t TGenericClassInfo::SetStreamer(ClassStreamerFunc_t streamer)
496 {
497 // Set a External Streamer function.
498
499 delete fStreamer; fStreamer = nullptr;
500 if (fClass) {
501 fClass->AdoptStreamer(new TClassStreamer(streamer));
502 } else {
503 fStreamer = new TClassStreamer(streamer);
504 }
505 return 0;
506 }
507
508 void TGenericClassInfo::SetStreamerFunc(ClassStreamerFunc_t streamer)
509 {
510 // Set a wrapper around the Streamer member function.
511
512 fStreamerFunc = streamer;
513 if (fClass) fClass->SetStreamerFunc(streamer);
514 }
515
516 void TGenericClassInfo::SetConvStreamerFunc(ClassConvStreamerFunc_t streamer)
517 {
518 // Set a wrapper around the Streamer member function.
519
520 fConvStreamerFunc = streamer;
521 if (fClass) fClass->SetConvStreamerFunc(streamer);
522 }
523
524 const char *TGenericClassInfo::GetDeclFileName() const
525 {
526 // Get the name of the declaring header file.
527
528 return fDeclFileName;
529 }
530
531 Int_t TGenericClassInfo::GetDeclFileLine() const
532 {
533 // Get the declaring line number.
534
535 return fDeclFileLine;
536 }
537
538 const char *TGenericClassInfo::GetImplFileName()
539 {
540 // Get the implementation filename.
541
542 if (!fImplFileName) SetFromTemplate();
543 return fImplFileName;
544 }
545
546 Int_t TGenericClassInfo::GetImplFileLine()
547 {
548 // Get the ClassImp line number.
549
550 if (!fImplFileLine) SetFromTemplate();
551 return fImplFileLine;
552 }
553
554 Int_t TGenericClassInfo::GetVersion() const
555 {
556 // Return the class version number.
557
558 return fVersion;
559 }
560
561 TClass *TGenericClassInfo::IsA(const void *obj)
562 {
563 // Return the actual type of the object.
564
565 return (*GetIsA())(obj);
566 }
567
568 TVirtualIsAProxy* TGenericClassInfo::GetIsA() const
569 {
570 // Return the IsA proxy.
571
572 return fIsA;
573 }
574
575 void TGenericClassInfo::SetNew(NewFunc_t newFunc)
576 {
577 // Install a new wrapper around 'new'.
578
579 fNew = newFunc;
580 if (fClass) fClass->SetNew(fNew);
581 }
582
583 void TGenericClassInfo::SetNewArray(NewArrFunc_t newArrayFunc)
584 {
585 // Install a new wrapper around 'new []'.
586
587 fNewArray = newArrayFunc;
588 if (fClass) fClass->SetNewArray(fNewArray);
589 }
590
591 void TGenericClassInfo::SetDelete(DelFunc_t deleteFunc)
592 {
593 // Install a new wrapper around 'delete'.
594
595 fDelete = deleteFunc;
596 if (fClass) fClass->SetDelete(fDelete);
597 }
598
599 void TGenericClassInfo::SetDeleteArray(DelArrFunc_t deleteArrayFunc)
600 {
601 // Install a new wrapper around 'delete []'.
602
603 fDeleteArray = deleteArrayFunc;
604 if (fClass) fClass->SetDeleteArray(fDeleteArray);
605 }
606
607 void TGenericClassInfo::SetDestructor(DesFunc_t destructorFunc)
608 {
609 // Install a new wrapper around the destructor.
610
611 fDestructor = destructorFunc;
612 if (fClass) fClass->SetDestructor(fDestructor);
613 }
614
615 void TGenericClassInfo::SetDirectoryAutoAdd(DirAutoAdd_t func)
616 {
617 // Install a new wrapper around SetDirectoryAutoAdd.
618
619 fDirAutoAdd = func;
620 if (fClass) fClass->SetDirectoryAutoAdd(fDirAutoAdd);
621 }
622
623 void TGenericClassInfo::SetMerge(MergeFunc_t func)
624 {
625 // Install a new wrapper around the Merge function.
626
627 fMerge = func;
628 if (fClass) fClass->SetMerge(fMerge);
629 }
630
631 void TGenericClassInfo::SetResetAfterMerge(ResetAfterMergeFunc_t func)
632 {
633 // Install a new wrapper around the Merge function.
634
635 fResetAfterMerge = func;
636 if (fClass) fClass->SetResetAfterMerge(fResetAfterMerge);
637 }
638
639 NewFunc_t TGenericClassInfo::GetNew() const
640 {
641 // Get the wrapper around 'new'.
642
643 return fNew;
644 }
645
646 NewArrFunc_t TGenericClassInfo::GetNewArray() const
647 {
648 // Get the wrapper around 'new []'.
649
650 return fNewArray;
651 }
652
653 DelFunc_t TGenericClassInfo::GetDelete() const
654 {
655 // Get the wrapper around 'delete'.
656
657 return fDelete;
658 }
659
660 DelArrFunc_t TGenericClassInfo::GetDeleteArray() const
661 {
662 // Get the wrapper around 'delete []'.
663
664 return fDeleteArray;
665 }
666
667 DesFunc_t TGenericClassInfo::GetDestructor() const
668 {
669 // Get the wrapper around the destructor.
670
671 return fDestructor;
672 }
673
674 DirAutoAdd_t TGenericClassInfo::GetDirectoryAutoAdd() const
675 {
676 // Get the wrapper around the directory-auto-add function .
677
678 return fDirAutoAdd;
679 }
680
681}
Cppyy::TCppType_t fClass
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
short Short_t
Definition RtypesCore.h:39
constexpr Bool_t kTRUE
Definition RtypesCore.h:93
TClass *(* DictFuncPtr_t)()
Definition Rtypes.h:85
std::atomic< TClass * > atomic_TClass_ptr
Definition Rtypes.h:200
void(* ClassStreamerFunc_t)(TBuffer &, void *)
Definition Rtypes.h:77
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
Definition Rtypes.h:78
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:229
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:244
char name[80]
Definition TGX11.cxx:110
R__EXTERN TVirtualMutex * gInterpreterMutex
@ kInvalidObject
Definition TObject.h:380
Int_t gDebug
Definition TROOT.cxx:597
R__EXTERN TVirtualMutex * gROOTMutex
Definition TROOT.h:63
#define gROOT
Definition TROOT.h:406
#define R__LOCKGUARD(mutex)
#define free
Definition civetweb.c:1539
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:72
@ kHasCustomStreamerMember
Definition TClassTable.h:70
@ kNtplForceNativeMode
Definition TClassTable.h:71
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:231
static Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized.
Definition TROOT.cxx:2910
Basic string class.
Definition TString.h:139
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:379
const TInitBehavior * DefineBehavior(void *, void *)
std::string GetDemangledTypeName(const std::type_info &t)
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
void(* DirAutoAdd_t)(void *, TDirectory *)
Definition Rtypes.h:119
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
Definition Rtypes.h:121
void(* DesFunc_t)(void *)
Definition Rtypes.h:118
void(* DelFunc_t)(void *)
Definition Rtypes.h:116
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:115
void ResetClassVersion(TClass *, const char *, Short_t)
Global function to update the version number.
void(* DelArrFunc_t)(void *)
Definition Rtypes.h:117
void *(* NewFunc_t)(void *)
Definition Rtypes.h:114
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
Definition Rtypes.h:120
void RemoveClassAlternate(ROOT::TClassAlt *)
void Init(TClassEdit::TInterpreterLookupHelper *helper)
char * DemangleName(const char *mangled_name, int &errorCode)
Definition TClassEdit.h:208
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.