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
85TGenericClassInfo::TGenericClassInfo(const char *fullClassname, const char *declFileName, Int_t declFileLine,
86 const std::type_info &info, const Internal::TInitBehavior *action,
88 std::size_t alignof_)
89 : fAction(action),
90 fClass(nullptr),
91 fClassName(fullClassname),
92 fDeclFileName(declFileName),
93 fDeclFileLine(declFileLine),
95 fInfo(info),
96 fImplFileName(nullptr),
97 fImplFileLine(0),
98 fIsA(isa),
99 fVersion(1),
100 fMerge(nullptr),
101 fResetAfterMerge(nullptr),
102 fNew(nullptr),
103 fNewArray(nullptr),
104 fDelete(nullptr),
105 fDeleteArray(nullptr),
106 fDestructor(nullptr),
107 fDirAutoAdd(nullptr),
108 fStreamer(nullptr),
109 fStreamerFunc(nullptr),
110 fConvStreamerFunc(nullptr),
111 fCollectionProxy(nullptr),
112 fSizeof(sizof),
113 fAlignment(alignof_),
115 fCollectionProxyInfo(nullptr),
117{
118 // Constructor.
119
120 Init(pragmabits);
121}
122
123TGenericClassInfo::TGenericClassInfo(const char *fullClassname, Int_t version, const char *declFileName,
124 Int_t declFileLine, const std::type_info &info,
125 const Internal::TInitBehavior *action, DictFuncPtr_t dictionary,
127 : fAction(action),
128 fClass(nullptr),
129 fClassName(fullClassname),
130 fDeclFileName(declFileName),
131 fDeclFileLine(declFileLine),
133 fInfo(info),
134 fImplFileName(nullptr),
135 fImplFileLine(0),
136 fIsA(isa),
137 fVersion(version),
138 fMerge(nullptr),
139 fResetAfterMerge(nullptr),
140 fNew(nullptr),
141 fNewArray(nullptr),
142 fDelete(nullptr),
143 fDeleteArray(nullptr),
144 fDestructor(nullptr),
145 fDirAutoAdd(nullptr),
146 fStreamer(nullptr),
147 fStreamerFunc(nullptr),
148 fConvStreamerFunc(nullptr),
149 fCollectionProxy(nullptr),
150 fSizeof(sizof),
151 fAlignment(alignof_),
153 fCollectionProxyInfo(nullptr),
155
156{
157 // Constructor with version number and no showmembers.
158
159 Init(pragmabits);
160}
161
162 class TForNamespace {}; // Dummy class to give a typeid to namespace (See also TClassTable.cc)
163
164 TGenericClassInfo::TGenericClassInfo(const char *fullClassname, Int_t version, const char *declFileName,
165 Int_t declFileLine, const Internal::TInitBehavior *action,
167 : fAction(action),
168 fClass(nullptr),
169 fClassName(fullClassname),
170 fDeclFileName(declFileName),
171 fDeclFileLine(declFileLine),
173 fInfo(typeid(TForNamespace)),
174 fImplFileName(nullptr),
175 fImplFileLine(0),
176 fIsA(nullptr),
177 fVersion(version),
178 fMerge(nullptr),
179 fResetAfterMerge(nullptr),
180 fNew(nullptr),
181 fNewArray(nullptr),
182 fDelete(nullptr),
183 fDeleteArray(nullptr),
184 fDestructor(nullptr),
185 fDirAutoAdd(nullptr),
186 fStreamer(nullptr),
187 fStreamerFunc(nullptr),
188 fConvStreamerFunc(nullptr),
189 fCollectionProxy(nullptr),
190 fSizeof(0),
191 fAlignment(0),
193 fCollectionProxyInfo(nullptr),
195
196 {
197 // Constructor for namespace
198
200 }
201
202 /* TGenericClassInfo::TGenericClassInfo(const TGenericClassInfo& gci) :
203 fAction(gci.fAction),
204 fClass(gci.fClass),
205 fClassName(gci.fClassName),
206 fDeclFileName(gci.fDeclFileName),
207 fDeclFileLine(gci.fDeclFileLine),
208 fDictionary(gci.fDictionary),
209 fInfo(gci.fInfo),
210 fImplFileName(gci.fImplFileName),
211 fImplFileLine(gci.fImplFileLine),
212 fIsA(gci.fIsA),
213 fVersion(gci.fVersion),
214 fNew(gci.fNew),
215 fNewArray(gci.fNewArray),
216 fDelete(gci.fDelete),
217 fDeleteArray(gci.fDeleteArray),
218 fDestructor(gci.fDestructor),
219 fStreamer(gci.fStreamer),
220 fCollectionProxy(gci.fCollectionProxy),
221 fSizeof(gci.fSizeof)
222 { }
223
224 TGenericClassInfo& TGenericClassInfo::operator=(const TGenericClassInfo& gci)
225 {
226 if(this!=&gci) {
227 fAction=gci.fAction;
228 fClass=gci.fClass;
229 fClassName=gci.fClassName;
230 fDeclFileName=gci.fDeclFileName;
231 fDeclFileLine=gci.fDeclFileLine;
232 fDictionary=gci.fDictionary;
233 fInfo=gci.fInfo;
234 fImplFileName=gci.fImplFileName;
235 fImplFileLine=gci.fImplFileLine;
236 fIsA=gci.fIsA;
237 fVersion=gci.fVersion;
238 fNew=gci.fNew;
239 fNewArray=gci.fNewArray;
240 fDelete=gci.fDelete;
241 fDeleteArray=gci.fDeleteArray;
242 fDestructor=gci.fDestructor;
243 fStreamer=gci.fStreamer;
244 fCollectionProxy=gci.fCollectionProxy;
245 fSizeof=gci.fSizeof;
246 } return *this;
247 }
248 */
249
250 void TGenericClassInfo::Init(Int_t pragmabits)
251 {
252 // Initilization routine.
253
254 //TVirtualStreamerInfo::Class_Version MUST be the same as TStreamerInfo::Class_Version
255 if (fVersion==-2) fVersion = TVirtualStreamerInfo::Class_Version();
256 if (!fAction) return;
257 GetAction().Register(fClassName,
258 fVersion,
259 fInfo, // typeid(RootClass),
261 pragmabits);
262 }
263
264 TGenericClassInfo::~TGenericClassInfo()
265 {
266 // Destructor.
267
270 delete fStreamer;
271 if (!fClass)
272 delete fIsA; // fIsA is adopted by the class if any.
273 fIsA = nullptr;
276 return;
277 for(auto alt : fAlternate)
279 if (fAction)
280 GetAction().Unregister(GetClassName(), fClass);
281 }
282
283 const Internal::TInitBehavior &TGenericClassInfo::GetAction() const
284 {
285 // Return the creator action.
286
287 return *fAction;
288 }
289
290 TClass *TGenericClassInfo::GetClass()
291 {
292 // Generate and return the TClass object.
293
294 // First make sure that TROOT is initialized, do this before checking
295 // for fClass. If the request is for the TClass of TObject and TROOT
296 // is not initialized, the TROOT creation (because of the ROOT pcm files)
297 // will lead to its own request of the TClass for TObject and thus
298 // upon returning, the TClass for TObject will have already been created
299 // and fClass will have been set.
300 if (!gROOT)
301 ::Fatal("TClass::TClass", "ROOT system not initialized");
302
303 if (gROOT->TestBit(kInvalidObject)) {
304 if (gDebug > 1)
305 ::Warning("TClass::TClass", "ROOT system is being torn down");
306 // We are at the end of time, let's do the minimum, silently.
307 return new TClass(GetClassName(), true);
308 }
309
310 if (!fClass && fAction) {
312 // Check again, while we waited for the lock, something else might
313 // have set fClass.
314 if (fClass) return fClass;
315
316 fClass = GetAction().CreateClass(GetClassName(),
317 GetVersion(),
318 GetInfo(),
319 GetIsA(),
320 GetDeclFileName(),
321 GetImplFileName(),
322 GetDeclFileLine(),
323 GetImplFileLine());
325 fClass->fHasCustomStreamerMember = true;
326 }
327 fClass->SetNew(fNew);
328 fClass->SetNewArray(fNewArray);
329 fClass->SetDelete(fDelete);
330 fClass->SetDeleteArray(fDeleteArray);
331 fClass->SetDestructor(fDestructor);
332 fClass->SetDirectoryAutoAdd(fDirAutoAdd);
333 fClass->SetStreamerFunc(fStreamerFunc);
334 fClass->SetConvStreamerFunc(fConvStreamerFunc);
335 fClass->SetMerge(fMerge);
336 fClass->SetResetAfterMerge(fResetAfterMerge);
337 fClass->AdoptStreamer(fStreamer);
338 fStreamer = nullptr;
339 for (const auto &[name, strm] : fAdoptedMemberStreamers)
340 fClass->AdoptMemberStreamer(name.c_str(), strm);
342 // If IsZombie is true, something went wrong and we will not be
343 // able to properly copy the collection proxy
344 if (!fClass->IsZombie()) {
345 if (fCollectionProxy) fClass->CopyCollectionProxy(*fCollectionProxy);
346 else if (fCollectionProxyInfo) {
347 fClass->SetCollectionProxy(*fCollectionProxyInfo);
348 }
349 }
350 fClass->SetClassSize(fSizeof);
351 fClass->SetClassAlignment(fAlignment);
352
353 //---------------------------------------------------------------------
354 // Attach the schema evolution information
355 ///////////////////////////////////////////////////////////////////////
356
357 CreateRuleSet( fReadRules, true );
359
361 fClass->CreateAttributeMap();
362 // The force-split and force-unsplit flags are mutually exclusive
366 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "false");
368 fClass->GetAttributeMap()->AddProperty("rntuple.streamerMode", "true");
369 }
370 }
371
372 if (!fRNTupleSoARecord.empty()) {
373 fClass->CreateAttributeMap();
374 fClass->GetAttributeMap()->AddProperty("rntuple.SoARecord", fRNTupleSoARecord.c_str());
375 }
376 }
377 return fClass;
378 }
379
380 /////////////////////////////////////////////////////////////////////////////
381 /// Attach the schema evolution information to TClassObject
382
383 void TGenericClassInfo::CreateRuleSet( std::vector<Internal::TSchemaHelper>& vect,
385 {
386 if ( vect.empty() ) {
387 return;
388 }
389
390 //------------------------------------------------------------------------
391 // Get the rules set
392 //////////////////////////////////////////////////////////////////////////
393
394 TSchemaRuleSet* rset = fClass->GetSchemaRules( kTRUE );
395
396 //------------------------------------------------------------------------
397 // Process the rules
398 //////////////////////////////////////////////////////////////////////////
399
400 TSchemaRule* rule;
402 std::vector<Internal::TSchemaHelper>::iterator it;
403 for( it = vect.begin(); it != vect.end(); ++it ) {
404 rule = new TSchemaRule(ProcessReadRules ? TSchemaRule::kReadRule : TSchemaRule::kReadRawRule,
405 fClass->GetName(), *it);
406
407 if (!rset->AddRule(rule, TSchemaRuleSet::kCheckAll, &errmsg)) {
408 ::Warning( "TGenericClassInfo", "The rule for class: \"%s\": version, \"%s\" and data members: \"%s\" has been skipped because %s.",
409 GetClassName(), it->fVersion.c_str(), it->fTarget.c_str(), errmsg.Data() );
410 delete rule;
411 }
412 }
413 }
414
415 const char *TGenericClassInfo::GetClassName() const
416 {
417 // Return the class name
418
419 return fClassName;
420 }
421
422
423 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionProxyInfo() const
424 {
425 // Return the set of info we have for the CollectionProxy, if any
426
428 }
429
430 Detail::TCollectionProxyInfo *TGenericClassInfo::GetCollectionStreamerInfo() const
431 {
432 // Return the set of info we have for the Collection Streamer, if any
433
435 }
436
437 const std::type_info &TGenericClassInfo::GetInfo() const
438 {
439 // Return the typeinfo value
440
441 return fInfo;
442 }
443
444 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRawRules() const
445 {
446 // Return the list of rule give raw access to the TBuffer.
447
448 return fReadRawRules;
449 }
450
451
452 const std::vector<Internal::TSchemaHelper>& TGenericClassInfo::GetReadRules() const
453 {
454 // Return the list of Data Model Evolution regular read rules.
455 return fReadRules;
456 }
457
458 void TGenericClassInfo::SetFromTemplate()
459 {
460 // Import the information from the class template.
461
462 TNamed *info = ROOT::RegisterClassTemplate(GetClassName(), nullptr, 0);
463 if (info) SetImplFile(info->GetTitle(), info->GetUniqueID());
464 }
465
466 Int_t TGenericClassInfo::SetImplFile(const char *file, Int_t line)
467 {
468 // Set the name of the implementation file.
469
470 fImplFileName = file;
471 fImplFileLine = line;
472 if (fClass) fClass->AddImplFile(file,line);
473 return 0;
474 }
475
476 Int_t TGenericClassInfo::SetDeclFile(const char *file, Int_t line)
477 {
478 // Set the name of the declaration file.
479
480 fDeclFileName = file;
481 fDeclFileLine = line;
482 if (fClass) fClass->SetDeclFile(file,line);
483 return 0;
484 }
485
486 Short_t TGenericClassInfo::SetVersion(Short_t version)
487 {
488 // Set a class version number.
489
490 ROOT::ResetClassVersion(fClass, GetClassName(),version);
491 fVersion = version;
492 return version;
493 }
494
495 void TGenericClassInfo::SetRNTupleSoARecord(const std::string &recordName)
496 {
497 fRNTupleSoARecord = recordName;
498 }
499
500 void TGenericClassInfo::AdoptAlternate(ROOT::TClassAlt *alt)
501 {
502 fAlternate.push_back(alt);
503 }
504
505 /// Returns false if the member streamer could not be adopted (this happens if the underlying TClass had its
506 /// StreamerInfo compiled already).
507 bool TGenericClassInfo::AdoptMemberStreamer(const char *name, TMemberStreamer *strm)
508 {
509 if (fClass) {
511 return fClass->AdoptMemberStreamer(name, strm);
512 }
513
514 auto [it, inserted] = fAdoptedMemberStreamers.emplace(name, strm);
515 if (!inserted) {
516 delete it->second;
517 it->second = strm;
518 }
519 return true;
520 }
521
522 void TGenericClassInfo::AdoptCollectionProxyInfo(TCollectionProxyInfo *info)
523 {
524 // Set the info for the CollectionProxy and take ownership of the object
525 // being passed
526
529 }
530
531 void TGenericClassInfo::AdoptCollectionStreamerInfo(TCollectionProxyInfo *info)
532 {
533 // Set the info for the Collection Streamer and take ownership of the object
534 // being passed
535
538 }
539
540 Short_t TGenericClassInfo::AdoptStreamer(TClassStreamer *streamer)
541 {
542 // Set a Streamer object. The streamer object is now 'owned'
543 // by the TGenericClassInfo.
544
545 delete fStreamer; fStreamer = nullptr;
546 if (fClass) {
547 fClass->AdoptStreamer(streamer);
548 } else {
549 fStreamer = streamer;
550 }
551 return 0;
552 }
553
554 Short_t TGenericClassInfo::AdoptCollectionProxy(TVirtualCollectionProxy *collProxy)
555 {
556 // Set the CollectProxy object. The CollectionProxy object is now 'owned'
557 // by the TGenericClassInfo.
558
559 delete fCollectionProxy; fCollectionProxy = nullptr;
560 fCollectionProxy = collProxy;
561 if (fClass && fCollectionProxy && !fClass->IsZombie()) {
562 fClass->CopyCollectionProxy(*fCollectionProxy);
563 }
564 return 0;
565 }
566
567 void TGenericClassInfo::SetReadRawRules( const std::vector<Internal::TSchemaHelper>& rules )
568 {
569 // Set the list of Data Model Evolution read rules giving direct access to the TBuffer.
571 }
572
573
574 void TGenericClassInfo::SetReadRules( const std::vector<Internal::TSchemaHelper>& rules )
575 {
576 // Set the list of Data Model Evolution regular read rules.
578 }
579
580 Short_t TGenericClassInfo::SetStreamer(ClassStreamerFunc_t streamer)
581 {
582 // Set a External Streamer function.
583
584 delete fStreamer; fStreamer = nullptr;
585 if (fClass) {
586 fClass->AdoptStreamer(new TClassStreamer(streamer));
587 } else {
588 fStreamer = new TClassStreamer(streamer);
589 }
590 return 0;
591 }
592
593 void TGenericClassInfo::SetStreamerFunc(ClassStreamerFunc_t streamer)
594 {
595 // Set a wrapper around the Streamer member function.
596
597 fStreamerFunc = streamer;
598 if (fClass) fClass->SetStreamerFunc(streamer);
599 }
600
601 void TGenericClassInfo::SetConvStreamerFunc(ClassConvStreamerFunc_t streamer)
602 {
603 // Set a wrapper around the Streamer member function.
604
605 fConvStreamerFunc = streamer;
606 if (fClass) fClass->SetConvStreamerFunc(streamer);
607 }
608
609 const char *TGenericClassInfo::GetDeclFileName() const
610 {
611 // Get the name of the declaring header file.
612
613 return fDeclFileName;
614 }
615
616 Int_t TGenericClassInfo::GetDeclFileLine() const
617 {
618 // Get the declaring line number.
619
620 return fDeclFileLine;
621 }
622
623 const char *TGenericClassInfo::GetImplFileName()
624 {
625 // Get the implementation filename.
626
627 if (!fImplFileName) SetFromTemplate();
628 return fImplFileName;
629 }
630
631 Int_t TGenericClassInfo::GetImplFileLine()
632 {
633 // Get the ClassDef line number.
634
635 if (!fImplFileLine) SetFromTemplate();
636 return fImplFileLine;
637 }
638
639 Int_t TGenericClassInfo::GetVersion() const
640 {
641 // Return the class version number.
642
643 return fVersion;
644 }
645
646 TClass *TGenericClassInfo::IsA(const void *obj)
647 {
648 // Return the actual type of the object.
649
650 return (*GetIsA())(obj);
651 }
652
653 TVirtualIsAProxy* TGenericClassInfo::GetIsA() const
654 {
655 // Return the IsA proxy.
656
657 return fIsA;
658 }
659
660 void TGenericClassInfo::SetNew(NewFunc_t newFunc)
661 {
662 // Install a new wrapper around 'new'.
663
664 fNew = newFunc;
665 if (fClass) fClass->SetNew(fNew);
666 }
667
668 void TGenericClassInfo::SetNewArray(NewArrFunc_t newArrayFunc)
669 {
670 // Install a new wrapper around 'new []'.
671
672 fNewArray = newArrayFunc;
673 if (fClass) fClass->SetNewArray(fNewArray);
674 }
675
676 void TGenericClassInfo::SetDelete(DelFunc_t deleteFunc)
677 {
678 // Install a new wrapper around 'delete'.
679
680 fDelete = deleteFunc;
681 if (fClass) fClass->SetDelete(fDelete);
682 }
683
684 void TGenericClassInfo::SetDeleteArray(DelArrFunc_t deleteArrayFunc)
685 {
686 // Install a new wrapper around 'delete []'.
687
688 fDeleteArray = deleteArrayFunc;
689 if (fClass) fClass->SetDeleteArray(fDeleteArray);
690 }
691
692 void TGenericClassInfo::SetDestructor(DesFunc_t destructorFunc)
693 {
694 // Install a new wrapper around the destructor.
695
696 fDestructor = destructorFunc;
697 if (fClass) fClass->SetDestructor(fDestructor);
698 }
699
700 void TGenericClassInfo::SetDirectoryAutoAdd(DirAutoAdd_t func)
701 {
702 // Install a new wrapper around SetDirectoryAutoAdd.
703
704 fDirAutoAdd = func;
705 if (fClass) fClass->SetDirectoryAutoAdd(fDirAutoAdd);
706 }
707
708 void TGenericClassInfo::SetMerge(MergeFunc_t func)
709 {
710 // Install a new wrapper around the Merge function.
711
712 fMerge = func;
713 if (fClass) fClass->SetMerge(fMerge);
714 }
715
716 void TGenericClassInfo::SetResetAfterMerge(ResetAfterMergeFunc_t func)
717 {
718 // Install a new wrapper around the Merge function.
719
720 fResetAfterMerge = func;
721 if (fClass) fClass->SetResetAfterMerge(fResetAfterMerge);
722 }
723
724 NewFunc_t TGenericClassInfo::GetNew() const
725 {
726 // Get the wrapper around 'new'.
727
728 return fNew;
729 }
730
731 NewArrFunc_t TGenericClassInfo::GetNewArray() const
732 {
733 // Get the wrapper around 'new []'.
734
735 return fNewArray;
736 }
737
738 DelFunc_t TGenericClassInfo::GetDelete() const
739 {
740 // Get the wrapper around 'delete'.
741
742 return fDelete;
743 }
744
745 DelArrFunc_t TGenericClassInfo::GetDeleteArray() const
746 {
747 // Get the wrapper around 'delete []'.
748
749 return fDeleteArray;
750 }
751
752 DesFunc_t TGenericClassInfo::GetDestructor() const
753 {
754 // Get the wrapper around the destructor.
755
756 return fDestructor;
757 }
758
759 DirAutoAdd_t TGenericClassInfo::GetDirectoryAutoAdd() const
760 {
761 // Get the wrapper around the directory-auto-add function .
762
763 return fDirAutoAdd;
764 }
765
766}
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:148
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:783
R__EXTERN TVirtualMutex * gROOTMutex
Definition TROOT.h:63
#define gROOT
Definition TROOT.h:426
#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:248
static Bool_t Initialized()
Return kTRUE if the TROOT object has been initialized.
Definition TROOT.cxx:3076
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:399
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.