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
52 static TDefaultInitBehavior theDefault;
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
78 if (!isA.load()) {
80 dictfun();
81 }
82 }
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,
89 DictFuncPtr_t dictionary,
90 TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof)
91 : fAction(action), fClass(nullptr), fClassName(fullClassname),
92 fDeclFileName(declFileName), fDeclFileLine(declFileLine),
93 fDictionary(dictionary), fInfo(info),
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),
99 fCollectionProxyInfo(nullptr), fCollectionStreamerInfo(nullptr)
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,
109 DictFuncPtr_t dictionary,
110 TVirtualIsAProxy *isa, Int_t pragmabits, Int_t sizof)
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),
119 fCollectionProxyInfo(nullptr), fCollectionStreamerInfo(nullptr)
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,
132 DictFuncPtr_t dictionary, Int_t pragmabits)
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),
141 fCollectionProxyInfo(nullptr), fCollectionStreamerInfo(nullptr)
142
143 {
144 // Constructor for namespace
145
146 Init(pragmabits);
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),
207 fDictionary,
208 pragmabits);
209 }
210
211 TGenericClassInfo::~TGenericClassInfo()
212 {
213 // Destructor.
214
215 delete fCollectionProxyInfo;
216 delete fCollectionStreamerInfo;
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());
264 if (fPragmaBits & TClassTable::kHasCustomStreamerMember) {
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 );
293 CreateRuleSet( fReadRawRules, false );
294
296 fClass->CreateAttributeMap();
297 // The force-split and force-unsplit flags are mutually exclusive
298 assert(!((fPragmaBits & TClassTable::kNtplForceNativeMode) &&
299 (fPragmaBits & TClassTable::kNtplForceStreamerMode)));
300 if (fPragmaBits & TClassTable::kNtplForceNativeMode) {
301 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "false");
302 } else if (fPragmaBits & TClassTable::kNtplForceStreamerMode) {
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,
314 Bool_t ProcessReadRules )
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;
331 TString errmsg;
332 std::vector<Internal::TSchemaHelper>::iterator it;
333 for( it = vect.begin(); it != vect.end(); ++it ) {
334 rule = new TSchemaRule();
335 rule->SetTarget( it->fTarget );
336 rule->SetTargetClass( fClass->GetName() );
337 rule->SetSourceClass( it->fSourceClass );
338 rule->SetSource( it->fSource );
339 rule->SetCode( it->fCode );
340 rule->SetVersion( it->fVersion );
341 rule->SetChecksum( it->fChecksum );
342 rule->SetEmbed( it->fEmbed );
343 rule->SetInclude( it->fInclude );
344 rule->SetAttributes( it->fAttributes );
345
346 if( ProcessReadRules ) {
347 rule->SetRuleType( TSchemaRule::kReadRule );
348 rule->SetReadFunctionPointer( (TSchemaRule::ReadFuncPtr_t)it->fFunctionPtr );
349 }
350 else {
351 rule->SetRuleType( TSchemaRule::kReadRawRule );
352 rule->SetReadRawFunctionPointer( (TSchemaRule::ReadRawFuncPtr_t)it->fFunctionPtr );
353 }
354 if( !rset->AddRule( rule, TSchemaRuleSet::kCheckAll, &errmsg ) ) {
355 ::Warning( "TGenericClassInfo", "The rule for class: \"%s\": version, \"%s\" and data members: \"%s\" has been skipped because %s.",
356 GetClassName(), it->fVersion.c_str(), it->fTarget.c_str(), errmsg.Data() );
357 delete rule;
358 }
359 }
360 }
361
362 const char *TGenericClassInfo::GetClassName() const
363 {
364 // Return the class name
365
366 return fClassName;
367 }
368
369
370 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionProxyInfo() const
371 {
372 // Return the set of info we have for the CollectionProxy, if any
373
374 return fCollectionProxyInfo;
375 }
376
377 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionStreamerInfo() const
378 {
379 // Return the set of info we have for the Collection Streamer, if any
380
381 return fCollectionProxyInfo;
382 }
383
384 const std::type_info &TGenericClassInfo::GetInfo() const
385 {
386 // Return the typeinfo value
387
388 return fInfo;
389 }
390
391 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRawRules() const
392 {
393 // Return the list of rule give raw access to the TBuffer.
394
395 return fReadRawRules;
396 }
397
398
399 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRules() const
400 {
401 // Return the list of Data Model Evolution regular read rules.
402 return fReadRules;
403 }
404
405 void TGenericClassInfo::SetFromTemplate()
406 {
407 // Import the information from the class template.
408
409 TNamed *info = ROOT::RegisterClassTemplate(GetClassName(), nullptr, 0);
410 if (info) SetImplFile(info->GetTitle(), info->GetUniqueID());
411 }
412
413 Int_t TGenericClassInfo::SetImplFile(const char *file, Int_t line)
414 {
415 // Set the name of the implementation file.
416
417 fImplFileName = file;
418 fImplFileLine = line;
419 if (fClass) fClass->AddImplFile(file,line);
420 return 0;
421 }
422
423 Int_t TGenericClassInfo::SetDeclFile(const char *file, Int_t line)
424 {
425 // Set the name of the declaration file.
426
427 fDeclFileName = file;
428 fDeclFileLine = line;
429 if (fClass) fClass->SetDeclFile(file,line);
430 return 0;
431 }
432
433 Short_t TGenericClassInfo::SetVersion(Short_t version)
434 {
435 // Set a class version number.
436
437 ROOT::ResetClassVersion(fClass, GetClassName(),version);
438 fVersion = version;
439 return version;
440 }
441
442 void TGenericClassInfo::AdoptAlternate(ROOT::TClassAlt *alt)
443 {
444 fAlternate.push_back(alt);
445 }
446
447 void TGenericClassInfo::AdoptCollectionProxyInfo(TCollectionProxyInfo *info)
448 {
449 // Set the info for the CollectionProxy and take ownership of the object
450 // being passed
451
452 delete fCollectionProxyInfo;
453 fCollectionProxyInfo = info;
454 }
455
456 void TGenericClassInfo::AdoptCollectionStreamerInfo(TCollectionProxyInfo *info)
457 {
458 // Set the info for the Collection Streamer and take ownership of the object
459 // being passed
460
461 delete fCollectionStreamerInfo;
462 fCollectionStreamerInfo = info;
463 }
464
465 Short_t TGenericClassInfo::AdoptStreamer(TClassStreamer *streamer)
466 {
467 // Set a Streamer object. The streamer object is now 'owned'
468 // by the TGenericClassInfo.
469
470 delete fStreamer; fStreamer = nullptr;
471 if (fClass) {
472 fClass->AdoptStreamer(streamer);
473 } else {
474 fStreamer = streamer;
475 }
476 return 0;
477 }
478
479 Short_t TGenericClassInfo::AdoptCollectionProxy(TVirtualCollectionProxy *collProxy)
480 {
481 // Set the CollectProxy object. The CollectionProxy object is now 'owned'
482 // by the TGenericClassInfo.
483
484 delete fCollectionProxy; fCollectionProxy = nullptr;
485 fCollectionProxy = collProxy;
486 if (fClass && fCollectionProxy && !fClass->IsZombie()) {
487 fClass->CopyCollectionProxy(*fCollectionProxy);
488 }
489 return 0;
490 }
491
492 void TGenericClassInfo::SetReadRawRules( const std::vector<Internal::TSchemaHelper>& rules )
493 {
494 // Set the list of Data Model Evolution read rules giving direct access to the TBuffer.
495 fReadRawRules = rules;
496 }
497
498
499 void TGenericClassInfo::SetReadRules( const std::vector<Internal::TSchemaHelper>& rules )
500 {
501 // Set the list of Data Model Evolution regular read rules.
502 fReadRules = rules;
503 }
504
505 Short_t TGenericClassInfo::SetStreamer(ClassStreamerFunc_t streamer)
506 {
507 // Set a External Streamer function.
508
509 delete fStreamer; fStreamer = nullptr;
510 if (fClass) {
511 fClass->AdoptStreamer(new TClassStreamer(streamer));
512 } else {
513 fStreamer = new TClassStreamer(streamer);
514 }
515 return 0;
516 }
517
518 void TGenericClassInfo::SetStreamerFunc(ClassStreamerFunc_t streamer)
519 {
520 // Set a wrapper around the Streamer member function.
521
522 fStreamerFunc = streamer;
523 if (fClass) fClass->SetStreamerFunc(streamer);
524 }
525
526 void TGenericClassInfo::SetConvStreamerFunc(ClassConvStreamerFunc_t streamer)
527 {
528 // Set a wrapper around the Streamer member function.
529
530 fConvStreamerFunc = streamer;
531 if (fClass) fClass->SetConvStreamerFunc(streamer);
532 }
533
534 const char *TGenericClassInfo::GetDeclFileName() const
535 {
536 // Get the name of the declaring header file.
537
538 return fDeclFileName;
539 }
540
541 Int_t TGenericClassInfo::GetDeclFileLine() const
542 {
543 // Get the declaring line number.
544
545 return fDeclFileLine;
546 }
547
548 const char *TGenericClassInfo::GetImplFileName()
549 {
550 // Get the implementation filename.
551
552 if (!fImplFileName) SetFromTemplate();
553 return fImplFileName;
554 }
555
556 Int_t TGenericClassInfo::GetImplFileLine()
557 {
558 // Get the ClassImp line number.
559
560 if (!fImplFileLine) SetFromTemplate();
561 return fImplFileLine;
562 }
563
564 Int_t TGenericClassInfo::GetVersion() const
565 {
566 // Return the class version number.
567
568 return fVersion;
569 }
570
571 TClass *TGenericClassInfo::IsA(const void *obj)
572 {
573 // Return the actual type of the object.
574
575 return (*GetIsA())(obj);
576 }
577
578 TVirtualIsAProxy* TGenericClassInfo::GetIsA() const
579 {
580 // Return the IsA proxy.
581
582 return fIsA;
583 }
584
585 void TGenericClassInfo::SetNew(NewFunc_t newFunc)
586 {
587 // Install a new wrapper around 'new'.
588
589 fNew = newFunc;
590 if (fClass) fClass->SetNew(fNew);
591 }
592
593 void TGenericClassInfo::SetNewArray(NewArrFunc_t newArrayFunc)
594 {
595 // Install a new wrapper around 'new []'.
596
597 fNewArray = newArrayFunc;
598 if (fClass) fClass->SetNewArray(fNewArray);
599 }
600
601 void TGenericClassInfo::SetDelete(DelFunc_t deleteFunc)
602 {
603 // Install a new wrapper around 'delete'.
604
605 fDelete = deleteFunc;
606 if (fClass) fClass->SetDelete(fDelete);
607 }
608
609 void TGenericClassInfo::SetDeleteArray(DelArrFunc_t deleteArrayFunc)
610 {
611 // Install a new wrapper around 'delete []'.
612
613 fDeleteArray = deleteArrayFunc;
614 if (fClass) fClass->SetDeleteArray(fDeleteArray);
615 }
616
617 void TGenericClassInfo::SetDestructor(DesFunc_t destructorFunc)
618 {
619 // Install a new wrapper around the destructor.
620
621 fDestructor = destructorFunc;
622 if (fClass) fClass->SetDestructor(fDestructor);
623 }
624
625 void TGenericClassInfo::SetDirectoryAutoAdd(DirAutoAdd_t func)
626 {
627 // Install a new wrapper around SetDirectoryAutoAdd.
628
629 fDirAutoAdd = func;
630 if (fClass) fClass->SetDirectoryAutoAdd(fDirAutoAdd);
631 }
632
633 void TGenericClassInfo::SetMerge(MergeFunc_t func)
634 {
635 // Install a new wrapper around the Merge function.
636
637 fMerge = func;
638 if (fClass) fClass->SetMerge(fMerge);
639 }
640
641 void TGenericClassInfo::SetResetAfterMerge(ResetAfterMergeFunc_t func)
642 {
643 // Install a new wrapper around the Merge function.
644
645 fResetAfterMerge = func;
646 if (fClass) fClass->SetResetAfterMerge(fResetAfterMerge);
647 }
648
649 NewFunc_t TGenericClassInfo::GetNew() const
650 {
651 // Get the wrapper around 'new'.
652
653 return fNew;
654 }
655
656 NewArrFunc_t TGenericClassInfo::GetNewArray() const
657 {
658 // Get the wrapper around 'new []'.
659
660 return fNewArray;
661 }
662
663 DelFunc_t TGenericClassInfo::GetDelete() const
664 {
665 // Get the wrapper around 'delete'.
666
667 return fDelete;
668 }
669
670 DelArrFunc_t TGenericClassInfo::GetDeleteArray() const
671 {
672 // Get the wrapper around 'delete []'.
673
674 return fDeleteArray;
675 }
676
677 DesFunc_t TGenericClassInfo::GetDestructor() const
678 {
679 // Get the wrapper around the destructor.
680
681 return fDestructor;
682 }
683
684 DirAutoAdd_t TGenericClassInfo::GetDirectoryAutoAdd() const
685 {
686 // Get the wrapper around the directory-auto-add function .
687
688 return fDirAutoAdd;
689 }
690
691}
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
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)())
void(* ReadFuncPtr_t)(char *, TVirtualObject *)
Definition TSchemaRule.h:40
void(* ReadRawFuncPtr_t)(char *, TBuffer &)
Definition TSchemaRule.h:41
@ 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:81
The TNamed class is the base class for all named ROOT classes.
Definition TNamed.h:29
const char * GetTitle() const override
Returns title of object.
Definition TNamed.h:48
virtual UInt_t GetUniqueID() const
Return the unique object id.
Definition TObject.cxx:474
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
const char * Data() const
Definition TString.h:376
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.