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 (!fClass && fAction) {
252 // Check again, while we waited for the lock, something else might
253 // have set fClass.
254 if (fClass) return fClass;
255
256 fClass = GetAction().CreateClass(GetClassName(),
257 GetVersion(),
258 GetInfo(),
259 GetIsA(),
260 GetDeclFileName(),
261 GetImplFileName(),
262 GetDeclFileLine(),
263 GetImplFileLine());
265 fClass->fHasCustomStreamerMember = true;
266 }
267 fClass->SetNew(fNew);
268 fClass->SetNewArray(fNewArray);
269 fClass->SetDelete(fDelete);
270 fClass->SetDeleteArray(fDeleteArray);
271 fClass->SetDestructor(fDestructor);
272 fClass->SetDirectoryAutoAdd(fDirAutoAdd);
273 fClass->SetStreamerFunc(fStreamerFunc);
274 fClass->SetConvStreamerFunc(fConvStreamerFunc);
275 fClass->SetMerge(fMerge);
276 fClass->SetResetAfterMerge(fResetAfterMerge);
277 fClass->AdoptStreamer(fStreamer); fStreamer = nullptr;
278 // If IsZombie is true, something went wrong and we will not be
279 // able to properly copy the collection proxy
280 if (!fClass->IsZombie()) {
281 if (fCollectionProxy) fClass->CopyCollectionProxy(*fCollectionProxy);
282 else if (fCollectionProxyInfo) {
283 fClass->SetCollectionProxy(*fCollectionProxyInfo);
284 }
285 }
286 fClass->SetClassSize(fSizeof);
287
288 //---------------------------------------------------------------------
289 // Attach the schema evolution information
290 ///////////////////////////////////////////////////////////////////////
291
292 CreateRuleSet( fReadRules, true );
294
296 fClass->CreateAttributeMap();
297 // The force-split and force-unsplit flags are mutually exclusive
301 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "false");
303 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "true");
304 }
305 }
306 }
307 return fClass;
308 }
309
310 /////////////////////////////////////////////////////////////////////////////
311 /// Attach the schema evolution information to TClassObject
312
313 void TGenericClassInfo::CreateRuleSet( std::vector<Internal::TSchemaHelper>& vect,
315 {
316 if ( vect.empty() ) {
317 return;
318 }
319
320 //------------------------------------------------------------------------
321 // Get the rules set
322 //////////////////////////////////////////////////////////////////////////
323
324 TSchemaRuleSet* rset = fClass->GetSchemaRules( kTRUE );
325
326 //------------------------------------------------------------------------
327 // Process the rules
328 //////////////////////////////////////////////////////////////////////////
329
330 TSchemaRule* rule;
332 std::vector<Internal::TSchemaHelper>::iterator it;
333 for( it = vect.begin(); it != vect.end(); ++it ) {
334 rule = new TSchemaRule(ProcessReadRules ? TSchemaRule::kReadRule : TSchemaRule::kReadRawRule,
335 fClass->GetName(), *it);
336
337 if (!rset->AddRule(rule, TSchemaRuleSet::kCheckAll, &errmsg)) {
338 ::Warning( "TGenericClassInfo", "The rule for class: \"%s\": version, \"%s\" and data members: \"%s\" has been skipped because %s.",
339 GetClassName(), it->fVersion.c_str(), it->fTarget.c_str(), errmsg.Data() );
340 delete rule;
341 }
342 }
343 }
344
345 const char *TGenericClassInfo::GetClassName() const
346 {
347 // Return the class name
348
349 return fClassName;
350 }
351
352
353 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionProxyInfo() const
354 {
355 // Return the set of info we have for the CollectionProxy, if any
356
358 }
359
360 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionStreamerInfo() const
361 {
362 // Return the set of info we have for the Collection Streamer, if any
363
365 }
366
367 const std::type_info &TGenericClassInfo::GetInfo() const
368 {
369 // Return the typeinfo value
370
371 return fInfo;
372 }
373
374 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRawRules() const
375 {
376 // Return the list of rule give raw access to the TBuffer.
377
378 return fReadRawRules;
379 }
380
381
382 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRules() const
383 {
384 // Return the list of Data Model Evolution regular read rules.
385 return fReadRules;
386 }
387
388 void TGenericClassInfo::SetFromTemplate()
389 {
390 // Import the information from the class template.
391
392 TNamed *info = ROOT::RegisterClassTemplate(GetClassName(), nullptr, 0);
393 if (info) SetImplFile(info->GetTitle(), info->GetUniqueID());
394 }
395
396 Int_t TGenericClassInfo::SetImplFile(const char *file, Int_t line)
397 {
398 // Set the name of the implementation file.
399
400 fImplFileName = file;
401 fImplFileLine = line;
402 if (fClass) fClass->AddImplFile(file,line);
403 return 0;
404 }
405
406 Int_t TGenericClassInfo::SetDeclFile(const char *file, Int_t line)
407 {
408 // Set the name of the declaration file.
409
410 fDeclFileName = file;
411 fDeclFileLine = line;
412 if (fClass) fClass->SetDeclFile(file,line);
413 return 0;
414 }
415
416 Short_t TGenericClassInfo::SetVersion(Short_t version)
417 {
418 // Set a class version number.
419
420 ROOT::ResetClassVersion(fClass, GetClassName(),version);
421 fVersion = version;
422 return version;
423 }
424
425 void TGenericClassInfo::AdoptAlternate(ROOT::TClassAlt *alt)
426 {
427 fAlternate.push_back(alt);
428 }
429
430 void TGenericClassInfo::AdoptCollectionProxyInfo(TCollectionProxyInfo *info)
431 {
432 // Set the info for the CollectionProxy and take ownership of the object
433 // being passed
434
437 }
438
439 void TGenericClassInfo::AdoptCollectionStreamerInfo(TCollectionProxyInfo *info)
440 {
441 // Set the info for the Collection Streamer and take ownership of the object
442 // being passed
443
446 }
447
448 Short_t TGenericClassInfo::AdoptStreamer(TClassStreamer *streamer)
449 {
450 // Set a Streamer object. The streamer object is now 'owned'
451 // by the TGenericClassInfo.
452
453 delete fStreamer; fStreamer = nullptr;
454 if (fClass) {
455 fClass->AdoptStreamer(streamer);
456 } else {
457 fStreamer = streamer;
458 }
459 return 0;
460 }
461
462 Short_t TGenericClassInfo::AdoptCollectionProxy(TVirtualCollectionProxy *collProxy)
463 {
464 // Set the CollectProxy object. The CollectionProxy object is now 'owned'
465 // by the TGenericClassInfo.
466
467 delete fCollectionProxy; fCollectionProxy = nullptr;
468 fCollectionProxy = collProxy;
469 if (fClass && fCollectionProxy && !fClass->IsZombie()) {
470 fClass->CopyCollectionProxy(*fCollectionProxy);
471 }
472 return 0;
473 }
474
475 void TGenericClassInfo::SetReadRawRules( const std::vector<Internal::TSchemaHelper>& rules )
476 {
477 // Set the list of Data Model Evolution read rules giving direct access to the TBuffer.
479 }
480
481
482 void TGenericClassInfo::SetReadRules( const std::vector<Internal::TSchemaHelper>& rules )
483 {
484 // Set the list of Data Model Evolution regular read rules.
486 }
487
488 Short_t TGenericClassInfo::SetStreamer(ClassStreamerFunc_t streamer)
489 {
490 // Set a External Streamer function.
491
492 delete fStreamer; fStreamer = nullptr;
493 if (fClass) {
494 fClass->AdoptStreamer(new TClassStreamer(streamer));
495 } else {
496 fStreamer = new TClassStreamer(streamer);
497 }
498 return 0;
499 }
500
501 void TGenericClassInfo::SetStreamerFunc(ClassStreamerFunc_t streamer)
502 {
503 // Set a wrapper around the Streamer member function.
504
505 fStreamerFunc = streamer;
506 if (fClass) fClass->SetStreamerFunc(streamer);
507 }
508
509 void TGenericClassInfo::SetConvStreamerFunc(ClassConvStreamerFunc_t streamer)
510 {
511 // Set a wrapper around the Streamer member function.
512
513 fConvStreamerFunc = streamer;
514 if (fClass) fClass->SetConvStreamerFunc(streamer);
515 }
516
517 const char *TGenericClassInfo::GetDeclFileName() const
518 {
519 // Get the name of the declaring header file.
520
521 return fDeclFileName;
522 }
523
524 Int_t TGenericClassInfo::GetDeclFileLine() const
525 {
526 // Get the declaring line number.
527
528 return fDeclFileLine;
529 }
530
531 const char *TGenericClassInfo::GetImplFileName()
532 {
533 // Get the implementation filename.
534
535 if (!fImplFileName) SetFromTemplate();
536 return fImplFileName;
537 }
538
539 Int_t TGenericClassInfo::GetImplFileLine()
540 {
541 // Get the ClassImp line number.
542
543 if (!fImplFileLine) SetFromTemplate();
544 return fImplFileLine;
545 }
546
547 Int_t TGenericClassInfo::GetVersion() const
548 {
549 // Return the class version number.
550
551 return fVersion;
552 }
553
554 TClass *TGenericClassInfo::IsA(const void *obj)
555 {
556 // Return the actual type of the object.
557
558 return (*GetIsA())(obj);
559 }
560
561 TVirtualIsAProxy* TGenericClassInfo::GetIsA() const
562 {
563 // Return the IsA proxy.
564
565 return fIsA;
566 }
567
568 void TGenericClassInfo::SetNew(NewFunc_t newFunc)
569 {
570 // Install a new wrapper around 'new'.
571
572 fNew = newFunc;
573 if (fClass) fClass->SetNew(fNew);
574 }
575
576 void TGenericClassInfo::SetNewArray(NewArrFunc_t newArrayFunc)
577 {
578 // Install a new wrapper around 'new []'.
579
580 fNewArray = newArrayFunc;
581 if (fClass) fClass->SetNewArray(fNewArray);
582 }
583
584 void TGenericClassInfo::SetDelete(DelFunc_t deleteFunc)
585 {
586 // Install a new wrapper around 'delete'.
587
588 fDelete = deleteFunc;
589 if (fClass) fClass->SetDelete(fDelete);
590 }
591
592 void TGenericClassInfo::SetDeleteArray(DelArrFunc_t deleteArrayFunc)
593 {
594 // Install a new wrapper around 'delete []'.
595
596 fDeleteArray = deleteArrayFunc;
597 if (fClass) fClass->SetDeleteArray(fDeleteArray);
598 }
599
600 void TGenericClassInfo::SetDestructor(DesFunc_t destructorFunc)
601 {
602 // Install a new wrapper around the destructor.
603
604 fDestructor = destructorFunc;
605 if (fClass) fClass->SetDestructor(fDestructor);
606 }
607
608 void TGenericClassInfo::SetDirectoryAutoAdd(DirAutoAdd_t func)
609 {
610 // Install a new wrapper around SetDirectoryAutoAdd.
611
612 fDirAutoAdd = func;
613 if (fClass) fClass->SetDirectoryAutoAdd(fDirAutoAdd);
614 }
615
616 void TGenericClassInfo::SetMerge(MergeFunc_t func)
617 {
618 // Install a new wrapper around the Merge function.
619
620 fMerge = func;
621 if (fClass) fClass->SetMerge(fMerge);
622 }
623
624 void TGenericClassInfo::SetResetAfterMerge(ResetAfterMergeFunc_t func)
625 {
626 // Install a new wrapper around the Merge function.
627
628 fResetAfterMerge = func;
629 if (fClass) fClass->SetResetAfterMerge(fResetAfterMerge);
630 }
631
632 NewFunc_t TGenericClassInfo::GetNew() const
633 {
634 // Get the wrapper around 'new'.
635
636 return fNew;
637 }
638
639 NewArrFunc_t TGenericClassInfo::GetNewArray() const
640 {
641 // Get the wrapper around 'new []'.
642
643 return fNewArray;
644 }
645
646 DelFunc_t TGenericClassInfo::GetDelete() const
647 {
648 // Get the wrapper around 'delete'.
649
650 return fDelete;
651 }
652
653 DelArrFunc_t TGenericClassInfo::GetDeleteArray() const
654 {
655 // Get the wrapper around 'delete []'.
656
657 return fDeleteArray;
658 }
659
660 DesFunc_t TGenericClassInfo::GetDestructor() const
661 {
662 // Get the wrapper around the destructor.
663
664 return fDestructor;
665 }
666
667 DirAutoAdd_t TGenericClassInfo::GetDirectoryAutoAdd() const
668 {
669 // Get the wrapper around the directory-auto-add function .
670
671 return fDirAutoAdd;
672 }
673
674}
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
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.