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
95 /* had kClassSaved = BIT(12), */
98 kUnloaded = BIT(16), // The library containing the dictionary for this class was
99 // loaded and has been unloaded from memory.
102 /* had kIsEmulation = BIT(19), // Deprecated */
103 kStartWithTObject = BIT(20), // see comments for IsStartingWithTObject()
105 kHasNameMapNode = BIT(22)
106 };
110 kNoEnum = 1, // Used since v3.3
111 kReflexNoComment = 2, // Up to v5.34.18 (has no range/comment and no typedef at all)
112 kNoRange = 3, // Up to v5.17
113 kWithTypeDef = 4, // Up to v5.34.18 and v5.99/06
114 kReflex = 5, // Up to v5.34.18 (has no typedef at all)
115 kNoRangeCheck = 6, // Up to v5.34.18 and v5.99/06
116 kNoBaseCheckSum = 7, // Up to v5.34.18 and v5.99/06
118 };
119
120 // Describe the current state of the TClass itself.
121 enum EState {
122 kNoInfo, // The state has not yet been initialized, i.e. the TClass
123 // was just created and/or there is no trace of it in the interpreter.
124 kForwardDeclared, // The interpreted knows the entity is a class but that's it.
125 kEmulated, // The information about the class only comes from a TStreamerInfo
126 kInterpreted, // The class is described completely/only in the interpreter database.
127 kHasTClassInit, // The class has a TClass proper bootstrap coming from a run
128 // through rootcling/genreflex/TMetaUtils and the library
129 // containing this dictionary has been loaded in memory.
131 kNamespaceForMeta // Very transient state necessary to bootstrap namespace entries
132 // in ROOT Meta w/o interpreter information
133 };
134
135 // "Typed" pointer that recalls how TClass::New allocated the object.
136 // It is returned by TClass:NewObject and should be passed to TClass::DeleteArray or TClass::Destructor
137 // to delete the object.
138 // It is also used in TVirtualCollectionProxy for the same reasons.
140 {
141 void *fPtr = nullptr;
142
144
145 ObjectPtr(void *ptr = nullptr, TVirtualStreamerInfo *allocator = nullptr) : fPtr(ptr), fAllocator(allocator) {}
146
147 void *GetPtr() const { return fPtr; }
148
150
151 operator bool() const { return fPtr != nullptr; }
152 };
153
154private:
155
156
157
159 // A class which is used to collect decl names starting from normalised
160 // names (typedef resolution is excluded here, just string manipulation
161 // is performed). At the heart of the implementation, an unordered set.
162 public:
163 TDeclNameRegistry(Int_t verbLevel=0);
164 void AddQualifiedName(const char *name);
165 Bool_t HasDeclName(const char *name) const;
167 private:
169 std::unordered_set<std::string> fClassNamesSet;
170 mutable std::atomic_flag fSpinLock; // MSVC doesn't support = ATOMIC_FLAG_INIT;
171 };
172
174 // Trivial RAII used to insert names in the registry
176 const char* fName;
178 public:
179 InsertTClassInRegistryRAII(TClass::EState &state, const char *name, TDeclNameRegistry &emuRegistry);
181 };
182
183 // TClass objects can be created as a result of opening a TFile (in which
184 // they are in emulated mode) or as a result of loading the dictionary for
185 // the corresponding class. When a dictionary is loaded any pre-existing
186 // emulated TClass is replaced by the one created/coming from the dictionary.
187 // To have a reference that always point to the 'current' TClass object for
188 // a given class, one should use a TClassRef.
189 // TClassRef works by holding on to the fPersistentRef which is updated
190 // atomically whenever a TClass is replaced. During the replacement the
191 // value of fPersistentRef is set to zero, leading the TClassRef to call
192 // TClass::GetClass which is also locked by the replacement. At the end
193 // of the replacement, fPersistentRef points to the new TClass object.
194 std::atomic<TClass**> fPersistentRef;//!Persistent address of pointer to this TClass object and its successors.
195
196 typedef std::atomic<std::map<std::string, TObjArray*>*> ConvSIMap_t;
197
198 mutable TObjArray *fStreamerInfo; //Array of TVirtualStreamerInfo
199 mutable ConvSIMap_t fConversionStreamerInfo; //Array of the streamer infos derived from another class.
200 TList *fRealData; //linked list for persistent members including base classes
201 std::atomic<TList*> fBase; //linked list for base classes
202 std::atomic<TListOfDataMembers*> fData; //linked list for data members; non-owning.
203 std::atomic<TListOfDataMembers*> fUsingData;//linked list for data members pulled in through using decls.
204
205 std::atomic<TListOfEnums*> fEnums; //linked list for the enums
206 TListOfFunctionTemplates *fFuncTemplate; //linked list for function templates [Not public until implemented as active list]
207 std::atomic<TListOfFunctions*> fMethod; //linked list for methods
208
209 TViewPubDataMembers*fAllPubData; //all public data members (including from base classes)
210 TViewPubFunctions *fAllPubMethod; //all public methods (including from base classes)
211 mutable TList *fClassMenuList; //list of class menu items
212
213 const char *fDeclFileName; //name of class declaration file
214 const char *fImplFileName; //name of class implementation file
215 Short_t fDeclFileLine; //line of class declaration
216 Short_t fImplFileLine; //line of class implementation
217 UInt_t fInstanceCount; //number of instances of this class
218 UInt_t fOnHeap; //number of instances on heap
219 mutable std::atomic<UInt_t> fCheckSum; //checksum of data members and base classes
221 Version_t fClassVersion; //Class version Identifier
222 ClassInfo_t *fClassInfo; //pointer to CINT class info class
223 TString fContextMenuTitle;//context menu title
224 const std::type_info *fTypeInfo; //pointer to the C++ type information.
225 ShowMembersFunc_t fShowMembers; //pointer to the class's ShowMembers function
226 TClassStreamer *fStreamer; //pointer to streamer function
227 TString fSharedLibs; //shared libraries containing class code
228
229 TVirtualIsAProxy *fIsA; //!pointer to the class's IsA proxy.
230 IsAGlobalFunc_t fGlobalIsA; //pointer to a global IsA function.
231 mutable std::atomic<TMethodCall*> fIsAMethod; //!saved info to call a IsA member function
232
233 ROOT::MergeFunc_t fMerge; //pointer to a function implementing Merging objects of this class.
234 ROOT::ResetAfterMergeFunc_t fResetAfterMerge; //pointer to a function implementing Merging objects of this class.
235 ROOT::NewFunc_t fNew; //pointer to a function newing one object.
236 ROOT::NewArrFunc_t fNewArray; //pointer to a function newing an array of objects.
237 ROOT::DelFunc_t fDelete; //pointer to a function deleting one object.
238 ROOT::DelArrFunc_t fDeleteArray; //pointer to a function deleting an array of objects.
239 ROOT::DesFunc_t fDestructor; //pointer to a function call an object's destructor.
240 ROOT::DirAutoAdd_t fDirAutoAdd; //pointer which implements the Directory Auto Add feature for this class.']'
241 ClassStreamerFunc_t fStreamerFunc; //Wrapper around this class custom Streamer member function.
242 ClassConvStreamerFunc_t fConvStreamerFunc; //Wrapper around this class custom conversion Streamer member function.
243 Int_t fSizeof; //Sizeof the class.
244
245 std::atomic<Char_t> fCanSplit; //!Indicates whether this class can be split or not. Values are -1, 0, 1, 2
246
247 // Bit field
248 /// Indicates whether this class represents a pair and was not created from a dictionary nor interpreter info but has
249 /// compiler compatible offset and size (and all the info is in the StreamerInfo per se)
251
252 /// @brief The class has a Streamer method and it is implemented by the user or an older (not StreamerInfo based) automatic streamer.
254
255 mutable std::atomic<Long_t> fProperty; //!Property See TClass::Property() for details
256 mutable Long_t fClassProperty; //!C++ Property of the class (is abstract, has virtual table, etc.)
257
258 // fHasRootPcmInfo needs to be atomic as long as GetListOfBases needs to modify it.
259 std::atomic<Bool_t> fHasRootPcmInfo; //!Whether info was loaded from a root pcm.
260 mutable std::atomic<Bool_t> fCanLoadClassInfo; //!Indicates whether the ClassInfo is supposed to be available.
261 mutable std::atomic<Bool_t> fIsOffsetStreamerSet; //!saved remember if fOffsetStreamer has been set.
262 mutable std::atomic<Bool_t> fVersionUsed; //!Indicates whether GetClassVersion has been called
263
265 kNotInitialized = 0,
266 kSet = BIT(0),
267 // kInconsistent when kSet & !kConsistent.
269 };
271 return l & static_cast<UChar_t>(r);
272 }
273 mutable std::atomic<UChar_t> fRuntimeProperties; //! Properties that can only be evaluated at run-time
274
275 mutable Longptr_t fOffsetStreamer; //!saved info to call Streamer
276 Int_t fStreamerType; //!cached of the streaming method to use
277 EState fState; //!Current 'state' of the class (Emulated,Interpreted,Loaded)
278 mutable std::atomic<TVirtualStreamerInfo*> fCurrentInfo; //!cached current streamer info.
279 mutable std::atomic<TVirtualStreamerInfo*> fLastReadInfo; //!cached streamer info used in the last read.
280 TVirtualRefProxy *fRefProxy; //!Pointer to reference proxy if this class represents a reference
281 ROOT::Detail::TSchemaRuleSet *fSchemaRules; //! Schema evolution rules
282
283 typedef void (*StreamerImpl_t)(const TClass* pThis, void *obj, TBuffer &b, const TClass *onfile_class);
284#ifdef R__NO_ATOMIC_FUNCTION_POINTER
285 mutable StreamerImpl_t fStreamerImpl; //! Pointer to the function implementing streaming for this class
286#else
287 mutable std::atomic<StreamerImpl_t> fStreamerImpl; //! Pointer to the function implementing streaming for this class
288#endif
289
295 void Init(const char *name, Version_t cversion, const std::type_info *info,
296 TVirtualIsAProxy *isa,
297 const char *dfil, const char *ifil,
298 Int_t dl, Int_t il,
299 ClassInfo_t *classInfo,
300 Bool_t silent);
301 void LoadClassInfo() const;
302
303 static TClass *LoadClassDefault(const char *requestedname, Bool_t silent);
304 static TClass *LoadClassCustom(const char *requestedname, Bool_t silent);
305
306 void SetClassVersion(Version_t version);
307 void SetClassSize(Int_t sizof) { fSizeof = sizof; }
309
310 void SetStreamerImpl();
311
313
314 // Various implementation for TClass::Stramer
315 static void StreamerExternal(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
316 static void StreamerTObject(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
317 static void StreamerTObjectInitialized(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
318 static void StreamerTObjectEmulated(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
319 static void StreamerInstrumented(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
320 static void ConvStreamerInstrumented(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
321 static void StreamerStreamerInfo(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
322 static void StreamerDefault(const TClass* pThis, void *object, TBuffer &b, const TClass *onfile_class);
323
324 static IdMap_t *GetIdMap(); //Map from typeid to TClass pointer
325 static DeclIdMap_t *GetDeclIdMap(); //Map from DeclId_t to TClass pointer
326 static std::atomic<Int_t> fgClassCount; //provides unique id for a each class
327 //stored in TObject::fUniqueID
328 static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry; // Store decl names of the forwardd and no info instances
329 static Bool_t HasNoInfoOrEmuOrFwdDeclaredDecl(const char*);
330
331 // Internal status bits, set and reset only during initialization and thus under the protection of the global lock.
333 // Internal streamer type.
335
336 // These are the above-referenced hash tables. (The pointers are null
337 // if no entries have been made.)
339
341
342 mutable TVirtualMutex *fOVRMutex = nullptr;
343 typedef std::multimap<void*, Version_t> RepoCont_t;
345
346 void UnregisterAddressInRepository(const char *where, void *location, const TClass *what) const;
347 void MoveAddressInRepository(const char *where, void *oldadd, void *newadd, const TClass *what) const;
348 void RegisterAddressInRepository(const char *where, void *location, const TClass *what) const;
349
350private:
351 TClass(const TClass& tc) = delete;
352 TClass& operator=(const TClass&) = delete;
353
355 TList *CreateListOfDataMembers(std::atomic<TListOfDataMembers*> &data, TDictionary::EMemberSelection selection, bool load);
356
357protected:
360 void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse);
363
364public:
365 TClass();
366 TClass(const char *name, Bool_t silent = kFALSE);
367 TClass(const char *name, Version_t cversion, Bool_t silent = kFALSE);
368 TClass(const char *name, Version_t cversion, EState theState, Bool_t silent = kFALSE);
369 TClass(ClassInfo_t *info, Version_t cversion,
370 const char *dfil, const char *ifil = nullptr,
371 Int_t dl = 0, Int_t il = 0, Bool_t silent = kFALSE);
372 TClass(const char *name, Version_t cversion,
373 const char *dfil, const char *ifil = nullptr,
374 Int_t dl = 0, Int_t il = 0, Bool_t silent = kFALSE);
375 TClass(const char *name, Version_t cversion,
376 const std::type_info &info, TVirtualIsAProxy *isa,
377 const char *dfil, const char *ifil,
378 Int_t dl, Int_t il, Bool_t silent = kFALSE);
379 virtual ~TClass();
380
381 void AddInstance(Bool_t heap = kFALSE) { fInstanceCount++; if (heap) fOnHeap++; }
382 void AddImplFile(const char *filename, int line);
383 static Bool_t AddRule(const char *rule);
384 static Int_t ReadRules(const char *filename);
385 static Int_t ReadRules();
387 void Browse(TBrowser *b) override;
388 void BuildRealData(void *pointer = nullptr, Bool_t isTransient = kFALSE);
389 void BuildEmulatedRealData(const char *name, Longptr_t offset, TClass *cl, Bool_t isTransient = kFALSE);
390 void CalculateStreamerOffset() const;
391 Bool_t CallShowMembers(const void* obj, TMemberInspector &insp, Bool_t isTransient = kFALSE) const;
392 Bool_t CanSplit() const;
394 Long_t ClassProperty() const;
395 TObject *Clone(const char *newname="") const override;
397 void Draw(Option_t *option="") override;
398 void Dump() const override { TDictionary::Dump(); }
399 void Dump(const void *obj, Bool_t noAddr = kFALSE) const;
400 char *EscapeChars(const char *text) const;
401 TVirtualStreamerInfo *FindStreamerInfo(UInt_t checksum, Bool_t isTransient = kFALSE) const;
402 TVirtualStreamerInfo *GetConversionStreamerInfo( const char* onfile_classname, Int_t version ) const;
403 TVirtualStreamerInfo *FindConversionStreamerInfo( const char* onfile_classname, UInt_t checksum ) const;
404 TVirtualStreamerInfo *GetConversionStreamerInfo( const TClass* onfile_cl, Int_t version ) const;
405 TVirtualStreamerInfo *FindConversionStreamerInfo( const TClass* onfile_cl, UInt_t checksum ) const;
406 void ForceReload (TClass* oldcl);
410 Bool_t HasInterpreterInfoInMemory() const { return nullptr != fClassInfo; }
413 UInt_t GetCheckSum(Bool_t &isvalid) const;
414 UInt_t GetCheckSum(ECheckSum code, Bool_t &isvalid) const;
417 TMethod *GetClassMethod(const char *name, const char *params, Bool_t objectIsConst = kFALSE);
418 TMethod *GetClassMethodWithPrototype(const char *name, const char *proto,
419 Bool_t objectIsConst = kFALSE,
422 if (!fVersionUsed.load(std::memory_order_relaxed))
424 return fClassVersion;
425 }
426 Int_t GetClassSize() const { return Size(); }
427 TDataMember *GetDataMember(const char *datamember) const;
428 Longptr_t GetDataMemberOffset(const char *membername) const;
429 const char *GetDeclFileName() const;
434 ClassInfo_t *GetClassInfo() const {
437 return fClassInfo;
438 }
439 const char *GetContextMenuTitle() const { return fContextMenuTitle; }
441 auto current = fCurrentInfo.load(std::memory_order_relaxed);
442 if (current) return current;
443 else return DetermineCurrentStreamerInfo();
444 }
453 TCollection *GetListOfMethodOverloads(const char* name) const;
454 TList *GetListOfRealData() const { return fRealData; }
457 const char *GetImplFileName() const { return fImplFileName; }
459 TClass *GetActualClass(const void *object) const;
460 TClass *GetBaseClass(const char *classname);
461 TClass *GetBaseClass(const TClass *base);
462 Int_t GetBaseClassOffset(const TClass *toBase, void *address = nullptr, bool isDerivedObject = true);
463 TClass *GetBaseDataMember(const char *datamember);
469 void GetMenuItems(TList *listitems);
470 TList *GetMenuList() const;
471 TMethod *GetMethod(const char *method, const char *params, Bool_t objectIsConst = kFALSE);
472 TMethod *GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst = kFALSE,
474 TMethod *GetMethodAny(const char *method);
475 TMethod *GetMethodAllAny(const char *method);
476 Int_t GetNdata();
479 ROOT::NewFunc_t GetNew() const;
482 TClass *const*GetPersistentRef() const { return fPersistentRef; }
483 TRealData *GetRealData(const char *name) const;
487 const char *GetSharedLibs();
489 EState GetState() const { return fState; }
493 const TObjArray *GetStreamerInfos() const { return fStreamerInfo; }
494 TVirtualStreamerInfo *GetStreamerInfo(Int_t version=0, Bool_t isTransient = kFALSE) const;
497 const std::type_info *GetTypeInfo() const { return fTypeInfo; };
498
499 /// @brief Return 'true' if we can guarantee that if this class (or any class in
500 /// this class inheritance hierarchy) overload TObject::Hash it also starts
501 /// the RecursiveRemove process from its own destructor.
503 {
507 }
508 /// @brief The class has a Streamer method and it is implemented by the user or an older (not StreamerInfo based) automatic streamer.
510 Bool_t HasDictionary() const;
511 static Bool_t HasDictionarySelection(const char* clname);
513 void GetMissingDictionaries(THashTable& result, bool recurse = false);
515 Bool_t InheritsFrom(const char *cl) const override;
516 Bool_t InheritsFrom(const TClass *cl) const override;
517 void InterpretedShowMembers(void* obj, TMemberInspector &insp, Bool_t isTransient);
518 Bool_t IsFolder() const override { return kTRUE; }
519 Bool_t IsLoaded() const;
520 Bool_t IsForeign() const;
523 Bool_t IsVersioned() const { return !( GetClassVersion()<=1 && IsForeign() ); }
524 Bool_t IsTObject() const;
525 static TClass *LoadClass(const char *requestedname, Bool_t silent);
526 void ls(Option_t *opt="") const override;
527 void MakeCustomMenuList();
528 Bool_t MatchLegacyCheckSum(UInt_t checksum) const;
529 void Move(void *arenaFrom, void *arenaTo) const;
530 void *New(ENewType defConstructor = kClassNew, Bool_t quiet = kFALSE) const;
531 void *New(void *arena, ENewType defConstructor = kClassNew) const;
532 void *NewArray(Long_t nElements, ENewType defConstructor = kClassNew) const;
533 void *NewArray(Long_t nElements, void *arena, ENewType defConstructor = kClassNew) const;
534 ObjectPtr NewObject(ENewType defConstructor = kClassNew, Bool_t quiet = kFALSE) const;
535 ObjectPtr NewObject(void *arena, ENewType defConstructor = kClassNew) const;
536 ObjectPtr NewObjectArray(Long_t nElements, ENewType defConstructor = kClassNew) const;
537 ObjectPtr NewObjectArray(Long_t nElements, void *arena, ENewType defConstructor = kClassNew) const;
538 virtual void PostLoadCheck();
539 Long_t Property() const override;
540 Int_t ReadBuffer(TBuffer &b, void *pointer, Int_t version, UInt_t start, UInt_t count);
541 Int_t ReadBuffer(TBuffer &b, void *pointer);
543 void RemoveStreamerInfo(Int_t slot);
544 void ReplaceWith(TClass *newcl) const;
545 void ResetCaches();
546 void ResetClassInfo(Long_t tagnum);
547 void ResetClassInfo();
549 void ResetMenuList();
550 Int_t Size() const;
551 void SetCanSplit(Int_t splitmode);
553 void SetContextMenuTitle(const char *title);
557 void SetDelete(ROOT::DelFunc_t deleteFunc);
558 void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc);
559 void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc);
560 void SetDestructor(ROOT::DesFunc_t destructorFunc);
561 void SetImplFileName(const char *implFileName) { fImplFileName = implFileName; }
562 void SetMerge(ROOT::MergeFunc_t mergeFunc);
564 void SetNew(ROOT::NewFunc_t newFunc);
565 void SetNewArray(ROOT::NewArrFunc_t newArrayFunc);
566 TVirtualStreamerInfo *SetStreamerInfo(Int_t version, const char *info="");
567 void SetUnloaded();
568 Int_t WriteBuffer(TBuffer &b, void *pointer, const char *info="");
569
571 void AdoptStreamer(TClassStreamer *strm);
572 void AdoptMemberStreamer(const char *name, TMemberStreamer *strm);
573 void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm);
576
577 // Function to retrieve the TClass object and dictionary function
578 static void AddClass(TClass *cl);
580 static void RemoveClass(TClass *cl);
582 static TClass *GetClass(const char *name, Bool_t load = kTRUE, Bool_t silent = kFALSE);
583 static TClass *GetClass(const char *name, Bool_t load, Bool_t silent, size_t hint_pair_offset, size_t hint_pair_size);
584 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);
585 static TClass *GetClass(ClassInfo_t *info, Bool_t load = kTRUE, Bool_t silent = kFALSE);
586 template<typename T>
587 static TClass *GetClass(Bool_t load = kTRUE, Bool_t silent = kFALSE);
588 static Bool_t GetClass(DeclId_t id, std::vector<TClass*> &classes);
589 static DictFuncPtr_t GetDict (const char *cname);
590 static DictFuncPtr_t GetDict (const std::type_info &info);
591
592 static Int_t AutoBrowse(TObject *obj, TBrowser *browser);
593 static ENewType IsCallingNew();
594 static TClass *Load(TBuffer &b);
595 void Store(TBuffer &b) const;
596
597 // Pseudo-method apply to the 'obj'. In particular those are used to
598 // implement TObject like methods for non-TObject classes.
599 Int_t Browse(void *obj, TBrowser *b) const;
600 void DeleteArray(void *ary, Bool_t dtorOnly = kFALSE);
601 void DeleteArray(ObjectPtr ary, Bool_t dtorOnly = kFALSE);
602 void Destructor(void *obj, Bool_t dtorOnly = kFALSE);
603 void Destructor(ObjectPtr obj, Bool_t dtorOnly = kFALSE);
604 void *DynamicCast(const TClass *base, void *obj, Bool_t up = kTRUE);
605 const void *DynamicCast(const TClass *base, const void *obj, Bool_t up = kTRUE);
606 Bool_t IsFolder(void *obj) const;
607
608 inline void Streamer(void *obj, TBuffer &b, const TClass *onfile_class = nullptr) const
609 {
610 // Inline for performance, skipping one function call.
611#ifdef R__NO_ATOMIC_FUNCTION_POINTER
612 fStreamerImpl(this,obj,b,onfile_class);
613#else
614 auto t = fStreamerImpl.load();
615 t(this,obj,b,onfile_class);
616#endif
617 }
618
619 ClassDefOverride(TClass,0) //Dictionary containing class information
620};
621
622namespace ROOT {
623namespace Internal {
624template <typename T>
626{
627 return T::Class();
628}
629
630template <typename T>
632 static TClass *GetClass(Bool_t load, Bool_t silent) {
633 return TClass::GetClass(typeid(T), load, silent);
634 }
635};
636
637template <typename F, typename S>
638struct TClassGetClassHelper<std::pair<F, S> > {
639 static TClass *GetClass(Bool_t load, Bool_t silent) {
640 using pair_t = std::pair<F,S>;
641 size_t hint_offset = offsetof(pair_t, second);
642 return TClass::GetClass(typeid(std::pair<F, S>), load, silent, hint_offset, sizeof(std::pair<F,S>));
643 }
644};
645
646template <typename T>
647TClass *GetClassHelper(Bool_t load, Bool_t silent, std::false_type)
648{
649 return TClassGetClassHelper<T>::GetClass(load, silent);
650}
651
652} // namespace Internal
653} // namespace ROOT
654
655template <typename T>
657{
658 typename std::is_base_of<TObject, T>::type tag;
659 return ROOT::Internal::GetClassHelper<T>(load, silent, tag);
660}
661
662namespace ROOT {
663
664template <typename T> TClass *GetClass(T * /* dummy */) { return TClass::GetClass<T>(); }
665template <typename T> TClass *GetClass(const T * /* dummy */) { return TClass::GetClass<T>(); }
666
667#ifndef R__NO_CLASS_TEMPLATE_SPECIALIZATION
668 // This can only be used when the template overload resolution can distinguish between T* and T**
669 template <typename T> TClass* GetClass( T** /* dummy */) { return TClass::GetClass<T>(); }
670 template <typename T> TClass* GetClass(const T** /* dummy */) { return TClass::GetClass<T>(); }
671 template <typename T> TClass* GetClass( T* const* /* dummy */) { return TClass::GetClass<T>(); }
672 template <typename T> TClass* GetClass(const T* const* /* dummy */) { return TClass::GetClass<T>(); }
673#endif
674
675 extern TClass *CreateClass(const char *cname, Version_t id,
676 const char *dfil, const char *ifil,
677 Int_t dl, Int_t il);
678}
679
680#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:75
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:94
constexpr Bool_t kTRUE
Definition RtypesCore.h:93
const char Option_t
Definition RtypesCore.h:66
TClass *(* DictFuncPtr_t)()
Definition Rtypes.h:85
#define BIT(n)
Definition Rtypes.h:90
void(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
Definition Rtypes.h:79
TClass *(* IsAGlobalFunc_t)(const TClass *, const void *obj)
Definition Rtypes.h:101
void(* ShowMembersFunc_t)(const void *obj, TMemberInspector &R__insp, Bool_t isTransient)
Definition Rtypes.h:99
#define ClassDefOverride(name, id)
Definition Rtypes.h:346
void(* ClassStreamerFunc_t)(TBuffer &, void *)
Definition Rtypes.h:77
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
Definition Rtypes.h:78
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:17535
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:177
Bool_t HasDeclName(const char *name) const
Definition TClass.cxx:223
std::unordered_set< std::string > fClassNamesSet
Definition TClass.h:169
void AddQualifiedName(const char *name)
Extract this part of the name.
Definition TClass.cxx:196
std::atomic_flag fSpinLock
Definition TClass.h:170
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:81
TClass *const * GetPersistentRef() const
Definition TClass.h:482
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
Definition TClass.cxx:6586
Bool_t IsSyntheticPair() const
Definition TClass.h:522
RepoCont_t fObjectVersionRepository
Definition TClass.h:344
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=nullptr) const
Definition TClass.h:608
ShowMembersFunc_t fShowMembers
Definition TClass.h:225
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
Definition TClass.cxx:3508
TVirtualIsAProxy * fIsA
Definition TClass.h:229
TList * GetListOfUsingDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of using declarations of a class.
Definition TClass.cxx:3855
void ForceReload(TClass *oldcl)
we found at least one equivalent.
Definition TClass.cxx:1405
ROOT::DelArrFunc_t fDeleteArray
Definition TClass.h:238
Bool_t CanSplit() const
Return true if the data member of this TClass can be saved separately.
Definition TClass.cxx:2388
TClassStreamer * fStreamer
Definition TClass.h:226
void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc)
Install a new wrapper around the directory auto add function.
Definition TClass.cxx:7109
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:5274
static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry
Definition TClass.h:328
friend class ROOT::TGenericClassInfo
Definition TClass.h:85
TListOfFunctionTemplates * fFuncTemplate
Definition TClass.h:206
ClassStreamerFunc_t fStreamerFunc
Definition TClass.h:241
void AdoptReferenceProxy(TVirtualRefProxy *proxy)
Adopt the Reference proxy pointer to indicate that this class represents a reference.
Definition TClass.cxx:6766
TMethod * GetClassMethod(Longptr_t faddr)
Look for a method in this class that has the interface function address faddr.
Definition TClass.cxx:4552
TVirtualStreamerInfo * DetermineCurrentStreamerInfo()
Determine and set pointer to current TVirtualStreamerInfo.
Definition TClass.cxx:5765
void Browse(TBrowser *b) override
This method is called by a browser to get the class information.
Definition TClass.cxx:2079
EState GetState() const
Definition TClass.h:489
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
Definition TClass.cxx:2955
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:6784
void ResetInstanceCount()
Definition TClass.h:548
ClassStreamerFunc_t GetStreamerFunc() const
Get a wrapper/accessor function around this class custom streamer (member function).
Definition TClass.cxx:3008
void RemoveStreamerInfo(Int_t slot)
Remove and delete the StreamerInfo in the given slot.
Definition TClass.cxx:7401
void SetCanSplit(Int_t splitmode)
Set the splitability of this class:
Definition TClass.cxx:5739
void AddInstance(Bool_t heap=kFALSE)
Definition TClass.h:381
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:3810
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:4778
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
Definition TClass.cxx:5059
void SetMerge(ROOT::MergeFunc_t mergeFunc)
Install a new wrapper around 'Merge'.
Definition TClass.cxx:7050
ConvSIMap_t fConversionStreamerInfo
Definition TClass.h:199
ROOT::DirAutoAdd_t fDirAutoAdd
Definition TClass.h:240
Bool_t HasDataMemberInfo() const
Definition TClass.h:407
TVirtualRefProxy * fRefProxy
cached streamer info used in the last read.
Definition TClass.h:280
TList * GetMenuList() const
Return the list of menu items associated with the class.
Definition TClass.cxx:4410
ROOT::MergeFunc_t fMerge
saved info to call a IsA member function
Definition TClass.h:233
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:4480
static TClass * Load(TBuffer &b)
Load class description from I/O buffer and return class object.
Definition TClass.cxx:5796
EState fState
cached of the streaming method to use
Definition TClass.h:277
ROOT::DesFunc_t GetDestructor() const
Return the wrapper around the destructor.
Definition TClass.cxx:7560
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:4525
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Replaces the collection proxy for this class.
Definition TClass.cxx:2539
Int_t fStreamerType
saved info to call Streamer
Definition TClass.h:276
TList * fRealData
Definition TClass.h:200
UInt_t fOnHeap
Definition TClass.h:218
void ls(Option_t *opt="") const override
The ls function lists the contents of a class on stdout.
Definition TClass.cxx:4327
std::atomic< TList * > fBase
Definition TClass.h:201
std::atomic< Char_t > fCanSplit
Definition TClass.h:245
Bool_t HasDictionary() const
Check whether a class has a dictionary or not.
Definition TClass.cxx:3975
const TList * GetListOfAllPublicMethods(Bool_t load=kTRUE)
Returns a list of all public methods of this class and its base classes.
Definition TClass.cxx:3914
Bool_t HasCustomStreamerMember() const
The class has a Streamer method and it is implemented by the user or an older (not StreamerInfo based...
Definition TClass.h:509
void SetDeclFile(const char *name, Short_t line)
Definition TClass.h:556
TList * GetListOfAllPublicDataMembers(Bool_t load=kTRUE)
Returns a list of all public data members of this class and its base classes.
Definition TClass.cxx:3931
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:576
virtual ~TClass()
TClass dtor. Deletes all list that might have been created.
Definition TClass.cxx:1729
Bool_t fIsSyntheticPair
Indicates whether this class can be split or not. Values are -1, 0, 1, 2.
Definition TClass.h:250
void Destructor(void *obj, Bool_t dtorOnly=kFALSE)
Explicitly call destructor for object.
Definition TClass.cxx:5481
Version_t fClassVersion
Definition TClass.h:221
std::atomic< TVirtualStreamerInfo * > fCurrentInfo
Current 'state' of the class (Emulated,Interpreted,Loaded)
Definition TClass.h:278
TList * GetListOfFunctionTemplates(Bool_t load=kTRUE)
Return TListOfFunctionTemplates for a class.
Definition TClass.cxx:3867
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:4984
const char * fImplFileName
Definition TClass.h:214
void RegisterStreamerInfo(TVirtualStreamerInfo *info)
Register the StreamerInfo in the given slot, change the State of the TClass as appropriate.
Definition TClass.cxx:7377
TClass & operator=(const TClass &)=delete
std::atomic< UInt_t > fCheckSum
Definition TClass.h:219
void UnregisterAddressInRepository(const char *where, void *location, const TClass *what) const
Definition TClass.cxx:318
std::atomic< TListOfFunctions * > fMethod
Definition TClass.h:207
static void RemoveClassDeclId(TDictionary::DeclId_t id)
Definition TClass.cxx:603
void SetNewArray(ROOT::NewArrFunc_t newArrayFunc)
Install a new wrapper around 'new []'.
Definition TClass.cxx:7074
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:2274
const char * fDeclFileName
Definition TClass.h:213
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:6325
static Bool_t HasDictionarySelection(const char *clname)
Check whether a class has a dictionary or ROOT can load one.
Definition TClass.cxx:3986
void AdoptSchemaRules(ROOT::Detail::TSchemaRuleSet *rules)
Adopt a new set of Data Model Evolution rules.
Definition TClass.cxx:1989
static void StreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
Definition TClass.cxx:6917
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:6454
static std::atomic< Int_t > fgClassCount
Definition TClass.h:326
TVirtualStreamerInfo * GetCurrentStreamerInfo()
Definition TClass.h:440
ROOT::DirAutoAdd_t GetDirectoryAutoAdd() const
Return the wrapper around the directory auto add function.
Definition TClass.cxx:7568
void AddImplFile(const char *filename, int line)
Definition TClass.cxx:2021
TCollection * GetListOfMethodOverloads(const char *name) const
Return the collection of functions named "name".
Definition TClass.cxx:3896
std::atomic< TListOfEnums * > fEnums
Definition TClass.h:205
static Bool_t HasNoInfoOrEmuOrFwdDeclaredDecl(const char *)
Definition TClass.cxx:3467
TVirtualMutex * fOVRMutex
Definition TClass.h:342
TList * GetListOfEnums(Bool_t load=kTRUE)
Return a list containing the TEnums of a class.
Definition TClass.cxx:3755
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:6010
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
Definition TClass.cxx:3881
TClass()
Internal, default constructor.
Definition TClass.cxx:1134
Short_t fDeclFileLine
Definition TClass.h:215
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:4642
std::atomic< Bool_t > fIsOffsetStreamerSet
Indicates whether the ClassInfo is supposed to be available.
Definition TClass.h:261
void IgnoreTObjectStreamer(Bool_t ignore=kTRUE)
When the class kIgnoreTObjectStreamer bit is set, the automatically generated Streamer will not call ...
Definition TClass.cxx:4910
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
Definition TClass.cxx:2983
static IdMap_t * GetIdMap()
Definition TClass.cxx:469
UInt_t GetInstanceCount() const
Definition TClass.h:467
void SetDelete(ROOT::DelFunc_t deleteFunc)
Install a new wrapper around 'delete'.
Definition TClass.cxx:7082
void SetLastReadInfo(TVirtualStreamerInfo *info)
Definition TClass.h:446
static Int_t AutoBrowse(TObject *obj, TBrowser *browser)
Browse external object inherited from TObject.
Definition TClass.cxx:2035
ROOT::NewFunc_t GetNew() const
Return the wrapper around new ThisClass().
Definition TClass.cxx:7528
TClass * GetBaseClass(const char *classname)
Return pointer to the base class "classname".
Definition TClass.cxx:2724
Longptr_t GetDataMemberOffset(const char *membername) const
return offset for member name.
Definition TClass.cxx:3546
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:4623
void SetDestructor(ROOT::DesFunc_t destructorFunc)
Install a new wrapper around the destructor.
Definition TClass.cxx:7098
virtual void PostLoadCheck()
Do the initialization that can only be done after the CINT dictionary has been fully populated and ca...
Definition TClass.cxx:6040
void LoadClassInfo() const
Try to load the ClassInfo if available.
Definition TClass.cxx:5905
void SetResetAfterMerge(ROOT::ResetAfterMergeFunc_t resetFunc)
Install a new wrapper around 'ResetAfterMerge'.
Definition TClass.cxx:7058
TVirtualStreamerInfo * GetStreamerInfoImpl(Int_t version, Bool_t silent) const
Definition TClass.cxx:4703
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:6575
TViewPubFunctions * fAllPubMethod
Definition TClass.h:210
ERuntimeProperties
Indicates whether GetClassVersion has been called.
Definition TClass.h:264
Bool_t HasInterpreterInfo() const
Definition TClass.h:411
static void AddClass(TClass *cl)
static: Add a class to the list and map of classes.
Definition TClass.cxx:555
void GetMissingDictionariesForBaseClasses(TCollection &result, TCollection &visited, bool recurse)
Verify the base classes always.
Definition TClass.cxx:3996
ROOT::Detail::TSchemaRuleSet * fSchemaRules
Pointer to reference proxy if this class represents a reference.
Definition TClass.h:281
std::atomic< Long_t > fProperty
Definition TClass.h:255
TVirtualStreamerInfo * GetLastReadInfo() const
Definition TClass.h:445
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:6954
void SetUnloaded()
Call this method to indicate that the shared library containing this class's code has been removed (u...
Definition TClass.cxx:6390
ROOT::DelArrFunc_t GetDeleteArray() const
Return the wrapper around delete [] ThisObject.
Definition TClass.cxx:7552
Bool_t HasInterpreterInfoInMemory() const
Definition TClass.h:410
TList * fClassMenuList
Definition TClass.h:211
ClassConvStreamerFunc_t fConvStreamerFunc
Definition TClass.h:242
void BuildRealData(void *pointer=nullptr, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
Definition TClass.cxx:2100
void SetRuntimeProperties()
Internal routine to set calculate the class properties that can only be known at run-time,...
Definition TClass.cxx:6275
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:2181
static TClass * LoadClass(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition TClass.cxx:5830
TString fSharedLibs
Definition TClass.h:227
const std::type_info * GetTypeInfo() const
Definition TClass.h:497
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
Definition TClass.cxx:3839
ENewType
Definition TClass.h:107
@ kClassNew
Definition TClass.h:107
@ kRealNew
Definition TClass.h:107
@ kDummyNew
Definition TClass.h:107
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:4396
static DeclIdMap_t * GetDeclIdMap()
Definition TClass.cxx:480
Short_t GetDeclFileLine() const
Definition TClass.h:430
void SetStreamerFunc(ClassStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom streamer.
Definition TClass.cxx:7003
const char * GetImplFileName() const
Definition TClass.h:457
TList * GetListOfRealData() const
Definition TClass.h:454
Int_t Size() const
Return size of object of this class.
Definition TClass.cxx:5785
void SetCurrentStreamerInfo(TVirtualStreamerInfo *info)
Set pointer to current TVirtualStreamerInfo.
Definition TClass.cxx:5777
static DictFuncPtr_t GetDict(const char *cname)
Return a pointer to the dictionary loading function generated by rootcint.
Definition TClass.cxx:3491
Longptr_t fOffsetStreamer
Properties that can only be evaluated at run-time.
Definition TClass.h:275
Int_t fSizeof
Definition TClass.h:243
ROOT::NewArrFunc_t GetNewArray() const
Return the wrapper around new ThisClass[].
Definition TClass.cxx:7536
std::multimap< void *, Version_t > RepoCont_t
Definition TClass.h:343
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:6904
ROOT::NewFunc_t fNew
Definition TClass.h:235
@ kLoading
Definition TClass.h:332
@ kUnloading
Definition TClass.h:332
ROOT::ResetAfterMergeFunc_t GetResetAfterMerge() const
Return the wrapper around Merge.
Definition TClass.cxx:7520
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:4596
Bool_t CanIgnoreTObjectStreamer()
Definition TClass.h:393
void SetGlobalIsA(IsAGlobalFunc_t)
This function installs a global IsA function for this class.
Definition TClass.cxx:6381
void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse)
Verify the Data Members.
Definition TClass.cxx:4013
TObjArray * fStreamerInfo
Definition TClass.h:198
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
Definition TClass.cxx:2001
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:2475
TVirtualCollectionProxy * fCollectionProxy
Definition TClass.h:220
static ENewType IsCallingNew()
Static method returning the defConstructor flag passed to TClass::New().
Definition TClass.cxx:5983
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
Definition TClass.cxx:3705
void Store(TBuffer &b) const
Store class description on I/O buffer.
Definition TClass.cxx:5941
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:2311
static THashTable * fgClassTypedefHash
Definition TClass.h:338
Bool_t HasDirectStreamerInfoUse() const
Definition TClass.h:409
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:1438
std::atomic< TListOfDataMembers * > fData
Definition TClass.h:202
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:6939
const TObjArray * GetStreamerInfos() const
Definition TClass.h:493
void SetClassVersion(Version_t version)
Private function.
Definition TClass.cxx:5756
char * EscapeChars(const char *text) const
Introduce an escape character (@) in front of a special chars.
Definition TClass.cxx:2637
const std::type_info * fTypeInfo
Definition TClass.h:224
std::atomic< TVirtualStreamerInfo * > fLastReadInfo
cached current streamer info.
Definition TClass.h:279
std::atomic< std::map< std::string, TObjArray * > * > ConvSIMap_t
Persistent address of pointer to this TClass object and its successors.
Definition TClass.h:196
static void StreamerTObject(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of TObjects.
Definition TClass.cxx:6881
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
Definition TClass.cxx:5993
EStreamerType
Definition TClass.h:334
@ kDefault
Definition TClass.h:334
@ kEmulatedStreamer
Definition TClass.h:334
@ kExternal
Definition TClass.h:334
@ kForeign
Definition TClass.h:334
@ kInstrumented
Definition TClass.h:334
@ kTObject
Definition TClass.h:334
static Bool_t AddRule(const char *rule)
Add a schema evolution customization rule.
Definition TClass.cxx:1959
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
Definition TClass.cxx:6019
const char * GetContextMenuTitle() const
Definition TClass.h:439
static void RemoveClass(TClass *cl)
static: Remove a class from the list and map of classes
Definition TClass.cxx:585
Bool_t HasLocalHashMember() const
Returns true if this class has an definition and/or overload of the member function Hash.
Definition TClass.cxx:7502
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
Definition TClass.cxx:5610
ClassConvStreamerFunc_t GetConvStreamerFunc() const
Get a wrapper/accessor function around this class custom conversion streamer (member function).
Definition TClass.cxx:3016
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method).
Definition TClass.cxx:6028
ClassInfo_t * GetClassInfo() const
Definition TClass.h:434
ROOT::DelFunc_t fDelete
Definition TClass.h:237
TViewPubDataMembers * fAllPubData
Definition TClass.h:209
ClassInfo_t * fClassInfo
Definition TClass.h:222
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:4668
Bool_t HasConsistentHashMember()
Return 'true' if we can guarantee that if this class (or any class in this class inheritance hierarch...
Definition TClass.h:502
void AdoptStreamer(TClassStreamer *strm)
Adopt a TClassStreamer object.
Definition TClass.cxx:6975
TClass * GetBaseDataMember(const char *datamember)
Return pointer to (base) class that contains datamember.
Definition TClass.cxx:2896
ECheckSum
Definition TClass.h:108
@ kLatestCheckSum
Definition TClass.h:117
@ kNoRange
Definition TClass.h:112
@ kCurrentCheckSum
Definition TClass.h:109
@ kNoBaseCheckSum
Definition TClass.h:116
@ kReflex
Definition TClass.h:114
@ kReflexNoComment
Definition TClass.h:111
@ kWithTypeDef
Definition TClass.h:113
@ kNoRangeCheck
Definition TClass.h:115
@ kNoEnum
Definition TClass.h:110
void Dump() const override
Dump contents of object on stdout.
Definition TClass.h:398
Bool_t InheritsFrom(const char *cl) const override
Return kTRUE if this class inherits from a class with name "classname".
Definition TClass.cxx:4943
Int_t GetBaseClassOffset(const TClass *toBase, void *address=nullptr, bool isDerivedObject=true)
Definition TClass.cxx:2860
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:5290
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
Definition TClass.cxx:2966
void ResetCaches()
To clean out all caches.
Definition TClass.cxx:4284
std::atomic< Bool_t > fVersionUsed
saved remember if fOffsetStreamer has been set.
Definition TClass.h:262
Int_t GetClassSize() const
Definition TClass.h:426
Long_t ClassProperty() const
Return the C++ property of this class, eg.
Definition TClass.cxx:2465
void SetStreamerImpl()
Internal routine to set fStreamerImpl based on the value of fStreamerType.
Definition TClass.cxx:6296
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
Definition TClass.cxx:3692
void CalculateStreamerOffset() const
Calculate the offset between an object of this class to its base class TObject.
Definition TClass.cxx:2252
void GetMissingDictionariesForPairElements(TCollection &result, TCollection &visited, bool recurse)
Definition TClass.cxx:4042
void ReplaceWith(TClass *newcl) const
Definition TClass.cxx:4211
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:6167
Bool_t HasDefaultConstructor(Bool_t testio=kFALSE) const
Return true if we have access to a constructor usable for I/O.
Definition TClass.cxx:7474
void GetMenuItems(TList *listitems)
Returns list of methods accessible by context menu.
Definition TClass.cxx:3943
void SetNew(ROOT::NewFunc_t newFunc)
Install a new wrapper around 'new'.
Definition TClass.cxx:7066
std::atomic< TMethodCall * > fIsAMethod
Definition TClass.h:231
static Int_t ReadRules()
Read the class.rules files from the default location:.
Definition TClass.cxx:1889
Bool_t CanSplitBaseAllow()
Pointer to the function implementing streaming for this class.
Definition TClass.cxx:2316
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:287
void SetContextMenuTitle(const char *title)
Change (i.e. set) the title of the TNamed.
Definition TClass.cxx:6350
ShowMembersFunc_t GetShowMembersWrapper() const
Definition TClass.h:488
void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm)
Install a new member streamer (p will be copied).
Definition TClass.cxx:6825
std::atomic< TClass ** > fPersistentRef
Definition TClass.h:194
IsAGlobalFunc_t fGlobalIsA
pointer to the class's IsA proxy.
Definition TClass.h:230
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:7167
void(* StreamerImpl_t)(const TClass *pThis, void *obj, TBuffer &b, const TClass *onfile_class)
Schema evolution rules.
Definition TClass.h:283
Short_t GetImplFileLine() const
Definition TClass.h:458
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
Definition TClass.cxx:4453
std::atomic< UChar_t > fRuntimeProperties
Definition TClass.h:273
@ kInterpreted
Definition TClass.h:126
@ kHasTClassInit
Definition TClass.h:127
@ kEmulated
Definition TClass.h:125
@ kNoInfo
Definition TClass.h:122
@ kLoaded
Definition TClass.h:130
@ kForwardDeclared
Definition TClass.h:124
@ kNamespaceForMeta
Definition TClass.h:131
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:7274
Int_t GetBaseClassOffsetRecurse(const TClass *toBase)
Return data member offset to the base class "cl".
Definition TClass.cxx:2774
ROOT::DelFunc_t GetDelete() const
Return the wrapper around delete ThisObject.
Definition TClass.cxx:7544
static TClass * LoadClassDefault(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition TClass.cxx:5852
Bool_t IsVersioned() const
Definition TClass.h:523
void SetClassSize(Int_t sizof)
Definition TClass.h:307
TMethod * FindClassOrBaseMethodWithId(DeclId_t faddr)
Find a method with decl id in this class or its bases.
Definition TClass.cxx:4509
static void StreamerExternal(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
There is special streamer for the class.
Definition TClass.cxx:6869
friend bool operator&(UChar_t l, ERuntimeProperties r)
Definition TClass.h:270
Long_t fClassProperty
Property See TClass::Property() for details.
Definition TClass.h:256
TString fContextMenuTitle
Definition TClass.h:223
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:6895
static void ConvStreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
Definition TClass.cxx:6926
std::atomic< Bool_t > fCanLoadClassInfo
Whether info was loaded from a root pcm.
Definition TClass.h:260
void SetConvStreamerFunc(ClassConvStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom conversion streamer.
Definition TClass.cxx:7026
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
Definition TClass.cxx:7147
void GetMissingDictionaries(THashTable &result, bool recurse=false)
Get the classes that have a missing dictionary starting from this one.
Definition TClass.cxx:4156
void MakeCustomMenuList()
Makes a customizable version of the popup menu list, i.e.
Definition TClass.cxx:4352
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:4841
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
Definition TClass.cxx:4443
TVirtualIsAProxy * GetIsAProxy() const
Return the proxy implementing the IsA functionality.
Definition TClass.cxx:3024
Version_t GetClassVersion() const
Definition TClass.h:421
ROOT::MergeFunc_t GetMerge() const
Return the wrapper around Merge.
Definition TClass.cxx:7512
ROOT::ResetAfterMergeFunc_t fResetAfterMerge
Definition TClass.h:234
Bool_t IsFolder() const override
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects).
Definition TClass.h:518
UInt_t fInstanceCount
Definition TClass.h:217
std::atomic< Bool_t > fHasRootPcmInfo
C++ Property of the class (is abstract, has virtual table, etc.)
Definition TClass.h:259
TClass * GetActualClass(const void *object) const
Return a pointer to the real class of the object.
Definition TClass.cxx:2676
ROOT::DesFunc_t fDestructor
Definition TClass.h:239
const char * GetDeclFileName() const
Return name of the file containing the declaration of this class.
Definition TClass.cxx:3532
ObjectPtr NewObject(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Definition TClass.cxx:5073
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
Definition TClass.cxx:3572
void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc)
Install a new wrapper around 'delete []'.
Definition TClass.cxx:7090
Bool_t fHasCustomStreamerMember
The class has a Streamer method and it is implemented by the user or an older (not StreamerInfo based...
Definition TClass.h:253
TFunctionTemplate * GetFunctionTemplate(const char *name)
Definition TClass.cxx:3676
void ResetClassInfo()
Make sure that the current ClassInfo is up to date.
Definition TClass.cxx:4249
ROOT::NewArrFunc_t fNewArray
Definition TClass.h:236
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:6839
void SetImplFileName(const char *implFileName)
Definition TClass.h:561
void GetMissingDictionariesWithRecursionCheck(TCollection &result, TCollection &visited, bool recurse)
From the second level of recursion onwards it is different state check.
Definition TClass.cxx:4059
bool IsClassStructOrUnion() const
Definition TClass.h:354
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
@ kWarned
Definition TClass.h:104
@ kStartWithTObject
Definition TClass.h:103
@ kIsTObject
Definition TClass.h:100
@ kIsForeign
Definition TClass.h:101
@ kReservedLoading
Definition TClass.h:93
std::atomic< TListOfDataMembers * > fUsingData
Definition TClass.h:203
TListOfFunctions * GetMethodList()
Return (create an empty one if needed) the list of functions.
Definition TClass.cxx:4424
TVirtualRefProxy * GetReferenceProxy() const
Definition TClass.h:484
void ResetMenuList()
Resets the menu list to it's standard value.
Definition TClass.cxx:4312
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:3037
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:6860
static TClass * LoadClassCustom(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition TClass.cxx:5882
UInt_t GetHeapInstanceCount() const
Definition TClass.h:468
Short_t fImplFileLine
Definition TClass.h:216
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:365
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition TObject.h:199
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...
Defines a common interface to inspect/change the contents of an object that represents a collection.
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:625
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
void(* DirAutoAdd_t)(void *, TDirectory *)
Definition Rtypes.h:119
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
Definition Rtypes.h:121
void(* DesFunc_t)(void *)
Definition Rtypes.h:118
TClass * GetClass(T *)
Definition TClass.h:664
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:5950
void(* DelFunc_t)(void *)
Definition Rtypes.h:116
ESTLType
Definition ESTLType.h:28
void *(* NewArrFunc_t)(Long_t size, void *arena)
Definition Rtypes.h:115
EFunctionMatchMode
@ kConversionMatch
void ResetClassVersion(TClass *, const char *, Short_t)
Global function to update the version number.
void(* DelArrFunc_t)(void *)
Definition Rtypes.h:117
void *(* NewFunc_t)(void *)
Definition Rtypes.h:114
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
Definition Rtypes.h:120
static const char * what
Definition stlLoader.cc:5
static TClass * GetClass(Bool_t load, Bool_t silent)
Definition TClass.h:632
TVirtualStreamerInfo * GetAllocator() const
Definition TClass.h:149
void * GetPtr() const
Definition TClass.h:147
TVirtualStreamerInfo * fAllocator
Definition TClass.h:143
ObjectPtr(void *ptr=nullptr, TVirtualStreamerInfo *allocator=nullptr)
Definition TClass.h:145
th1 Draw()
TLine l
Definition textangle.C:4