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