Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TClass.h
Go to the documentation of this file.
1// @(#)root/meta:$Id$
2// Author: Rene Brun 07/01/95
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
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#ifndef ROOT_TClass
13#define ROOT_TClass
14
15//////////////////////////////////////////////////////////////////////////
16// //
17// TClass //
18// //
19// Dictionary of a class. //
20// //
21//////////////////////////////////////////////////////////////////////////
22
23#include "TDictionary.h"
24#include "TString.h"
25
26#ifdef R__LESS_INCLUDES
27class TObjArray;
28#else
29#include "TObjArray.h"
30// Not used in this header file; user code should #include this directly.
31// #include "TObjString.h"
32// #include "ThreadLocalStorage.h"
33// #include <set>
34#endif
35
36#include <cstddef>
37#include <map>
38#include <string>
39#include <unordered_set>
40#include <vector>
41#include <atomic>
42
43class TBaseClass;
44class TBrowser;
45class TDataMember;
46class TCling;
47class TMethod;
48class TRealData;
49class TBuffer;
52class TMethodCall;
55class THashTable;
59class TListOfEnums;
63class TProtoClass;
64
65namespace ROOT {
66 class TGenericClassInfo;
67 class TMapTypeToTClass;
68 class TMapDeclIdToTClass;
69 namespace Detail {
70 class TSchemaRuleSet;
71 class TCollectionProxyInfo;
72 }
73 namespace Internal {
74 class TCheckHashRecursiveRemoveConsistency;
75 }
76}
77
80
81class TClass : public TDictionary {
82
83friend class TCling;
84friend void ROOT::ResetClassVersion(TClass*, const char*, Short_t);
86friend class TProtoClass;
88friend class TStreamerInfo;
89
90public:
91 // TClass status bits
93 kReservedLoading = BIT(7), // Internal status bits, set and reset only during initialization
94
98 kUnloaded = BIT(16), // The library containing the dictionary for this class was
99 // loaded and has been unloaded from memory.
102 kIsEmulation = BIT(19), // Deprecated
103 kStartWithTObject = BIT(20), // see comments for IsStartingWithTObject()
106 kHasCustomStreamerMember = BIT(23) // The class has a Streamer method and it is implemented by the user or an older (not StreamerInfo based) automatic streamer.
107 };
111 kNoEnum = 1, // Used since v3.3
112 kReflexNoComment = 2, // Up to v5.34.18 (has no range/comment and no typedef at all)
113 kNoRange = 3, // Up to v5.17
114 kWithTypeDef = 4, // Up to v5.34.18 and v5.99/06
115 kReflex = 5, // Up to v5.34.18 (has no typedef at all)
116 kNoRangeCheck = 6, // Up to v5.34.18 and v5.99/06
117 kNoBaseCheckSum = 7, // Up to v5.34.18 and v5.99/06
119 };
120
121 // Describe the current state of the TClass itself.
122 enum EState {
123 kNoInfo, // The state has not yet been initialized, i.e. the TClass
124 // was just created and/or there is no trace of it in the interpreter.
125 kForwardDeclared, // The interpreted knows the entity is a class but that's it.
126 kEmulated, // The information about the class only comes from a TStreamerInfo
127 kInterpreted, // The class is described completely/only in the interpreter database.
128 kHasTClassInit, // The class has a TClass proper bootstrap coming from a run
129 // through rootcling/genreflex/TMetaUtils and the library
130 // containing this dictionary has been loaded in memory.
132 kNamespaceForMeta // Very transient state necessary to bootstrap namespace entries
133 // in ROOT Meta w/o interpreter information
134 };
135
136 // "Typed" pointer that recalls how TClass::New allocated the object.
137 // It is returned by TClass:NewObject and should be passed to TClass::DeleteArray or TClass::Destructor
138 // to delete the object.
139 // It is also used in TVirtualCollectionProxy for the same reasons.
141 {
142 void *fPtr = nullptr;
143
145
146 ObjectPtr(void *ptr = nullptr, TVirtualStreamerInfo *allocator = nullptr) : fPtr(ptr), fAllocator(allocator) {}
147
148 void *GetPtr() const { return fPtr; }
149
151
152 operator bool() const { return fPtr != nullptr; }
153 };
154
155private:
156
157
158
160 // A class which is used to collect decl names starting from normalised
161 // names (typedef resolution is excluded here, just string manipulation
162 // is performed). At the heart of the implementation, an unordered set.
163 public:
164 TDeclNameRegistry(Int_t verbLevel=0);
165 void AddQualifiedName(const char *name);
166 Bool_t HasDeclName(const char *name) const;
168 private:
170 std::unordered_set<std::string> fClassNamesSet;
171 mutable std::atomic_flag fSpinLock; // MSVC doesn't support = ATOMIC_FLAG_INIT;
172 };
173
175 // Trivial RAII used to insert names in the registry
177 const char* fName;
179 public:
180 InsertTClassInRegistryRAII(TClass::EState &state, const char *name, TDeclNameRegistry &emuRegistry);
182 };
183
184 // TClass objects can be created as a result of opening a TFile (in which
185 // they are in emulated mode) or as a result of loading the dictionary for
186 // the corresponding class. When a dictionary is loaded any pre-existing
187 // emulated TClass is replaced by the one created/coming from the dictionary.
188 // To have a reference that always point to the 'current' TClass object for
189 // a given class, one should use a TClassRef.
190 // TClassRef works by holding on to the fPersistentRef which is updated
191 // atomically whenever a TClass is replaced. During the replacement the
192 // value of fPersistentRef is set to zero, leading the TClassRef to call
193 // TClass::GetClass which is also locked by the replacement. At the end
194 // of the replacement, fPersistentRef points to the new TClass object.
195 std::atomic<TClass**> fPersistentRef;//!Persistent address of pointer to this TClass object and its successors.
196
197 typedef std::atomic<std::map<std::string, TObjArray*>*> ConvSIMap_t;
198
199 mutable TObjArray *fStreamerInfo; //Array of TVirtualStreamerInfo
200 mutable ConvSIMap_t fConversionStreamerInfo; //Array of the streamer infos derived from another class.
201 TList *fRealData; //linked list for persistent members including base classes
202 std::atomic<TList*> fBase; //linked list for base classes
203 std::atomic<TListOfDataMembers*> fData; //linked list for data members; non-owning.
204 std::atomic<TListOfDataMembers*> fUsingData;//linked list for data members pulled in through using decls.
205
206 std::atomic<TListOfEnums*> fEnums; //linked list for the enums
207 TListOfFunctionTemplates *fFuncTemplate; //linked list for function templates [Not public until implemented as active list]
208 std::atomic<TListOfFunctions*> fMethod; //linked list for methods
209
210 TViewPubDataMembers*fAllPubData; //all public data members (including from base classes)
211 TViewPubFunctions *fAllPubMethod; //all public methods (including from base classes)
212 mutable TList *fClassMenuList; //list of class menu items
213
214 const char *fDeclFileName; //name of class declaration file
215 const char *fImplFileName; //name of class implementation file
216 Short_t fDeclFileLine; //line of class declaration
217 Short_t fImplFileLine; //line of class implementation
218 UInt_t fInstanceCount; //number of instances of this class
219 UInt_t fOnHeap; //number of instances on heap
220 mutable std::atomic<UInt_t> fCheckSum; //checksum of data members and base classes
222 Version_t fClassVersion; //Class version Identifier
223 ClassInfo_t *fClassInfo; //pointer to CINT class info class
224 TString fContextMenuTitle;//context menu title
225 const std::type_info *fTypeInfo; //pointer to the C++ type information.
226 ShowMembersFunc_t fShowMembers; //pointer to the class's ShowMembers function
227 TClassStreamer *fStreamer; //pointer to streamer function
228 TString fSharedLibs; //shared libraries containing class code
229
230 TVirtualIsAProxy *fIsA; //!pointer to the class's IsA proxy.
231 IsAGlobalFunc_t fGlobalIsA; //pointer to a global IsA function.
232 mutable std::atomic<TMethodCall*> fIsAMethod; //!saved info to call a IsA member function
233
234 ROOT::MergeFunc_t fMerge; //pointer to a function implementing Merging objects of this class.
235 ROOT::ResetAfterMergeFunc_t fResetAfterMerge; //pointer to a function implementing Merging objects of this class.
236 ROOT::NewFunc_t fNew; //pointer to a function newing one object.
237 ROOT::NewArrFunc_t fNewArray; //pointer to a function newing an array of objects.
238 ROOT::DelFunc_t fDelete; //pointer to a function deleting one object.
239 ROOT::DelArrFunc_t fDeleteArray; //pointer to a function deleting an array of objects.
240 ROOT::DesFunc_t fDestructor; //pointer to a function call an object's destructor.
241 ROOT::DirAutoAdd_t fDirAutoAdd; //pointer which implements the Directory Auto Add feature for this class.']'
242 ClassStreamerFunc_t fStreamerFunc; //Wrapper around this class custom Streamer member function.
243 ClassConvStreamerFunc_t fConvStreamerFunc; //Wrapper around this class custom conversion Streamer member function.
244 Int_t fSizeof; //Sizeof the class.
245
246 // Bit field
247 Int_t fCanSplit : 3; //!Indicates whether this class can be split or not. Values are -1, 0, 1, 2
248
249 /// Indicates whether this class represents a pair and was not created from a dictionary nor interpreter info but has
250 /// compiler compatible offset and size (and all the info is in the StreamerInfo per se)
252
253 mutable std::atomic<Long_t> fProperty; //!Property See TClass::Property() for details
254 mutable Long_t fClassProperty; //!C++ Property of the class (is abstract, has virtual table, etc.)
255
256 // fHasRootPcmInfo needs to be atomic as long as GetListOfBases needs to modify it.
257 std::atomic<Bool_t> fHasRootPcmInfo; //!Whether info was loaded from a root pcm.
258 mutable std::atomic<Bool_t> fCanLoadClassInfo; //!Indicates whether the ClassInfo is supposed to be available.
259 mutable std::atomic<Bool_t> fIsOffsetStreamerSet; //!saved remember if fOffsetStreamer has been set.
260 mutable std::atomic<Bool_t> fVersionUsed; //!Indicates whether GetClassVersion has been called
261
263 kNotInitialized = 0,
264 kSet = BIT(0),
265 // kInconsistent when kSet & !kConsistent.
267 };
269 return l & static_cast<UChar_t>(r);
270 }
271 mutable std::atomic<UChar_t> fRuntimeProperties; //! Properties that can only be evaluated at run-time
272
273 mutable Longptr_t fOffsetStreamer; //!saved info to call Streamer
274 Int_t fStreamerType; //!cached of the streaming method to use
275 EState fState; //!Current 'state' of the class (Emulated,Interpreted,Loaded)
276 mutable std::atomic<TVirtualStreamerInfo*> fCurrentInfo; //!cached current streamer info.
277 mutable std::atomic<TVirtualStreamerInfo*> fLastReadInfo; //!cached streamer info used in the last read.
278 TVirtualRefProxy *fRefProxy; //!Pointer to reference proxy if this class represents a reference
279 ROOT::Detail::TSchemaRuleSet *fSchemaRules; //! Schema evolution rules
280
281 typedef void (*StreamerImpl_t)(const TClass* pThis, void *obj, TBuffer &b, const TClass *onfile_class);
282#ifdef R__NO_ATOMIC_FUNCTION_POINTER
283 mutable StreamerImpl_t fStreamerImpl; //! Pointer to the function implementing streaming for this class
284#else
285 mutable std::atomic<StreamerImpl_t> fStreamerImpl; //! Pointer to the function implementing streaming for this class
286#endif
287
293 void Init(const char *name, Version_t cversion, const std::type_info *info,
294 TVirtualIsAProxy *isa,
295 const char *dfil, const char *ifil,
296 Int_t dl, Int_t il,
297 ClassInfo_t *classInfo,
298 Bool_t silent);
299 void LoadClassInfo() const;
300
301 static TClass *LoadClassDefault(const char *requestedname, Bool_t silent);
302 static TClass *LoadClassCustom(const char *requestedname, Bool_t silent);
303
304 void SetClassVersion(Version_t version);
305 void SetClassSize(Int_t sizof) { fSizeof = sizof; }
307
308 void SetStreamerImpl();
309
311
312 // Various implementation for TClass::Stramer
313 static void StreamerExternal(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
314 static void StreamerTObject(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
315 static void StreamerTObjectInitialized(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
316 static void StreamerTObjectEmulated(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
317 static void StreamerInstrumented(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
318 static void ConvStreamerInstrumented(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
319 static void StreamerStreamerInfo(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
320 static void StreamerDefault(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
321
322 static IdMap_t *GetIdMap(); //Map from typeid to TClass pointer
323 static DeclIdMap_t *GetDeclIdMap(); //Map from DeclId_t to TClass pointer
324 static std::atomic<Int_t> fgClassCount; //provides unique id for a each class
325 //stored in TObject::fUniqueID
326 static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry; // Store decl names of the forwardd and no info instances
327 static Bool_t HasNoInfoOrEmuOrFwdDeclaredDecl(const char*);
328
329 // Internal status bits, set and reset only during initialization and thus under the protection of the global lock.
331 // Internal streamer type.
333
334 // These are the above-referenced hash tables. (The pointers are null
335 // if no entries have been made.)
337
339
340 mutable TVirtualMutex *fOVRMutex = nullptr;
341 typedef std::multimap<void*, Version_t> RepoCont_t;
343
344 void UnregisterAddressInRepository(const char *where, void *location, const TClass *what) const;
345 void MoveAddressInRepository(const char *where, void *oldadd, void *newadd, const TClass *what) const;
346 void RegisterAddressInRepository(const char *where, void *location, const TClass *what) const;
347
348private:
349 TClass(const TClass& tc) = delete;
350 TClass& operator=(const TClass&) = delete;
351
353 TList *CreateListOfDataMembers(std::atomic<TListOfDataMembers*> &data, TDictionary::EMemberSelection selection, bool load);
354
355protected:
358 void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse);
361
362public:
363 TClass();
364 TClass(const char *name, Bool_t silent = kFALSE);
365 TClass(const char *name, Version_t cversion, Bool_t silent = kFALSE);
366 TClass(const char *name, Version_t cversion, EState theState, Bool_t silent = kFALSE);
367 TClass(ClassInfo_t *info, Version_t cversion,
368 const char *dfil, const char *ifil = nullptr,
369 Int_t dl = 0, Int_t il = 0, Bool_t silent = kFALSE);
370 TClass(const char *name, Version_t cversion,
371 const char *dfil, const char *ifil = nullptr,
372 Int_t dl = 0, Int_t il = 0, Bool_t silent = kFALSE);
373 TClass(const char *name, Version_t cversion,
374 const std::type_info &info, TVirtualIsAProxy *isa,
375 const char *dfil, const char *ifil,
376 Int_t dl, Int_t il, Bool_t silent = kFALSE);
377 virtual ~TClass();
378
379 void AddInstance(Bool_t heap = kFALSE) { fInstanceCount++; if (heap) fOnHeap++; }
380 void AddImplFile(const char *filename, int line);
381 static Bool_t AddRule(const char *rule);
382 static Int_t ReadRules(const char *filename);
383 static Int_t ReadRules();
385 void Browse(TBrowser *b) override;
386 void BuildRealData(void *pointer = nullptr, Bool_t isTransient = kFALSE);
387 void BuildEmulatedRealData(const char *name, Longptr_t offset, TClass *cl, Bool_t isTransient = kFALSE);
388 void CalculateStreamerOffset() const;
389 Bool_t CallShowMembers(const void* obj, TMemberInspector &insp, Bool_t isTransient = kFALSE) const;
390 Bool_t CanSplit() const;
392 Long_t ClassProperty() const;
393 TObject *Clone(const char *newname="") const override;
395 void Draw(Option_t *option="") override;
396 void Dump() const override { TDictionary::Dump(); }
397 void Dump(const void *obj, Bool_t noAddr = kFALSE) const;
398 char *EscapeChars(const char *text) const;
399 TVirtualStreamerInfo *FindStreamerInfo(UInt_t checksum, Bool_t isTransient = kFALSE) const;
400 TVirtualStreamerInfo *GetConversionStreamerInfo( const char* onfile_classname, Int_t version ) const;
401 TVirtualStreamerInfo *FindConversionStreamerInfo( const char* onfile_classname, UInt_t checksum ) const;
402 TVirtualStreamerInfo *GetConversionStreamerInfo( const TClass* onfile_cl, Int_t version ) const;
403 TVirtualStreamerInfo *FindConversionStreamerInfo( const TClass* onfile_cl, UInt_t checksum ) const;
404 void ForceReload (TClass* oldcl);
407 Bool_t HasInterpreterInfoInMemory() const { return nullptr != fClassInfo; }
410 UInt_t GetCheckSum(Bool_t &isvalid) const;
411 UInt_t GetCheckSum(ECheckSum code, Bool_t &isvalid) const;
414 TMethod *GetClassMethod(const char *name, const char *params, Bool_t objectIsConst = kFALSE);
415 TMethod *GetClassMethodWithPrototype(const char *name, const char *proto,
416 Bool_t objectIsConst = kFALSE,
419 if (!fVersionUsed.load(std::memory_order_relaxed))
421 return fClassVersion;
422 }
423 Int_t GetClassSize() const { return Size(); }
424 TDataMember *GetDataMember(const char *datamember) const;
425 Longptr_t GetDataMemberOffset(const char *membername) const;
426 const char *GetDeclFileName() const;
431 ClassInfo_t *GetClassInfo() const {
434 return fClassInfo;
435 }
436 const char *GetContextMenuTitle() const { return fContextMenuTitle; }
438 auto current = fCurrentInfo.load(std::memory_order_relaxed);
439 if (current) return current;
440 else return DetermineCurrentStreamerInfo();
441 }
450 TCollection *GetListOfMethodOverloads(const char* name) const;
451 TList *GetListOfRealData() const { return fRealData; }
454 const char *GetImplFileName() const { return fImplFileName; }
456 TClass *GetActualClass(const void *object) const;
457 TClass *GetBaseClass(const char *classname);
458 TClass *GetBaseClass(const TClass *base);
459 Int_t GetBaseClassOffset(const TClass *toBase, void *address = nullptr, bool isDerivedObject = true);
460 TClass *GetBaseDataMember(const char *datamember);
466 void GetMenuItems(TList *listitems);
467 TList *GetMenuList() const;
468 TMethod *GetMethod(const char *method, const char *params, Bool_t objectIsConst = kFALSE);
469 TMethod *GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst = kFALSE,
471 TMethod *GetMethodAny(const char *method);
472 TMethod *GetMethodAllAny(const char *method);
473 Int_t GetNdata();
476 ROOT::NewFunc_t GetNew() const;
479 TClass *const*GetPersistentRef() const { return fPersistentRef; }
480 TRealData *GetRealData(const char *name) const;
484 const char *GetSharedLibs();
486 EState GetState() const { return fState; }
490 const TObjArray *GetStreamerInfos() const { return fStreamerInfo; }
491 TVirtualStreamerInfo *GetStreamerInfo(Int_t version=0, Bool_t isTransient = kFALSE) const;
494 const std::type_info *GetTypeInfo() const { return fTypeInfo; };
495
496 /// @brief Return 'true' if we can guarantee that if this class (or any class in
497 /// this class inheritance hierarchy) overload TObject::Hash it also starts
498 /// the RecursiveRemove process from its own destructor.
500 {
504 }
505 Bool_t HasDictionary() const;
506 static Bool_t HasDictionarySelection(const char* clname);
508 void GetMissingDictionaries(THashTable& result, bool recurse = false);
510 Bool_t InheritsFrom(const char *cl) const override;
511 Bool_t InheritsFrom(const TClass *cl) const override;
512 void InterpretedShowMembers(void* obj, TMemberInspector &insp, Bool_t isTransient);
513 Bool_t IsFolder() const override { return kTRUE; }
514 Bool_t IsLoaded() const;
515 Bool_t IsForeign() const;
518 Bool_t IsVersioned() const { return !( GetClassVersion()<=1 && IsForeign() ); }
519 Bool_t IsTObject() const;
520 static TClass *LoadClass(const char *requestedname, Bool_t silent);
521 void ls(Option_t *opt="") const override;
522 void MakeCustomMenuList();
523 Bool_t MatchLegacyCheckSum(UInt_t checksum) const;
524 void Move(void *arenaFrom, void *arenaTo) const;
525 void *New(ENewType defConstructor = kClassNew, Bool_t quiet = kFALSE) const;
526 void *New(void *arena, ENewType defConstructor = kClassNew) const;
527 void *NewArray(Long_t nElements, ENewType defConstructor = kClassNew) const;
528 void *NewArray(Long_t nElements, void *arena, ENewType defConstructor = kClassNew) const;
529 ObjectPtr NewObject(ENewType defConstructor = kClassNew, Bool_t quiet = kFALSE) const;
530 ObjectPtr NewObject(void *arena, ENewType defConstructor = kClassNew) const;
531 ObjectPtr NewObjectArray(Long_t nElements, ENewType defConstructor = kClassNew) const;
532 ObjectPtr NewObjectArray(Long_t nElements, void *arena, ENewType defConstructor = kClassNew) const;
533 virtual void PostLoadCheck();
534 Long_t Property() const override;
535 Int_t ReadBuffer(TBuffer &b, void *pointer, Int_t version, UInt_t start, UInt_t count);
536 Int_t ReadBuffer(TBuffer &b, void *pointer);
538 void RemoveStreamerInfo(Int_t slot);
539 void ReplaceWith(TClass *newcl) const;
540 void ResetCaches();
541 void ResetClassInfo(Long_t tagnum);
542 void ResetClassInfo();
544 void ResetMenuList();
545 Int_t Size() const;
546 void SetCanSplit(Int_t splitmode);
548 void SetContextMenuTitle(const char *title);
551 void SetDeclFile(const char *name, int line) { fDeclFileName = name; fDeclFileLine = line; }
552 void SetDelete(ROOT::DelFunc_t deleteFunc);
553 void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc);
554 void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc);
555 void SetDestructor(ROOT::DesFunc_t destructorFunc);
556 void SetImplFileName(const char *implFileName) { fImplFileName = implFileName; }
557 void SetMerge(ROOT::MergeFunc_t mergeFunc);
559 void SetNew(ROOT::NewFunc_t newFunc);
560 void SetNewArray(ROOT::NewArrFunc_t newArrayFunc);
561 TVirtualStreamerInfo *SetStreamerInfo(Int_t version, const char *info="");
562 void SetUnloaded();
563 Int_t WriteBuffer(TBuffer &b, void *pointer, const char *info="");
564
566 void AdoptStreamer(TClassStreamer *strm);
567 void AdoptMemberStreamer(const char *name, TMemberStreamer *strm);
568 void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm);
571
572 // Function to retrieve the TClass object and dictionary function
573 static void AddClass(TClass *cl);
575 static void RemoveClass(TClass *cl);
577 static TClass *GetClass(const char *name, Bool_t load = kTRUE, Bool_t silent = kFALSE);
578 static TClass *GetClass(const char *name, Bool_t load, Bool_t silent, size_t hint_pair_offset, size_t hint_pair_size);
579 static TClass *GetClass(const std::type_info &typeinfo, Bool_t load = kTRUE, Bool_t silent = kFALSE, size_t hint_pair_offset = 0, size_t hint_pair_size = 0);
580 static TClass *GetClass(ClassInfo_t *info, Bool_t load = kTRUE, Bool_t silent = kFALSE);
581 template<typename T>
582 static TClass *GetClass(Bool_t load = kTRUE, Bool_t silent = kFALSE);
583 static Bool_t GetClass(DeclId_t id, std::vector<TClass*> &classes);
584 static DictFuncPtr_t GetDict (const char *cname);
585 static DictFuncPtr_t GetDict (const std::type_info &info);
586
587 static Int_t AutoBrowse(TObject *obj, TBrowser *browser);
588 static ENewType IsCallingNew();
589 static TClass *Load(TBuffer &b);
590 void Store(TBuffer &b) const;
591
592 // Pseudo-method apply to the 'obj'. In particular those are used to
593 // implement TObject like methods for non-TObject classes.
594 Int_t Browse(void *obj, TBrowser *b) const;
595 void DeleteArray(void *ary, Bool_t dtorOnly = kFALSE);
596 void DeleteArray(ObjectPtr ary, Bool_t dtorOnly = kFALSE);
597 void Destructor(void *obj, Bool_t dtorOnly = kFALSE);
598 void Destructor(ObjectPtr obj, Bool_t dtorOnly = kFALSE);
599 void *DynamicCast(const TClass *base, void *obj, Bool_t up = kTRUE);
600 const void *DynamicCast(const TClass *base, const void *obj, Bool_t up = kTRUE);
601 Bool_t IsFolder(void *obj) const;
602
603 inline void Streamer(void *obj, TBuffer &b, const TClass *onfile_class = nullptr) const
604 {
605 // Inline for performance, skipping one function call.
606#ifdef R__NO_ATOMIC_FUNCTION_POINTER
607 fStreamerImpl(this,obj,b,onfile_class);
608#else
609 auto t = fStreamerImpl.load();
610 t(this,obj,b,onfile_class);
611#endif
612 }
613
614 ClassDefOverride(TClass,0) //Dictionary containing class information
615};
616
617namespace ROOT {
618namespace Internal {
619template <typename T>
621{
622 return T::Class();
623}
624
625template <typename T>
627 static TClass *GetClass(Bool_t load, Bool_t silent) {
628 return TClass::GetClass(typeid(T), load, silent);
629 }
630};
631
632template <typename F, typename S>
633struct TClassGetClassHelper<std::pair<F, S> > {
634 static TClass *GetClass(Bool_t load, Bool_t silent) {
635 using pair_t = std::pair<F,S>;
636 size_t hint_offset = offsetof(pair_t, second);
637 return TClass::GetClass(typeid(std::pair<F, S>), load, silent, hint_offset, sizeof(std::pair<F,S>));
638 }
639};
640
641template <typename T>
642TClass *GetClassHelper(Bool_t load, Bool_t silent, std::false_type)
643{
644 return TClassGetClassHelper<T>::GetClass(load, silent);
645}
646
647} // namespace Internal
648} // namespace ROOT
649
650template <typename T>
652{
653 typename std::is_base_of<TObject, T>::type tag;
654 return ROOT::Internal::GetClassHelper<T>(load, silent, tag);
655}
656
657namespace ROOT {
658
659template <typename T> TClass *GetClass(T * /* dummy */) { return TClass::GetClass<T>(); }
660template <typename T> TClass *GetClass(const T * /* dummy */) { return TClass::GetClass<T>(); }
661
662#ifndef R__NO_CLASS_TEMPLATE_SPECIALIZATION
663 // This can only be used when the template overload resolution can distinguish between T* and T**
664 template <typename T> TClass* GetClass( T** /* dummy */) { return TClass::GetClass<T>(); }
665 template <typename T> TClass* GetClass(const T** /* dummy */) { return TClass::GetClass<T>(); }
666 template <typename T> TClass* GetClass( T* const* /* dummy */) { return TClass::GetClass<T>(); }
667 template <typename T> TClass* GetClass(const T* const* /* dummy */) { return TClass::GetClass<T>(); }
668#endif
669
670 extern TClass *CreateClass(const char *cname, Version_t id,
671 const char *dfil, const char *ifil,
672 Int_t dl, Int_t il);
673}
674
675#endif // ROOT_TClass
#define b(i)
Definition RSha256.hxx:100
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
long Longptr_t
Definition RtypesCore.h:82
short Version_t
Definition RtypesCore.h:65
unsigned char UChar_t
Definition RtypesCore.h:38
long Long_t
Definition RtypesCore.h:54
unsigned int UInt_t
Definition RtypesCore.h:46
short Short_t
Definition RtypesCore.h:39
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
const char Option_t
Definition RtypesCore.h:66
TClass *(* DictFuncPtr_t)()
Definition Rtypes.h:80
#define BIT(n)
Definition Rtypes.h:85
void(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
Definition Rtypes.h:74
TClass *(* IsAGlobalFunc_t)(const TClass *, const void *obj)
Definition Rtypes.h:96
void(* ShowMembersFunc_t)(const void *obj, TMemberInspector &R__insp, Bool_t isTransient)
Definition Rtypes.h:94
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
void(* ClassStreamerFunc_t)(TBuffer &, void *)
Definition Rtypes.h:72
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
Definition Rtypes.h:73
ROOT::TMapDeclIdToTClass DeclIdMap_t
Definition TClass.h:79
ROOT::TMapTypeToTClass IdMap_t
Definition TClass.h:78
@ kIsClass
Definition TDictionary.h:65
@ kIsStruct
Definition TDictionary.h:66
@ kIsUnion
Definition TDictionary.h:67
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char cname
Option_t Option_t TPoint TPoint const char mode
Option_t Option_t TPoint TPoint const char text
char name[80]
Definition TGX11.cxx:110
const char * proto
Definition civetweb.c:17502
Each class (see TClass) has a linked list of its base class(es).
Definition TBaseClass.h:33
Using a TBrowser one can browse all ROOT objects.
Definition TBrowser.h:37
Buffer base class used for serializing objects.
Definition TBuffer.h:43
TDeclNameRegistry & fNoInfoOrEmuOrFwdDeclNameRegistry
Definition TClass.h:178
Bool_t HasDeclName(const char *name) const
Definition TClass.cxx:223
std::unordered_set< std::string > fClassNamesSet
Definition TClass.h:170
void AddQualifiedName(const char *name)
Extract this part of the name.
Definition TClass.cxx:196
std::atomic_flag fSpinLock
Definition TClass.h:171
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:81
TClass *const * GetPersistentRef() const
Definition TClass.h:479
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
Definition TClass.cxx:6505
Bool_t IsSyntheticPair() const
Definition TClass.h:517
RepoCont_t fObjectVersionRepository
Definition TClass.h:342
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=nullptr) const
Definition TClass.h:603
ShowMembersFunc_t fShowMembers
Definition TClass.h:226
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
Definition TClass.cxx:3439
TVirtualIsAProxy * fIsA
Definition TClass.h:230
TList * GetListOfUsingDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of using declarations of a class.
Definition TClass.cxx:3786
void ForceReload(TClass *oldcl)
we found at least one equivalent.
Definition TClass.cxx:1336
ROOT::DelArrFunc_t fDeleteArray
Definition TClass.h:239
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
Definition TClass.cxx:2319
TClassStreamer * fStreamer
Definition TClass.h:227
void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc)
Install a new wrapper around the directory auto add function.
Definition TClass.cxx:7028
void * NewArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
Definition TClass.cxx:5193
static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry
Definition TClass.h:326
friend class ROOT::TGenericClassInfo
Definition TClass.h:85
TListOfFunctionTemplates * fFuncTemplate
Definition TClass.h:207
ClassStreamerFunc_t fStreamerFunc
Definition TClass.h:242
void AdoptReferenceProxy(TVirtualRefProxy *proxy)
Adopt the Reference proxy pointer to indicate that this class represents a reference.
Definition TClass.cxx:6685
TMethod * GetClassMethod(Longptr_t faddr)
Look for a method in this class that has the interface function address faddr.
Definition TClass.cxx:4483
TVirtualStreamerInfo * DetermineCurrentStreamerInfo()
Determine and set pointer to current TVirtualStreamerInfo.
Definition TClass.cxx:5684
void Browse(TBrowser *b) override
This method is called by a browser to get the class information.
Definition TClass.cxx:2010
EState GetState() const
Definition TClass.h:486
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
Definition TClass.cxx:2886
void AdoptMemberStreamer(const char *name, TMemberStreamer *strm)
Adopt the TMemberStreamer pointer to by p and use it to Stream non basic member name.
Definition TClass.cxx:6703
void ResetInstanceCount()
Definition TClass.h:543
ClassStreamerFunc_t GetStreamerFunc() const
Get a wrapper/accessor function around this class custom streamer (member function).
Definition TClass.cxx:2939
void RemoveStreamerInfo(Int_t slot)
Remove and delete the StreamerInfo in the given slot.
Definition TClass.cxx:7320
void SetCanSplit(Int_t splitmode)
Set the splitability of this class:
Definition TClass.cxx:5658
void AddInstance(Bool_t heap=kFALSE)
Definition TClass.h:379
TList * CreateListOfDataMembers(std::atomic< TListOfDataMembers * > &data, TDictionary::EMemberSelection selection, bool load)
Create the list containing the TDataMembers (of actual data members or members pulled in through usin...
Definition TClass.cxx:3741
TVirtualStreamerInfo * GetStreamerInfoAbstractEmulated(Int_t version=0) const
For the case where the requestor class is emulated and this class is abstract, returns a pointer to t...
Definition TClass.cxx:4709
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
Definition TClass.cxx:4978
void SetMerge(ROOT::MergeFunc_t mergeFunc)
Install a new wrapper around 'Merge'.
Definition TClass.cxx:6969
ConvSIMap_t fConversionStreamerInfo
Definition TClass.h:200
ROOT::DirAutoAdd_t fDirAutoAdd
Definition TClass.h:241
Bool_t HasDataMemberInfo() const
Definition TClass.h:405
TVirtualRefProxy * fRefProxy
cached streamer info used in the last read.
Definition TClass.h:278
TList * GetMenuList() const
Return the list of menu items associated with the class.
Definition TClass.cxx:4341
ROOT::MergeFunc_t fMerge
saved info to call a IsA member function
Definition TClass.h:234
TMethod * GetMethod(const char *method, const char *params, Bool_t objectIsConst=kFALSE)
Find the best method (if there is one) matching the parameters.
Definition TClass.cxx:4411
static TClass * Load(TBuffer &b)
Load class description from I/O buffer and return class object.
Definition TClass.cxx:5715
EState fState
cached of the streaming method to use
Definition TClass.h:275
ROOT::DesFunc_t GetDestructor() const
Return the wrapper around the destructor.
Definition TClass.cxx:7479
TMethod * GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
Definition TClass.cxx:4456
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Replaces the collection proxy for this class.
Definition TClass.cxx:2470
Int_t fStreamerType
saved info to call Streamer
Definition TClass.h:274
TList * fRealData
Definition TClass.h:201
UInt_t fOnHeap
Definition TClass.h:219
void ls(Option_t *opt="") const override
The ls function lists the contents of a class on stdout.
Definition TClass.cxx:4258
std::atomic< TList * > fBase
Definition TClass.h:202
Bool_t HasDictionary() const
Check whether a class has a dictionary or not.
Definition TClass.cxx:3906
const TList * GetListOfAllPublicMethods(Bool_t load=kTRUE)
Returns a list of all public methods of this class and its base classes.
Definition TClass.cxx:3845
TList * GetListOfAllPublicDataMembers(Bool_t load=kTRUE)
Returns a list of all public data members of this class and its base classes.
Definition TClass.cxx:3862
TClass(const TClass &tc)=delete
static void AddClassToDeclIdMap(TDictionary::DeclId_t id, TClass *cl)
static: Add a TClass* to the map of classes.
Definition TClass.cxx:511
virtual ~TClass()
TClass dtor. Deletes all list that might have been created.
Definition TClass.cxx:1660
Bool_t fIsSyntheticPair
Indicates whether this class can be split or not. Values are -1, 0, 1, 2.
Definition TClass.h:251
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
Definition TClass.cxx:5400
Version_t fClassVersion
Definition TClass.h:222
std::atomic< TVirtualStreamerInfo * > fCurrentInfo
Current 'state' of the class (Emulated,Interpreted,Loaded)
Definition TClass.h:276
TList * GetListOfFunctionTemplates(Bool_t load=kTRUE)
Return TListOfFunctionTemplates for a class.
Definition TClass.cxx:3798
void * DynamicCast(const TClass *base, void *obj, Bool_t up=kTRUE)
Cast obj of this class type up to baseclass cl if up is true.
Definition TClass.cxx:4915
const char * fImplFileName
Definition TClass.h:215
void RegisterStreamerInfo(TVirtualStreamerInfo *info)
Register the StreamerInfo in the given slot, change the State of the TClass as appropriate.
Definition TClass.cxx:7296
TClass & operator=(const TClass &)=delete
std::atomic< UInt_t > fCheckSum
Definition TClass.h:220
void UnregisterAddressInRepository(const char *where, void *location, const TClass *what) const
Definition TClass.cxx:318
std::atomic< TListOfFunctions * > fMethod
Definition TClass.h:208
static void RemoveClassDeclId(TDictionary::DeclId_t id)
Definition TClass.cxx:536
void SetNewArray(ROOT::NewArrFunc_t newArrayFunc)
Install a new wrapper around 'new []'.
Definition TClass.cxx:6993
Bool_t CallShowMembers(const void *obj, TMemberInspector &insp, Bool_t isTransient=kFALSE) const
Call ShowMembers() on the obj of this class type, passing insp and parent.
Definition TClass.cxx:2205
const char * fDeclFileName
Definition TClass.h:214
void SetCollectionProxy(const ROOT::Detail::TCollectionProxyInfo &)
Create the collection proxy object (and the streamer object) from using the information in the TColle...
Definition TClass.cxx:6244
Int_t fCanSplit
Definition TClass.h:247
static Bool_t HasDictionarySelection(const char *clname)
Check whether a class has a dictionary or ROOT can load one.
Definition TClass.cxx:3917
void AdoptSchemaRules(ROOT::Detail::TSchemaRuleSet *rules)
Adopt a new set of Data Model Evolution rules.
Definition TClass.cxx:1920
static void StreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
Definition TClass.cxx:6836
TVirtualStreamerInfo * SetStreamerInfo(Int_t version, const char *info="")
Info is a string describing the names and types of attributes written by the class Streamer function.
Definition TClass.cxx:6373
static std::atomic< Int_t > fgClassCount
Definition TClass.h:324
TVirtualStreamerInfo * GetCurrentStreamerInfo()
Definition TClass.h:437
ROOT::DirAutoAdd_t GetDirectoryAutoAdd() const
Return the wrapper around the directory auto add function.
Definition TClass.cxx:7487
void AddImplFile(const char *filename, int line)
Definition TClass.cxx:1952
TCollection * GetListOfMethodOverloads(const char *name) const
Return the collection of functions named "name".
Definition TClass.cxx:3827
std::atomic< TListOfEnums * > fEnums
Definition TClass.h:206
static Bool_t HasNoInfoOrEmuOrFwdDeclaredDecl(const char *)
Definition TClass.cxx:3398
TVirtualMutex * fOVRMutex
Definition TClass.h:340
TList * GetListOfEnums(Bool_t load=kTRUE)
Return a list containing the TEnums of a class.
Definition TClass.cxx:3686
Bool_t IsStartingWithTObject() const
Returns true if this class inherits from TObject and if the start of the TObject parts is at the very...
Definition TClass.cxx:5929
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
Definition TClass.cxx:3812
TClass()
Internal, default constructor.
Definition TClass.cxx:1065
Short_t fDeclFileLine
Definition TClass.h:216
Int_t GetNmethods()
Return the number of methods of this class Note that in case the list of methods is not yet created,...
Definition TClass.cxx:4573
std::atomic< Bool_t > fIsOffsetStreamerSet
Indicates whether the ClassInfo is supposed to be available.
Definition TClass.h:259
void IgnoreTObjectStreamer(Bool_t ignore=kTRUE)
When the class kIgnoreTObjectStreamer bit is set, the automatically generated Streamer will not call ...
Definition TClass.cxx:4841
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
Definition TClass.cxx:2914
static IdMap_t * GetIdMap()
Definition TClass.cxx:469
UInt_t GetInstanceCount() const
Definition TClass.h:464
void SetDelete(ROOT::DelFunc_t deleteFunc)
Install a new wrapper around 'delete'.
Definition TClass.cxx:7001
void SetLastReadInfo(TVirtualStreamerInfo *info)
Definition TClass.h:443
static Int_t AutoBrowse(TObject *obj, TBrowser *browser)
Browse external object inherited from TObject.
Definition TClass.cxx:1966
ROOT::NewFunc_t GetNew() const
Return the wrapper around new ThisClass().
Definition TClass.cxx:7447
void SetDeclFile(const char *name, int line)
Definition TClass.h:551
TClass * GetBaseClass(const char *classname)
Return pointer to the base class "classname".
Definition TClass.cxx:2655
Longptr_t GetDataMemberOffset(const char *membername) const
return offset for member name.
Definition TClass.cxx:3477
Int_t GetNdata()
Return the number of data members of this class Note that in case the list of data members is not yet...
Definition TClass.cxx:4554
void SetDestructor(ROOT::DesFunc_t destructorFunc)
Install a new wrapper around the destructor.
Definition TClass.cxx:7017
virtual void PostLoadCheck()
Do the initialization that can only be done after the CINT dictionary has been fully populated and ca...
Definition TClass.cxx:5959
void LoadClassInfo() const
Try to load the ClassInfo if available.
Definition TClass.cxx:5824
void SetResetAfterMerge(ROOT::ResetAfterMergeFunc_t resetFunc)
Install a new wrapper around 'ResetAfterMerge'.
Definition TClass.cxx:6977
TVirtualStreamerInfo * GetStreamerInfoImpl(Int_t version, Bool_t silent) const
Definition TClass.cxx:4634
Bool_t MatchLegacyCheckSum(UInt_t checksum) const
Return true if the checksum passed as argument is one of the checksum value produced by the older che...
Definition TClass.cxx:6494
TViewPubFunctions * fAllPubMethod
Definition TClass.h:211
ERuntimeProperties
Indicates whether GetClassVersion has been called.
Definition TClass.h:262
Bool_t HasInterpreterInfo() const
Definition TClass.h:408
static void AddClass(TClass *cl)
static: Add a class to the list and map of classes.
Definition TClass.cxx:494
void GetMissingDictionariesForBaseClasses(TCollection &result, TCollection &visited, bool recurse)
Verify the base classes always.
Definition TClass.cxx:3927
ROOT::Detail::TSchemaRuleSet * fSchemaRules
Pointer to reference proxy if this class represents a reference.
Definition TClass.h:279
std::atomic< Long_t > fProperty
Definition TClass.h:253
TVirtualStreamerInfo * GetLastReadInfo() const
Definition TClass.h:442
static void StreamerDefault(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Default streaming in cases where either we have no way to know what to do or if Property() has not ye...
Definition TClass.cxx:6873
void SetUnloaded()
Call this method to indicate that the shared library containing this class's code has been removed (u...
Definition TClass.cxx:6309
ROOT::DelArrFunc_t GetDeleteArray() const
Return the wrapper around delete [] ThiObject.
Definition TClass.cxx:7471
Bool_t HasInterpreterInfoInMemory() const
Definition TClass.h:407
TList * fClassMenuList
Definition TClass.h:212
ClassConvStreamerFunc_t fConvStreamerFunc
Definition TClass.h:243
void BuildRealData(void *pointer=nullptr, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
Definition TClass.cxx:2031
void SetRuntimeProperties()
Internal routine to set calculate the class properties that can only be known at run-time,...
Definition TClass.cxx:6194
void BuildEmulatedRealData(const char *name, Longptr_t offset, TClass *cl, Bool_t isTransient=kFALSE)
Build the list of real data for an emulated class.
Definition TClass.cxx:2112
static TClass * LoadClass(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition TClass.cxx:5749
TString fSharedLibs
Definition TClass.h:228
const std::type_info * GetTypeInfo() const
Definition TClass.h:494
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
Definition TClass.cxx:3770
ENewType
Definition TClass.h:108
@ kClassNew
Definition TClass.h:108
@ kRealNew
Definition TClass.h:108
@ kDummyNew
Definition TClass.h:108
void Move(void *arenaFrom, void *arenaTo) const
Register the fact that an object was moved from the memory location 'arenaFrom' to the memory locatio...
Definition TClass.cxx:4327
static DeclIdMap_t * GetDeclIdMap()
Definition TClass.cxx:480
Short_t GetDeclFileLine() const
Definition TClass.h:427
void SetStreamerFunc(ClassStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom streamer.
Definition TClass.cxx:6922
const char * GetImplFileName() const
Definition TClass.h:454
TList * GetListOfRealData() const
Definition TClass.h:451
Int_t Size() const
Return size of object of this class.
Definition TClass.cxx:5704
void SetCurrentStreamerInfo(TVirtualStreamerInfo *info)
Set pointer to current TVirtualStreamerInfo.
Definition TClass.cxx:5696
static DictFuncPtr_t GetDict(const char *cname)
Return a pointer to the dictionary loading function generated by rootcint.
Definition TClass.cxx:3422
Longptr_t fOffsetStreamer
Properties that can only be evaluated at run-time.
Definition TClass.h:273
Int_t fSizeof
Definition TClass.h:244
ROOT::NewArrFunc_t GetNewArray() const
Return the wrapper around new ThisClass[].
Definition TClass.cxx:7455
std::multimap< void *, Version_t > RepoCont_t
Definition TClass.h:341
static void StreamerTObjectEmulated(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects when we do not have the library defining the class.
Definition TClass.cxx:6823
ROOT::NewFunc_t fNew
Definition TClass.h:236
@ kLoading
Definition TClass.h:330
@ kUnloading
Definition TClass.h:330
ROOT::ResetAfterMergeFunc_t GetResetAfterMerge() const
Return the wrapper around Merge.
Definition TClass.cxx:7439
TMethod * GetClassMethodWithPrototype(const char *name, const char *proto, Bool_t objectIsConst=kFALSE, ROOT::EFunctionMatchMode mode=ROOT::kConversionMatch)
Find the method with a given prototype.
Definition TClass.cxx:4527
Bool_t CanIgnoreTObjectStreamer()
Definition TClass.h:391
void SetGlobalIsA(IsAGlobalFunc_t)
This function installs a global IsA function for this class.
Definition TClass.cxx:6300
void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse)
Verify the Data Members.
Definition TClass.cxx:3944
TObjArray * fStreamerInfo
Definition TClass.h:199
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
Definition TClass.cxx:1932
TObject * Clone(const char *newname="") const override
Create a Clone of this TClass object using a different name but using the same 'dictionary'.
Definition TClass.cxx:2406
TVirtualCollectionProxy * fCollectionProxy
Definition TClass.h:221
static ENewType IsCallingNew()
Static method returning the defConstructor flag passed to TClass::New().
Definition TClass.cxx:5902
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
Definition TClass.cxx:3636
void Store(TBuffer &b) const
Store class description on I/O buffer.
Definition TClass.cxx:5860
void InterpretedShowMembers(void *obj, TMemberInspector &insp, Bool_t isTransient)
Do a ShowMembers() traversal of all members and base classes' members using the reflection informatio...
Definition TClass.cxx:2242
static THashTable * fgClassTypedefHash
Definition TClass.h:336
void Init(const char *name, Version_t cversion, const std::type_info *info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il, ClassInfo_t *classInfo, Bool_t silent)
Initialize a TClass object.
Definition TClass.cxx:1369
std::atomic< TListOfDataMembers * > fData
Definition TClass.h:203
static void StreamerStreamerInfo(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of where we should directly use the StreamerInfo.
Definition TClass.cxx:6858
const TObjArray * GetStreamerInfos() const
Definition TClass.h:490
void SetClassVersion(Version_t version)
Private function.
Definition TClass.cxx:5675
char * EscapeChars(const char *text) const
Introduce an escape character (@) in front of a special chars.
Definition TClass.cxx:2568
const std::type_info * fTypeInfo
Definition TClass.h:225
std::atomic< TVirtualStreamerInfo * > fLastReadInfo
cached current streamer info.
Definition TClass.h:277
std::atomic< std::map< std::string, TObjArray * > * > ConvSIMap_t
Persistent address of pointer to this TClass object and its successors.
Definition TClass.h:197
static void StreamerTObject(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects.
Definition TClass.cxx:6800
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
Definition TClass.cxx:5912
EStreamerType
Definition TClass.h:332
@ kDefault
Definition TClass.h:332
@ kEmulatedStreamer
Definition TClass.h:332
@ kExternal
Definition TClass.h:332
@ kForeign
Definition TClass.h:332
@ kInstrumented
Definition TClass.h:332
@ kTObject
Definition TClass.h:332
static Bool_t AddRule(const char *rule)
Add a schema evolution customization rule.
Definition TClass.cxx:1890
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
Definition TClass.cxx:5938
const char * GetContextMenuTitle() const
Definition TClass.h:436
static void RemoveClass(TClass *cl)
static: Remove a class from the list and map of classes
Definition TClass.cxx:520
Bool_t HasLocalHashMember() const
Returns true if this class has an definition and/or overload of the member function Hash.
Definition TClass.cxx:7421
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
Definition TClass.cxx:5529
ClassConvStreamerFunc_t GetConvStreamerFunc() const
Get a wrapper/accessor function around this class custom conversion streamer (member function).
Definition TClass.cxx:2947
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method).
Definition TClass.cxx:5947
ClassInfo_t * GetClassInfo() const
Definition TClass.h:431
ROOT::DelFunc_t fDelete
Definition TClass.h:238
TViewPubDataMembers * fAllPubData
Definition TClass.h:210
ClassInfo_t * fClassInfo
Definition TClass.h:223
TVirtualStreamerInfo * GetStreamerInfo(Int_t version=0, Bool_t isTransient=kFALSE) const
returns a pointer to the TVirtualStreamerInfo object for version If the object does not exist,...
Definition TClass.cxx:4599
Bool_t HasConsistentHashMember()
Return 'true' if we can guarantee that if this class (or any class in this class inheritance hierarch...
Definition TClass.h:499
void AdoptStreamer(TClassStreamer *strm)
Adopt a TClassStreamer object.
Definition TClass.cxx:6894
TClass * GetBaseDataMember(const char *datamember)
Return pointer to (base) class that contains datamember.
Definition TClass.cxx:2827
ECheckSum
Definition TClass.h:109
@ kLatestCheckSum
Definition TClass.h:118
@ kNoRange
Definition TClass.h:113
@ kCurrentCheckSum
Definition TClass.h:110
@ kNoBaseCheckSum
Definition TClass.h:117
@ kReflex
Definition TClass.h:115
@ kReflexNoComment
Definition TClass.h:112
@ kWithTypeDef
Definition TClass.h:114
@ kNoRangeCheck
Definition TClass.h:116
@ kNoEnum
Definition TClass.h:111
void Dump() const override
Dump contents of object on stdout.
Definition TClass.h:396
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
Definition TClass.cxx:4874
Int_t GetBaseClassOffset(const TClass *toBase, void *address=nullptr, bool isDerivedObject=true)
Definition TClass.cxx:2791
ObjectPtr NewObjectArray(Long_t nElements, ENewType defConstructor=kClassNew) const
Return a pointer to a newly allocated array of objects of this class.
Definition TClass.cxx:5209
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
Definition TClass.cxx:2897
void ResetCaches()
To clean out all caches.
Definition TClass.cxx:4215
std::atomic< Bool_t > fVersionUsed
saved remember if fOffsetStreamer has been set.
Definition TClass.h:260
Int_t GetClassSize() const
Definition TClass.h:423
Long_t ClassProperty() const
Return the C++ property of this class, eg.
Definition TClass.cxx:2396
void SetStreamerImpl()
Internal routine to set fStreamerImpl based on the value of fStreamerType.
Definition TClass.cxx:6215
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
Definition TClass.cxx:3623
void CalculateStreamerOffset() const
Calculate the offset between an object of this class to its base class TObject.
Definition TClass.cxx:2183
void GetMissingDictionariesForPairElements(TCollection &result, TCollection &visited, bool recurse)
Definition TClass.cxx:3973
void ReplaceWith(TClass *newcl) const
Definition TClass.cxx:4142
void RegisterAddressInRepository(const char *where, void *location, const TClass *what) const
Definition TClass.cxx:290
Long_t Property() const override
Returns the properties of the TClass as a bit field stored as a Long_t value.
Definition TClass.cxx:6086
Bool_t HasDefaultConstructor(Bool_t testio=kFALSE) const
Return true if we have access to a constructor usable for I/O.
Definition TClass.cxx:7393
void GetMenuItems(TList *listitems)
Returns list of methods accessible by context menu.
Definition TClass.cxx:3874
void SetNew(ROOT::NewFunc_t newFunc)
Install a new wrapper around 'new'.
Definition TClass.cxx:6985
std::atomic< TMethodCall * > fIsAMethod
Definition TClass.h:232
static Int_t ReadRules()
Read the class.rules files from the default location:.
Definition TClass.cxx:1820
Bool_t CanSplitBaseAllow()
Pointer to the function implementing streaming for this class.
Definition TClass.cxx:2247
void MoveAddressInRepository(const char *where, void *oldadd, void *newadd, const TClass *what) const
Definition TClass.cxx:337
std::atomic< StreamerImpl_t > fStreamerImpl
Definition TClass.h:285
void SetContextMenuTitle(const char *title)
Change (i.e. set) the title of the TNamed.
Definition TClass.cxx:6269
ShowMembersFunc_t GetShowMembersWrapper() const
Definition TClass.h:485
void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm)
Install a new member streamer (p will be copied).
Definition TClass.cxx:6744
std::atomic< TClass ** > fPersistentRef
Definition TClass.h:195
IsAGlobalFunc_t fGlobalIsA
pointer to the class's IsA proxy.
Definition TClass.h:231
TVirtualStreamerInfo * GetConversionStreamerInfo(const char *onfile_classname, Int_t version) const
Return a Conversion StreamerInfo from the class 'classname' for version number 'version' to this clas...
Definition TClass.cxx:7086
void(* StreamerImpl_t)(const TClass *pThis, void *obj, TBuffer &b, const TClass *onfile_class)
Schema evolution rules.
Definition TClass.h:281
Short_t GetImplFileLine() const
Definition TClass.h:455
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
Definition TClass.cxx:4384
std::atomic< UChar_t > fRuntimeProperties
Definition TClass.h:271
@ kInterpreted
Definition TClass.h:127
@ kHasTClassInit
Definition TClass.h:128
@ kEmulated
Definition TClass.h:126
@ kNoInfo
Definition TClass.h:123
@ kLoaded
Definition TClass.h:131
@ kForwardDeclared
Definition TClass.h:125
@ kNamespaceForMeta
Definition TClass.h:132
TVirtualStreamerInfo * FindConversionStreamerInfo(const char *onfile_classname, UInt_t checksum) const
Return a Conversion StreamerInfo from the class 'classname' for the layout represented by 'checksum' ...
Definition TClass.cxx:7193
Int_t GetBaseClassOffsetRecurse(const TClass *toBase)
Return data member offset to the base class "cl".
Definition TClass.cxx:2705
ROOT::DelFunc_t GetDelete() const
Return the wrapper around delete ThiObject.
Definition TClass.cxx:7463
static TClass * LoadClassDefault(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition TClass.cxx:5771
Bool_t IsVersioned() const
Definition TClass.h:518
void SetClassSize(Int_t sizof)
Definition TClass.h:305
TMethod * FindClassOrBaseMethodWithId(DeclId_t faddr)
Find a method with decl id in this class or its bases.
Definition TClass.cxx:4440
static void StreamerExternal(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
There is special streamer for the class.
Definition TClass.cxx:6788
friend bool operator&(UChar_t l, ERuntimeProperties r)
Definition TClass.h:268
Long_t fClassProperty
Property See TClass::Property() for details.
Definition TClass.h:254
TString fContextMenuTitle
Definition TClass.h:224
static void StreamerTObjectInitialized(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects when fIsOffsetStreamerSet is known to have been set.
Definition TClass.cxx:6814
static void ConvStreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
Definition TClass.cxx:6845
std::atomic< Bool_t > fCanLoadClassInfo
Whether info was loaded from a root pcm.
Definition TClass.h:258
void SetConvStreamerFunc(ClassConvStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom conversion streamer.
Definition TClass.cxx:6945
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
Definition TClass.cxx:7066
void GetMissingDictionaries(THashTable &result, bool recurse=false)
Get the classes that have a missing dictionary starting from this one.
Definition TClass.cxx:4087
void MakeCustomMenuList()
Makes a customizable version of the popup menu list, i.e.
Definition TClass.cxx:4283
TVirtualStreamerInfo * FindStreamerInfoAbstractEmulated(UInt_t checksum) const
For the case where the requestor class is emulated and this class is abstract, returns a pointer to t...
Definition TClass.cxx:4772
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
Definition TClass.cxx:4374
TVirtualIsAProxy * GetIsAProxy() const
Return the proxy implementing the IsA functionality.
Definition TClass.cxx:2955
Version_t GetClassVersion() const
Definition TClass.h:418
ROOT::MergeFunc_t GetMerge() const
Return the wrapper around Merge.
Definition TClass.cxx:7431
ROOT::ResetAfterMergeFunc_t fResetAfterMerge
Definition TClass.h:235
Bool_t IsFolder() const override
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects).
Definition TClass.h:513
UInt_t fInstanceCount
Definition TClass.h:218
std::atomic< Bool_t > fHasRootPcmInfo
C++ Property of the class (is abstract, has virtual table, etc.)
Definition TClass.h:257
TClass * GetActualClass(const void *object) const
Return a pointer to the real class of the object.
Definition TClass.cxx:2607
ROOT::DesFunc_t fDestructor
Definition TClass.h:240
const char * GetDeclFileName() const
Return name of the file containing the declaration of this class.
Definition TClass.cxx:3463
ObjectPtr NewObject(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Definition TClass.cxx:4992
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
Definition TClass.cxx:3503
void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc)
Install a new wrapper around 'delete []'.
Definition TClass.cxx:7009
TFunctionTemplate * GetFunctionTemplate(const char *name)
Definition TClass.cxx:3607
void ResetClassInfo()
Make sure that the current ClassInfo is up to date.
Definition TClass.cxx:4180
ROOT::NewArrFunc_t fNewArray
Definition TClass.h:237
Int_t ReadBuffer(TBuffer &b, void *pointer, Int_t version, UInt_t start, UInt_t count)
Function called by the Streamer functions to deserialize information from buffer b into object at p.
Definition TClass.cxx:6758
void SetImplFileName(const char *implFileName)
Definition TClass.h:556
void GetMissingDictionariesWithRecursionCheck(TCollection &result, TCollection &visited, bool recurse)
From the second level of recursion onwards it is different state check.
Definition TClass.cxx:3990
bool IsClassStructOrUnion() const
Definition TClass.h:352
EStatusBits
Definition TClass.h:92
@ kHasLocalHashMember
Definition TClass.h:96
@ kHasNameMapNode
Definition TClass.h:105
@ kIgnoreTObjectStreamer
Definition TClass.h:97
@ kUnloaded
Definition TClass.h:98
@ kHasCustomStreamerMember
Definition TClass.h:106
@ kWarned
Definition TClass.h:104
@ kStartWithTObject
Definition TClass.h:103
@ kClassSaved
Definition TClass.h:95
@ kIsTObject
Definition TClass.h:100
@ kIsEmulation
Definition TClass.h:102
@ kIsForeign
Definition TClass.h:101
@ kReservedLoading
Definition TClass.h:93
std::atomic< TListOfDataMembers * > fUsingData
Definition TClass.h:204
TListOfFunctions * GetMethodList()
Return (create an empty one if needed) the list of functions.
Definition TClass.cxx:4355
TVirtualRefProxy * GetReferenceProxy() const
Definition TClass.h:481
void ResetMenuList()
Resets the menu list to it's standard value.
Definition TClass.cxx:4243
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Definition TClass.cxx:2968
Int_t WriteBuffer(TBuffer &b, void *pointer, const char *info="")
Function called by the Streamer functions to serialize object at p to buffer b.
Definition TClass.cxx:6779
static TClass * LoadClassCustom(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition TClass.cxx:5801
UInt_t GetHeapInstanceCount() const
Definition TClass.h:465
Short_t fImplFileLine
Definition TClass.h:217
This class defines an interface to the cling C++ interpreter.
Definition TCling.h:102
Collection abstract base class.
Definition TCollection.h:65
All ROOT classes may have RTTI (run time type identification) support added.
Definition TDataMember.h:31
This class defines an abstract interface that must be implemented by all classes that contain diction...
EMemberSelection
Kinds of members to include in lists.
const void * DeclId_t
Dictionary for function template This class describes one single function template.
THashTable implements a hash table to store TObject's.
Definition THashTable.h:35
A collection of TDataMember objects designed for fast access given a DeclId_t and for keep track of T...
A collection of TEnum objects designed for fast access given a DeclId_t and for keep track of TEnum t...
A collection of TFunction objects designed for fast access given a DeclId_t and for keep track of TFu...
A collection of TFunction objects designed for fast access given a DeclId_t and for keep track of TFu...
A doubly linked list.
Definition TList.h:38
Abstract base class for accessing the data-members of a class.
Method or function calling interface.
Definition TMethodCall.h:37
Each ROOT class (see TClass) has a linked list of methods.
Definition TMethod.h:38
An array of TObjects.
Definition TObjArray.h:31
Mother of all ROOT objects.
Definition TObject.h:41
virtual void Dump() const
Dump contents of object on stdout.
Definition TObject.cxx:348
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition TObject.h:201
Persistent version of a TClass.
Definition TProtoClass.h:38
The TRealData class manages the effective list of all data members for a given class.
Definition TRealData.h:30
Describes a persistent version of a class.
Basic string class.
Definition TString.h:139
View implementing the TList interface and giving access all the TDictionary describing public data me...
View implementing the TList interface and giving access all the TFunction describing public methods i...
This class implements a mutex interface.
Abstract Interface class describing Streamer information for one class.
TLine * line
TClass * GetClassHelper(Bool_t, Bool_t, std::true_type)
Definition TClass.h:620
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
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
TClass * GetClass(T *)
Definition TClass.h:659
TClass * CreateClass(const char *cname, Version_t id, const std::type_info &info, TVirtualIsAProxy *isa, const char *dfil, const char *ifil, Int_t dl, Int_t il)
Global function called by a class' static Dictionary() method (see the ClassDef macro).
Definition TClass.cxx:5869
void(* DelFunc_t)(void *)
Definition Rtypes.h:111
ESTLType
Definition ESTLType.h:28
void *(* NewArrFunc_t)(Long_t size, void *arena)
Definition Rtypes.h:110
EFunctionMatchMode
@ kConversionMatch
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
static const char * what
Definition stlLoader.cc:6
static TClass * GetClass(Bool_t load, Bool_t silent)
Definition TClass.h:627
TVirtualStreamerInfo * GetAllocator() const
Definition TClass.h:150
void * GetPtr() const
Definition TClass.h:148
TVirtualStreamerInfo * fAllocator
Definition TClass.h:144
ObjectPtr(void *ptr=nullptr, TVirtualStreamerInfo *allocator=nullptr)
Definition TClass.h:146
th1 Draw()
TLine l
Definition textangle.C:4