Logo ROOT  
Reference Guide
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 <map>
37#include <string>
38#include <unordered_set>
39#include <vector>
40#include <atomic>
41
42class TBaseClass;
43class TBrowser;
44class TDataMember;
45class TCling;
46class TMethod;
47class TRealData;
48class TBuffer;
51class TMethodCall;
54class THashTable;
58class TListOfEnums;
62class TProtoClass;
63
64namespace ROOT {
65 class TGenericClassInfo;
66 class TMapTypeToTClass;
67 class TMapDeclIdToTClass;
68 namespace Detail {
69 class TSchemaRuleSet;
70 class TCollectionProxyInfo;
71 }
72 namespace Internal {
73 class TCheckHashRecursiveRemoveConsistency;
74 }
75}
76
79
80class TClass : public TDictionary {
81
82friend class TCling;
83friend void ROOT::ResetClassVersion(TClass*, const char*, Short_t);
85friend class TProtoClass;
87friend class TStreamerInfo;
88
89public:
90 // TClass status bits
92 kReservedLoading = BIT(7), // Internal status bits, set and reset only during initialization
93
97 kUnloaded = BIT(16), // The library containing the dictionary for this class was
98 // loaded and has been unloaded from memory.
101 kIsEmulation = BIT(19), // Deprecated
102 kStartWithTObject = BIT(20), // see comments for IsStartingWithTObject()
105 kHasCustomStreamerMember = BIT(23) // The class has a Streamer method and it is implemented by the user or an older (not StreamerInfo based) automatic streamer.
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 // Bit field
246 Int_t fCanSplit : 3; //!Indicates whether this class can be split or not. Values are -1, 0, 1, 2
247
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 mutable std::atomic<Long_t> fProperty; //!Property See TClass::Property() for details
253 mutable Long_t fClassProperty; //!C++ Property of the class (is abstract, has virtual table, etc.)
254
255 // fHasRootPcmInfo needs to be atomic as long as GetListOfBases needs to modify it.
256 std::atomic<Bool_t> fHasRootPcmInfo; //!Whether info was loaded from a root pcm.
257 mutable std::atomic<Bool_t> fCanLoadClassInfo; //!Indicates whether the ClassInfo is supposed to be available.
258 mutable std::atomic<Bool_t> fIsOffsetStreamerSet; //!saved remember if fOffsetStreamer has been set.
259 mutable std::atomic<Bool_t> fVersionUsed; //!Indicates whether GetClassVersion has been called
260
262 kNotInitialized = 0,
263 kSet = BIT(0),
264 // kInconsistent when kSet & !kConsistent.
266 };
268 return l & static_cast<UChar_t>(r);
269 }
270 mutable std::atomic<UChar_t> fRuntimeProperties; //! Properties that can only be evaluated at run-time
271
272 mutable Longptr_t fOffsetStreamer; //!saved info to call Streamer
273 Int_t fStreamerType; //!cached of the streaming method to use
274 EState fState; //!Current 'state' of the class (Emulated,Interpreted,Loaded)
275 mutable std::atomic<TVirtualStreamerInfo*> fCurrentInfo; //!cached current streamer info.
276 mutable std::atomic<TVirtualStreamerInfo*> fLastReadInfo; //!cached streamer info used in the last read.
277 TVirtualRefProxy *fRefProxy; //!Pointer to reference proxy if this class represents a reference
278 ROOT::Detail::TSchemaRuleSet *fSchemaRules; //! Schema evolution rules
279
280 typedef void (*StreamerImpl_t)(const TClass* pThis, void *obj, TBuffer &b, const TClass *onfile_class);
281#ifdef R__NO_ATOMIC_FUNCTION_POINTER
282 mutable StreamerImpl_t fStreamerImpl; //! Pointer to the function implementing streaming for this class
283#else
284 mutable std::atomic<StreamerImpl_t> fStreamerImpl; //! Pointer to the function implementing streaming for this class
285#endif
286
292 void Init(const char *name, Version_t cversion, const std::type_info *info,
293 TVirtualIsAProxy *isa,
294 const char *dfil, const char *ifil,
295 Int_t dl, Int_t il,
296 ClassInfo_t *classInfo,
297 Bool_t silent);
298 void ForceReload (TClass* oldcl);
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:
357 void GetMissingDictionariesForBaseClasses(TCollection &result, TCollection &visited, bool recurse);
358 void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse);
359 void GetMissingDictionariesWithRecursionCheck(TCollection &result, TCollection &visited, bool recurse);
360 void GetMissingDictionariesForPairElements(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 = 0,
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 = 0,
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 virtual void Browse(TBrowser *b);
386 void BuildRealData(void *pointer=0, 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;
395 void Draw(Option_t *option="");
396 void Dump() const { 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;
409 UInt_t GetCheckSum(Bool_t &isvalid) const;
410 UInt_t GetCheckSum(ECheckSum code, Bool_t &isvalid) const;
413 TMethod *GetClassMethod(const char *name, const char *params, Bool_t objectIsConst = kFALSE);
414 TMethod *GetClassMethodWithPrototype(const char *name, const char *proto,
415 Bool_t objectIsConst = kFALSE,
418 if (!fVersionUsed.load(std::memory_order_relaxed))
420 return fClassVersion;
421 }
422 Int_t GetClassSize() const { return Size(); }
423 TDataMember *GetDataMember(const char *datamember) const;
424 Longptr_t GetDataMemberOffset(const char *membername) const;
425 const char *GetDeclFileName() const;
430 ClassInfo_t *GetClassInfo() const {
433 return fClassInfo;
434 }
435 const char *GetContextMenuTitle() const { return fContextMenuTitle; }
437 auto current = fCurrentInfo.load(std::memory_order_relaxed);
438 if (current) return current;
439 else return DetermineCurrentStreamerInfo();
440 }
449 TCollection *GetListOfMethodOverloads(const char* name) const;
450 TList *GetListOfRealData() const { return fRealData; }
453 const char *GetImplFileName() const { return fImplFileName; }
455 TClass *GetActualClass(const void *object) const;
456 TClass *GetBaseClass(const char *classname);
457 TClass *GetBaseClass(const TClass *base);
458 Int_t GetBaseClassOffset(const TClass *toBase, void *address = 0, bool isDerivedObject = true);
459 TClass *GetBaseDataMember(const char *datamember);
465 void GetMenuItems(TList *listitems);
466 TList *GetMenuList() const;
467 TMethod *GetMethod(const char *method, const char *params, Bool_t objectIsConst = kFALSE);
468 TMethod *GetMethodWithPrototype(const char *method, const char *proto, Bool_t objectIsConst = kFALSE,
470 TMethod *GetMethodAny(const char *method);
471 TMethod *GetMethodAllAny(const char *method);
472 Int_t GetNdata();
475 ROOT::NewFunc_t GetNew() const;
478 TClass *const*GetPersistentRef() const { return fPersistentRef; }
479 TRealData *GetRealData(const char *name) const;
483 const char *GetSharedLibs();
485 EState GetState() const { return fState; }
489 const TObjArray *GetStreamerInfos() const { return fStreamerInfo; }
490 TVirtualStreamerInfo *GetStreamerInfo(Int_t version=0, Bool_t isTransient = kFALSE) const;
493 const std::type_info *GetTypeInfo() const { return fTypeInfo; };
494
495 /// @brief Return 'true' if we can guarantee that if this class (or any class in
496 /// this class inheritance hierarchy) overload TObject::Hash it also starts
497 /// the RecursiveRemove process from its own destructor.
499 {
503 }
504 Bool_t HasDictionary() const;
505 static Bool_t HasDictionarySelection(const char* clname);
507 void GetMissingDictionaries(THashTable& result, bool recurse = false);
509 Bool_t InheritsFrom(const char *cl) const;
510 Bool_t InheritsFrom(const TClass *cl) const;
511 void InterpretedShowMembers(void* obj, TMemberInspector &insp, Bool_t isTransient);
512 Bool_t IsFolder() const { return kTRUE; }
513 Bool_t IsLoaded() const;
514 Bool_t IsForeign() const;
517 Bool_t IsVersioned() const { return !( GetClassVersion()<=1 && IsForeign() ); }
518 Bool_t IsTObject() const;
519 static TClass *LoadClass(const char *requestedname, Bool_t silent);
520 void ls(Option_t *opt="") const;
521 void MakeCustomMenuList();
522 Bool_t MatchLegacyCheckSum(UInt_t checksum) const;
523 void Move(void *arenaFrom, void *arenaTo) const;
524 void *New(ENewType defConstructor = kClassNew, Bool_t quiet = kFALSE) const;
525 void *New(void *arena, ENewType defConstructor = kClassNew) const;
526 void *NewArray(Long_t nElements, ENewType defConstructor = kClassNew) const;
527 void *NewArray(Long_t nElements, void *arena, ENewType defConstructor = kClassNew) const;
528 ObjectPtr NewObject(ENewType defConstructor = kClassNew, Bool_t quiet = kFALSE) const;
529 ObjectPtr NewObject(void *arena, ENewType defConstructor = kClassNew) const;
530 ObjectPtr NewObjectArray(Long_t nElements, ENewType defConstructor = kClassNew) const;
531 ObjectPtr NewObjectArray(Long_t nElements, void *arena, ENewType defConstructor = kClassNew) const;
532 virtual void PostLoadCheck();
533 Long_t Property() const;
534 Int_t ReadBuffer(TBuffer &b, void *pointer, Int_t version, UInt_t start, UInt_t count);
535 Int_t ReadBuffer(TBuffer &b, void *pointer);
537 void RemoveStreamerInfo(Int_t slot);
538 void ReplaceWith(TClass *newcl) const;
539 void ResetCaches();
540 void ResetClassInfo(Long_t tagnum);
541 void ResetClassInfo();
543 void ResetMenuList();
544 Int_t Size() const;
545 void SetCanSplit(Int_t splitmode);
547 void SetContextMenuTitle(const char *title);
550 void SetDeclFile(const char *name, int line) { fDeclFileName = name; fDeclFileLine = line; }
551 void SetDelete(ROOT::DelFunc_t deleteFunc);
552 void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc);
553 void SetDirectoryAutoAdd(ROOT::DirAutoAdd_t dirAutoAddFunc);
554 void SetDestructor(ROOT::DesFunc_t destructorFunc);
555 void SetImplFileName(const char *implFileName) { fImplFileName = implFileName; }
556 void SetMerge(ROOT::MergeFunc_t mergeFunc);
558 void SetNew(ROOT::NewFunc_t newFunc);
559 void SetNewArray(ROOT::NewArrFunc_t newArrayFunc);
560 TVirtualStreamerInfo *SetStreamerInfo(Int_t version, const char *info="");
561 void SetUnloaded();
562 Int_t WriteBuffer(TBuffer &b, void *pointer, const char *info="");
563
565 void AdoptStreamer(TClassStreamer *strm);
566 void AdoptMemberStreamer(const char *name, TMemberStreamer *strm);
567 void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm);
570
571 // Function to retrieve the TClass object and dictionary function
572 static void AddClass(TClass *cl);
574 static void RemoveClass(TClass *cl);
576 static TClass *GetClass(const char *name, Bool_t load = kTRUE, Bool_t silent = kFALSE);
577 static TClass *GetClass(const char *name, Bool_t load, Bool_t silent, size_t hint_pair_offset, size_t hint_pair_size);
578 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);
579 static TClass *GetClass(ClassInfo_t *info, Bool_t load = kTRUE, Bool_t silent = kFALSE);
580 template<typename T>
581 static TClass *GetClass(Bool_t load = kTRUE, Bool_t silent = kFALSE);
582 static Bool_t GetClass(DeclId_t id, std::vector<TClass*> &classes);
583 static DictFuncPtr_t GetDict (const char *cname);
584 static DictFuncPtr_t GetDict (const std::type_info &info);
585
586 static Int_t AutoBrowse(TObject *obj, TBrowser *browser);
587 static ENewType IsCallingNew();
588 static TClass *Load(TBuffer &b);
589 void Store(TBuffer &b) const;
590
591 // Pseudo-method apply to the 'obj'. In particular those are used to
592 // implement TObject like methods for non-TObject classes.
593 Int_t Browse(void *obj, TBrowser *b) const;
594 void DeleteArray(void *ary, Bool_t dtorOnly = kFALSE);
595 void DeleteArray(ObjectPtr ary, Bool_t dtorOnly = kFALSE);
596 void Destructor(void *obj, Bool_t dtorOnly = kFALSE);
597 void Destructor(ObjectPtr obj, Bool_t dtorOnly = kFALSE);
598 void *DynamicCast(const TClass *base, void *obj, Bool_t up = kTRUE);
599 const void *DynamicCast(const TClass *base, const void *obj, Bool_t up = kTRUE);
600 Bool_t IsFolder(void *obj) const;
601
602 inline void Streamer(void *obj, TBuffer &b, const TClass *onfile_class = 0) const
603 {
604 // Inline for performance, skipping one function call.
605#ifdef R__NO_ATOMIC_FUNCTION_POINTER
606 fStreamerImpl(this,obj,b,onfile_class);
607#else
608 auto t = fStreamerImpl.load();
609 t(this,obj,b,onfile_class);
610#endif
611 }
612
613 ClassDef(TClass,0) //Dictionary containing class information
614};
615
616namespace ROOT {
617namespace Internal {
618template <typename T>
620{
621 return T::Class();
622}
623
624template <typename T>
626 static TClass *GetClass(Bool_t load, Bool_t silent) {
627 return TClass::GetClass(typeid(T), load, silent);
628 }
629};
630
631template <typename F, typename S>
632struct TClassGetClassHelper<std::pair<F, S> > {
633 static TClass *GetClass(Bool_t load, Bool_t silent) {
634 std::pair<F, S> *p = nullptr;
635 size_t hint_offset = ((char*)&(p->second)) - (char*)p;
636 return TClass::GetClass(typeid(std::pair<F, S>), load, silent, hint_offset, sizeof(std::pair<F,S>));
637 }
638};
639
640template <typename T>
641TClass *GetClassHelper(Bool_t load, Bool_t silent, std::false_type)
642{
643 return TClassGetClassHelper<T>::GetClass(load, silent);
644}
645
646} // namespace Internal
647} // namespace ROOT
648
649template <typename T>
651{
653 return ROOT::Internal::GetClassHelper<T>(load, silent, tag);
654}
655
656namespace ROOT {
657
658template <typename T> TClass *GetClass(T * /* dummy */) { return TClass::GetClass<T>(); }
659template <typename T> TClass *GetClass(const T * /* dummy */) { return TClass::GetClass<T>(); }
660
661#ifndef R__NO_CLASS_TEMPLATE_SPECIALIZATION
662 // This can only be used when the template overload resolution can distinguish between T* and T**
663 template <typename T> TClass* GetClass( T** /* dummy */) { return TClass::GetClass<T>(); }
664 template <typename T> TClass* GetClass(const T** /* dummy */) { return TClass::GetClass<T>(); }
665 template <typename T> TClass* GetClass( T* const* /* dummy */) { return TClass::GetClass<T>(); }
666 template <typename T> TClass* GetClass(const T* const* /* dummy */) { return TClass::GetClass<T>(); }
667#endif
668
669 extern TClass *CreateClass(const char *cname, Version_t id,
670 const char *dfil, const char *ifil,
671 Int_t dl, Int_t il);
672}
673
674#endif // ROOT_TClass
int Int_t
Definition: CPyCppyy.h:43
unsigned int UInt_t
Definition: CPyCppyy.h:44
long Long_t
Definition: CPyCppyy.h:50
void Class()
Definition: Class.C:29
typedef void(GLAPIENTRYP _GLUfuncptr)(void)
ROOT::R::TRInterface & r
Definition: Object.C:4
#define b(i)
Definition: RSha256.hxx:100
long Longptr_t
Definition: RtypesCore.h:82
short Version_t
Definition: RtypesCore.h:65
unsigned char UChar_t
Definition: RtypesCore.h:38
const Bool_t kFALSE
Definition: RtypesCore.h:101
bool Bool_t
Definition: RtypesCore.h:63
short Short_t
Definition: RtypesCore.h:39
const Bool_t kTRUE
Definition: RtypesCore.h:100
const char Option_t
Definition: RtypesCore.h:66
#define ClassDef(name, id)
Definition: Rtypes.h:325
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
void(* ShowMembersFunc_t)(const void *obj, TMemberInspector &R__insp, Bool_t isTransient)
Definition: Rtypes.h:94
TClass *(* IsAGlobalFunc_t)(const TClass *, const void *obj)
Definition: Rtypes.h:96
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:78
ROOT::TMapTypeToTClass IdMap_t
Definition: TClass.h:77
@ kIsClass
Definition: TDictionary.h:65
@ kIsStruct
Definition: TDictionary.h:66
@ kIsUnion
Definition: TDictionary.h:67
int type
Definition: TGX11.cxx:121
const char * proto
Definition: civetweb.c:16604
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
InsertTClassInRegistryRAII(TClass::EState &state, const char *name, TDeclNameRegistry &emuRegistry)
Definition: TClass.cxx:248
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
TDeclNameRegistry(Int_t verbLevel=0)
TDeclNameRegistry class constructor.
Definition: TClass.cxx:185
std::atomic_flag fSpinLock
Definition: TClass.h:170
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition: TClass.h:80
const TObjArray * GetStreamerInfos() const
Definition: TClass.h:489
UInt_t GetCheckSum(ECheckSum code=kCurrentCheckSum) const
Call GetCheckSum with validity check.
Definition: TClass.cxx:6457
Bool_t IsSyntheticPair() const
Definition: TClass.h:516
RepoCont_t fObjectVersionRepository
Definition: TClass.h:342
ShowMembersFunc_t fShowMembers
Definition: TClass.h:225
TDataMember * GetDataMember(const char *datamember) const
Return pointer to datamember object with name "datamember".
Definition: TClass.cxx:3392
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:3779
void ForceReload(TClass *oldcl)
we found at least one equivalent.
Definition: TClass.cxx:1334
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:2307
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:6980
Bool_t IsFolder() const
Returns kTRUE in case object contains browsable objects (like containers or lists of other objects).
Definition: TClass.h:512
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:5186
static TDeclNameRegistry fNoInfoOrEmuOrFwdDeclNameRegistry
Definition: TClass.h:326
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:6637
TMethod * GetClassMethod(Longptr_t faddr)
Look for a method in this class that has the interface function address faddr.
Definition: TClass.cxx:4476
TVirtualStreamerInfo * DetermineCurrentStreamerInfo()
Determine and set pointer to current TVirtualStreamerInfo.
Definition: TClass.cxx:5677
EState GetState() const
Definition: TClass.h:485
ROOT::ESTLType GetCollectionType() const
Return the 'type' of the STL the TClass is representing.
Definition: TClass.cxx:2873
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:6655
void ResetInstanceCount()
Definition: TClass.h:542
ClassStreamerFunc_t GetStreamerFunc() const
Get a wrapper/accessor function around this class custom streamer (member function).
Definition: TClass.cxx:2926
void RemoveStreamerInfo(Int_t slot)
Remove and delete the StreamerInfo in the given slot.
Definition: TClass.cxx:7272
void SetCanSplit(Int_t splitmode)
Set the splitability of this class:
Definition: TClass.cxx:5651
void AddInstance(Bool_t heap=kFALSE)
Definition: TClass.h:379
TObject * Clone(const char *newname="") const
Create a Clone of this TClass object using a different name but using the same 'dictionary'.
Definition: TClass.cxx:2394
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:3734
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:4702
void * New(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Return a pointer to a newly allocated object of this class.
Definition: TClass.cxx:4971
void SetMerge(ROOT::MergeFunc_t mergeFunc)
Install a new wrapper around 'Merge'.
Definition: TClass.cxx:6921
ConvSIMap_t fConversionStreamerInfo
Definition: TClass.h:199
TClass & operator=(const TClass &)=delete
ROOT::DirAutoAdd_t fDirAutoAdd
Definition: TClass.h:240
Bool_t HasDataMemberInfo() const
Definition: TClass.h:404
TVirtualRefProxy * fRefProxy
cached streamer info used in the last read.
Definition: TClass.h:277
TList * GetMenuList() const
Return the list of menu items associated with the class.
Definition: TClass.cxx:4334
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:4404
virtual void Browse(TBrowser *b)
This method is called by a browser to get the class information.
Definition: TClass.cxx:1997
static TClass * Load(TBuffer &b)
Load class description from I/O buffer and return class object.
Definition: TClass.cxx:5708
EState fState
cached of the streaming method to use
Definition: TClass.h:274
ROOT::DesFunc_t GetDestructor() const
Return the wrapper around the destructor.
Definition: TClass.cxx:7427
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:4449
void CopyCollectionProxy(const TVirtualCollectionProxy &)
Copy the argument.
Definition: TClass.cxx:2457
Int_t fStreamerType
saved info to call Streamer
Definition: TClass.h:273
TList * fRealData
Definition: TClass.h:200
UInt_t fOnHeap
Definition: TClass.h:218
void BuildRealData(void *pointer=0, Bool_t isTransient=kFALSE)
Build a full list of persistent data members.
Definition: TClass.cxx:2018
std::atomic< TList * > fBase
Definition: TClass.h:201
Bool_t HasDictionary() const
Check whether a class has a dictionary or not.
Definition: TClass.cxx:3899
const std::type_info * GetTypeInfo() const
Definition: TClass.h:493
const TList * GetListOfAllPublicMethods(Bool_t load=kTRUE)
Returns a list of all public methods of this class and its base classes.
Definition: TClass.cxx:3838
TList * GetListOfAllPublicDataMembers(Bool_t load=kTRUE)
Returns a list of all public data members of this class and its base classes.
Definition: TClass.cxx:3855
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:1647
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:5393
Version_t fClassVersion
Definition: TClass.h:221
std::atomic< TVirtualStreamerInfo * > fCurrentInfo
Current 'state' of the class (Emulated,Interpreted,Loaded)
Definition: TClass.h:275
TList * GetListOfFunctionTemplates(Bool_t load=kTRUE)
Return TListOfFunctionTemplates for a class.
Definition: TClass.cxx:3791
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:4908
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:7248
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:536
void SetNewArray(ROOT::NewArrFunc_t newArrayFunc)
Install a new wrapper around 'new []'.
Definition: TClass.cxx:6945
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:2192
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:6196
Int_t fCanSplit
Definition: TClass.h:246
static Bool_t HasDictionarySelection(const char *clname)
Check whether a class has a dictionary or ROOT can load one.
Definition: TClass.cxx:3910
void AdoptSchemaRules(ROOT::Detail::TSchemaRuleSet *rules)
Adopt a new set of Data Model Evolution rules.
Definition: TClass.cxx:1907
const char * GetImplFileName() const
Definition: TClass.h:453
static void StreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
Definition: TClass.cxx:6788
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:6325
static std::atomic< Int_t > fgClassCount
Definition: TClass.h:324
ROOT::DirAutoAdd_t GetDirectoryAutoAdd() const
Return the wrapper around the directory auto add function.
Definition: TClass.cxx:7435
void AddImplFile(const char *filename, int line)
Definition: TClass.cxx:1939
TCollection * GetListOfMethodOverloads(const char *name) const
Return the collection of functions named "name".
Definition: TClass.cxx:3820
std::atomic< TListOfEnums * > fEnums
Definition: TClass.h:205
static Bool_t HasNoInfoOrEmuOrFwdDeclaredDecl(const char *)
Definition: TClass.cxx:3351
TVirtualMutex * fOVRMutex
Definition: TClass.h:340
TList * GetListOfEnums(Bool_t load=kTRUE)
Return a list containing the TEnums of a class.
Definition: TClass.cxx:3679
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:5922
TList * GetListOfMethods(Bool_t load=kTRUE)
Return list containing the TMethods of a class.
Definition: TClass.cxx:3805
TClass()
Internal, default constructor.
Definition: TClass.cxx:1063
ClassInfo_t * GetClassInfo() const
Definition: TClass.h:430
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:4566
std::atomic< Bool_t > fIsOffsetStreamerSet
Indicates whether the ClassInfo is supposed to be available.
Definition: TClass.h:258
void IgnoreTObjectStreamer(Bool_t ignore=kTRUE)
When the class kIgnoreTObjectStreamer bit is set, the automatically generated Streamer will not call ...
Definition: TClass.cxx:4834
TClassStreamer * GetStreamer() const
Return the Streamer Class allowing streaming (if any).
Definition: TClass.cxx:2901
static IdMap_t * GetIdMap()
Definition: TClass.cxx:469
UInt_t GetInstanceCount() const
Definition: TClass.h:463
void SetDelete(ROOT::DelFunc_t deleteFunc)
Install a new wrapper around 'delete'.
Definition: TClass.cxx:6953
void SetLastReadInfo(TVirtualStreamerInfo *info)
Definition: TClass.h:442
static Int_t AutoBrowse(TObject *obj, TBrowser *browser)
Browse external object inherited from TObject.
Definition: TClass.cxx:1953
ROOT::NewFunc_t GetNew() const
Return the wrapper around new ThisClass().
Definition: TClass.cxx:7395
void SetDeclFile(const char *name, int line)
Definition: TClass.h:550
TClass * GetBaseClass(const char *classname)
Return pointer to the base class "classname".
Definition: TClass.cxx:2642
Longptr_t GetDataMemberOffset(const char *membername) const
return offset for member name.
Definition: TClass.cxx:3430
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:4547
void SetDestructor(ROOT::DesFunc_t destructorFunc)
Install a new wrapper around the destructor.
Definition: TClass.cxx:6969
virtual void PostLoadCheck()
Do the initialization that can only be done after the CINT dictionary has been fully populated and ca...
Definition: TClass.cxx:5950
void LoadClassInfo() const
Try to load the ClassInfo if available.
Definition: TClass.cxx:5817
void SetResetAfterMerge(ROOT::ResetAfterMergeFunc_t resetFunc)
Install a new wrapper around 'ResetAfterMerge'.
Definition: TClass.cxx:6929
TVirtualStreamerInfo * GetStreamerInfoImpl(Int_t version, Bool_t silent) const
Definition: TClass.cxx:4627
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:6446
TViewPubFunctions * fAllPubMethod
Definition: TClass.h:210
ERuntimeProperties
Indicates whether GetClassVersion has been called.
Definition: TClass.h:261
Bool_t HasInterpreterInfo() const
Definition: TClass.h:407
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:3920
ROOT::Detail::TSchemaRuleSet * fSchemaRules
Pointer to reference proxy if this class represents a reference.
Definition: TClass.h:278
std::atomic< Long_t > fProperty
Definition: TClass.h:252
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:6825
void SetUnloaded()
Call this method to indicate that the shared library containing this class's code has been removed (u...
Definition: TClass.cxx:6261
ROOT::DelArrFunc_t GetDeleteArray() const
Return the wrapper around delete [] ThiObject.
Definition: TClass.cxx:7419
Bool_t HasInterpreterInfoInMemory() const
Definition: TClass.h:406
TList * fClassMenuList
Definition: TClass.h:211
ClassConvStreamerFunc_t fConvStreamerFunc
Definition: TClass.h:242
void SetRuntimeProperties()
Internal routine to set calculate the class properties that can only be known at run-time,...
Definition: TClass.cxx:6146
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:2099
TList * GetListOfRealData() const
Definition: TClass.h:450
static TClass * LoadClass(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition: TClass.cxx:5742
TString fSharedLibs
Definition: TClass.h:227
TList * GetListOfDataMembers(Bool_t load=kTRUE)
Return list containing the TDataMembers of a class.
Definition: TClass.cxx:3763
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:4320
static DeclIdMap_t * GetDeclIdMap()
Definition: TClass.cxx:480
Short_t GetDeclFileLine() const
Definition: TClass.h:426
void SetStreamerFunc(ClassStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom streamer.
Definition: TClass.cxx:6874
Int_t Size() const
Return size of object of this class.
Definition: TClass.cxx:5697
void SetCurrentStreamerInfo(TVirtualStreamerInfo *info)
Set pointer to current TVirtualStreamerInfo.
Definition: TClass.cxx:5689
static DictFuncPtr_t GetDict(const char *cname)
Return a pointer to the dictionary loading function generated by rootcint.
Definition: TClass.cxx:3375
Longptr_t fOffsetStreamer
Properties that can only be evaluated at run-time.
Definition: TClass.h:272
Int_t fSizeof
Definition: TClass.h:243
ROOT::NewArrFunc_t GetNewArray() const
Return the wrapper around new ThisClass[].
Definition: TClass.cxx:7403
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:6775
ROOT::NewFunc_t fNew
Definition: TClass.h:235
ROOT::ResetAfterMergeFunc_t GetResetAfterMerge() const
Return the wrapper around Merge.
Definition: TClass.cxx:7387
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:4520
Bool_t CanIgnoreTObjectStreamer()
Definition: TClass.h:391
void SetGlobalIsA(IsAGlobalFunc_t)
This function installs a global IsA function for this class.
Definition: TClass.cxx:6252
void GetMissingDictionariesForMembers(TCollection &result, TCollection &visited, bool recurse)
Verify the Data Members.
Definition: TClass.cxx:3937
TObjArray * fStreamerInfo
Definition: TClass.h:198
const ROOT::Detail::TSchemaRuleSet * GetSchemaRules() const
Return the set of the schema rules if any.
Definition: TClass.cxx:1919
TVirtualCollectionProxy * fCollectionProxy
Definition: TClass.h:220
static ENewType IsCallingNew()
Static method returning the defConstructor flag passed to TClass::New().
Definition: TClass.cxx:5895
void ls(Option_t *opt="") const
The ls function lists the contents of a class on stdout.
Definition: TClass.cxx:4251
TList * GetListOfBases()
Return list containing the TBaseClass(es) of a class.
Definition: TClass.cxx:3629
void Store(TBuffer &b) const
Store class description on I/O buffer.
Definition: TClass.cxx:5853
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:2229
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:1359
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:6810
void SetClassVersion(Version_t version)
Private function.
Definition: TClass.cxx:5668
char * EscapeChars(const char *text) const
Introduce an escape character (@) in front of a special chars.
Definition: TClass.cxx:2556
const std::type_info * fTypeInfo
Definition: TClass.h:224
std::atomic< TVirtualStreamerInfo * > fLastReadInfo
cached current streamer info.
Definition: TClass.h:276
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:6752
Bool_t IsLoaded() const
Return true if the shared library of this class is currently in the a process's memory.
Definition: TClass.cxx:5905
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:1877
Bool_t IsTObject() const
Return kTRUE is the class inherits from TObject.
Definition: TClass.cxx:5931
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:7369
void DeleteArray(void *ary, Bool_t dtorOnly=kFALSE)
Explicitly call operator delete[] for an array.
Definition: TClass.cxx:5522
ClassConvStreamerFunc_t GetConvStreamerFunc() const
Get a wrapper/accessor function around this class custom conversion streamer (member function).
Definition: TClass.cxx:2934
TClass *const * GetPersistentRef() const
Definition: TClass.h:478
Bool_t IsForeign() const
Return kTRUE is the class is Foreign (the class does not have a Streamer method).
Definition: TClass.cxx:5940
ROOT::DelFunc_t fDelete
Definition: TClass.h:237
TViewPubDataMembers * fAllPubData
Definition: TClass.h:209
Int_t GetBaseClassOffset(const TClass *toBase, void *address=0, bool isDerivedObject=true)
Definition: TClass.cxx:2778
TVirtualStreamerInfo * GetCurrentStreamerInfo()
Definition: TClass.h:436
void Dump() const
Dump contents of object on stdout.
Definition: TClass.h:396
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:4592
Bool_t HasConsistentHashMember()
Return 'true' if we can guarantee that if this class (or any class in this class inheritance hierarch...
Definition: TClass.h:498
void AdoptStreamer(TClassStreamer *strm)
Adopt a TClassStreamer object.
Definition: TClass.cxx:6846
TClass * GetBaseDataMember(const char *datamember)
Return pointer to (base) class that contains datamember.
Definition: TClass.cxx:2814
Long_t Property() const
Returns the properties of the TClass as a bit field stored as a Long_t value.
Definition: TClass.cxx:6038
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
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:5202
TVirtualCollectionProxy * GetCollectionProxy() const
Return the proxy describing the collection (if any).
Definition: TClass.cxx:2884
void ResetCaches()
To clean out all caches.
Definition: TClass.cxx:4208
std::atomic< Bool_t > fVersionUsed
saved remember if fOffsetStreamer has been set.
Definition: TClass.h:259
Int_t GetClassSize() const
Definition: TClass.h:422
Long_t ClassProperty() const
Return the C++ property of this class, eg.
Definition: TClass.cxx:2384
void SetStreamerImpl()
Internal routine to set fStreamerImpl based on the value of fStreamerType.
Definition: TClass.cxx:6167
const char * GetSharedLibs()
Get the list of shared libraries containing the code for class cls.
Definition: TClass.cxx:3616
void CalculateStreamerOffset() const
Calculate the offset between an object of this class to its base class TObject.
Definition: TClass.cxx:2170
void GetMissingDictionariesForPairElements(TCollection &result, TCollection &visited, bool recurse)
Definition: TClass.cxx:3966
void ReplaceWith(TClass *newcl) const
Definition: TClass.cxx:4135
void RegisterAddressInRepository(const char *where, void *location, const TClass *what) const
Definition: TClass.cxx:290
TVirtualStreamerInfo * GetLastReadInfo() const
Definition: TClass.h:441
Bool_t HasDefaultConstructor(Bool_t testio=kFALSE) const
Return true if we have access to a constructor usable for I/O.
Definition: TClass.cxx:7341
void GetMenuItems(TList *listitems)
Returns list of methods accessible by context menu.
Definition: TClass.cxx:3867
void SetNew(ROOT::NewFunc_t newFunc)
Install a new wrapper around 'new'.
Definition: TClass.cxx:6937
void Draw(Option_t *option="")
Draw detailed class inheritance structure.
Definition: TClass.cxx:2474
void Streamer(void *obj, TBuffer &b, const TClass *onfile_class=0) const
Definition: TClass.h:602
std::atomic< TMethodCall * > fIsAMethod
Definition: TClass.h:231
static Int_t ReadRules()
Read the class.rules files from the default location:.
Definition: TClass.cxx:1807
Bool_t CanSplitBaseAllow()
Pointer to the function implementing streaming for this class.
Definition: TClass.cxx:2234
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:284
void SetContextMenuTitle(const char *title)
Change (i.e. set) the title of the TNamed.
Definition: TClass.cxx:6221
ShowMembersFunc_t GetShowMembersWrapper() const
Definition: TClass.h:484
void SetMemberStreamer(const char *name, MemberStreamerFunc_t strm)
Install a new member streamer (p will be copied).
Definition: TClass.cxx:6696
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:7038
void(* StreamerImpl_t)(const TClass *pThis, void *obj, TBuffer &b, const TClass *onfile_class)
Schema evolution rules.
Definition: TClass.h:280
Short_t GetImplFileLine() const
Definition: TClass.h:454
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
Definition: TClass.cxx:4377
std::atomic< UChar_t > fRuntimeProperties
Definition: TClass.h:270
EState
Definition: TClass.h:121
@ 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:7145
Int_t GetBaseClassOffsetRecurse(const TClass *toBase)
Return data member offset to the base class "cl".
Definition: TClass.cxx:2692
ROOT::DelFunc_t GetDelete() const
Return the wrapper around delete ThiObject.
Definition: TClass.cxx:7411
static TClass * LoadClassDefault(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition: TClass.cxx:5764
Bool_t IsVersioned() const
Definition: TClass.h:517
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:4433
static void StreamerExternal(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
There is special streamer for the class.
Definition: TClass.cxx:6740
friend bool operator&(UChar_t l, ERuntimeProperties r)
Definition: TClass.h:267
Long_t fClassProperty
Property See TClass::Property() for details.
Definition: TClass.h:253
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:6766
static void ConvStreamerInstrumented(const TClass *pThis, void *object, TBuffer &b, const TClass *onfile_class)
Case of instrumented class with a library.
Definition: TClass.cxx:6797
std::atomic< Bool_t > fCanLoadClassInfo
Whether info was loaded from a root pcm.
Definition: TClass.h:257
void SetConvStreamerFunc(ClassConvStreamerFunc_t strm)
Set a wrapper/accessor function around this class custom conversion streamer.
Definition: TClass.cxx:6897
TVirtualStreamerInfo * FindStreamerInfo(TObjArray *arr, UInt_t checksum) const
Find the TVirtualStreamerInfo in the StreamerInfos corresponding to checksum.
Definition: TClass.cxx:7018
void GetMissingDictionaries(THashTable &result, bool recurse=false)
Get the classes that have a missing dictionary starting from this one.
Definition: TClass.cxx:4080
void MakeCustomMenuList()
Makes a customizable version of the popup menu list, i.e.
Definition: TClass.cxx:4276
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:4765
TMethod * GetMethodAny(const char *method)
Return pointer to method without looking at parameters.
Definition: TClass.cxx:4367
TVirtualIsAProxy * GetIsAProxy() const
Return the proxy implementing the IsA functionality.
Definition: TClass.cxx:2942
const char * GetContextMenuTitle() const
Definition: TClass.h:435
Version_t GetClassVersion() const
Definition: TClass.h:417
ROOT::MergeFunc_t GetMerge() const
Return the wrapper around Merge.
Definition: TClass.cxx:7379
ROOT::ResetAfterMergeFunc_t fResetAfterMerge
Definition: TClass.h:234
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:256
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
Definition: TClass.cxx:4867
TClass * GetActualClass(const void *object) const
Return a pointer the the real class of the object.
Definition: TClass.cxx:2595
ROOT::DesFunc_t fDestructor
Definition: TClass.h:239
TVirtualRefProxy * GetReferenceProxy() const
Definition: TClass.h:480
const char * GetDeclFileName() const
Return name of the file containing the declaration of this class.
Definition: TClass.cxx:3416
ObjectPtr NewObject(ENewType defConstructor=kClassNew, Bool_t quiet=kFALSE) const
Definition: TClass.cxx:4985
@ kLoading
Definition: TClass.h:330
@ kUnloading
Definition: TClass.h:330
TRealData * GetRealData(const char *name) const
Return pointer to TRealData element with name "name".
Definition: TClass.cxx:3456
void SetDeleteArray(ROOT::DelArrFunc_t deleteArrayFunc)
Install a new wrapper around 'delete []'.
Definition: TClass.cxx:6961
TFunctionTemplate * GetFunctionTemplate(const char *name)
Definition: TClass.cxx:3600
void ResetClassInfo()
Make sure that the current ClassInfo is up to date.
Definition: TClass.cxx:4173
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:6710
void SetImplFileName(const char *implFileName)
Definition: TClass.h:555
void GetMissingDictionariesWithRecursionCheck(TCollection &result, TCollection &visited, bool recurse)
From the second level of recursion onwards it is different state check.
Definition: TClass.cxx:3983
bool IsClassStructOrUnion() const
Definition: TClass.h:352
@ kHasLocalHashMember
Definition: TClass.h:95
@ kHasNameMapNode
Definition: TClass.h:104
@ kIgnoreTObjectStreamer
Definition: TClass.h:96
@ kUnloaded
Definition: TClass.h:97
@ kHasCustomStreamerMember
Definition: TClass.h:105
@ kWarned
Definition: TClass.h:103
@ kStartWithTObject
Definition: TClass.h:102
@ kClassSaved
Definition: TClass.h:94
@ kIsTObject
Definition: TClass.h:99
@ kIsEmulation
Definition: TClass.h:101
@ kIsForeign
Definition: TClass.h:100
@ kReservedLoading
Definition: TClass.h:92
std::atomic< TListOfDataMembers * > fUsingData
Definition: TClass.h:203
TListOfFunctions * GetMethodList()
Return (create an empty one if needed) the list of functions.
Definition: TClass.cxx:4348
void ResetMenuList()
Resets the menu list to it's standard value.
Definition: TClass.cxx:4236
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:2955
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:6731
static TClass * LoadClassCustom(const char *requestedname, Bool_t silent)
Helper function used by TClass::GetClass().
Definition: TClass.cxx:5794
UInt_t GetHeapInstanceCount() const
Definition: TClass.h:464
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:63
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...
Definition: TDictionary.h:167
EMemberSelection
Kinds of members to include in lists.
Definition: TDictionary.h:215
const void * DeclId_t
Definition: TDictionary.h:223
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...
Definition: TListOfEnums.h:33
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:44
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:37
Mother of all ROOT objects.
Definition: TObject.h:37
virtual void Dump() const
Dump contents of object on stdout.
Definition: TObject.cxx:268
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
Definition: TObject.h:187
EStatusBits
Definition: TObject.h:57
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.
Definition: TStreamerInfo.h:39
Basic string class.
Definition: TString.h:136
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.
Definition: TVirtualMutex.h:32
Abstract Interface class describing Streamer information for one class.
TText * text
TLine * line
TClass * GetClassHelper(Bool_t, Bool_t, std::true_type)
Definition: TClass.h:619
double T(double x)
Definition: ChebyshevPol.h:34
static const std::string name("name")
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
Definition: RNumpyDS.hxx:30
void *(* NewArrFunc_t)(Long_t size, void *arena)
Definition: Rtypes.h:109
void(* DirAutoAdd_t)(void *, TDirectory *)
Definition: Rtypes.h:113
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
Definition: Rtypes.h:115
void(* DesFunc_t)(void *)
Definition: Rtypes.h:112
void *(* NewFunc_t)(void *)
Definition: Rtypes.h:108
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:5862
void(* DelFunc_t)(void *)
Definition: Rtypes.h:110
ESTLType
Definition: ESTLType.h:28
EFunctionMatchMode
Definition: TDictionary.h:160
@ kConversionMatch
Definition: TDictionary.h:162
TClass * GetClass(T *)
Definition: TClass.h:658
void ResetClassVersion(TClass *, const char *, Short_t)
Global function to update the version number.
void(* DelArrFunc_t)(void *)
Definition: Rtypes.h:111
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
Definition: Rtypes.h:114
const char * ObjectPtr
static const char * what
Definition: stlLoader.cc:6
static TClass * GetClass(Bool_t load, Bool_t silent)
Definition: TClass.h:626
TVirtualStreamerInfo * GetAllocator() const
Definition: TClass.h:149
TVirtualStreamerInfo * fAllocator
Definition: TClass.h:143
ObjectPtr(void *ptr=nullptr, TVirtualStreamerInfo *allocator=nullptr)
Definition: TClass.h:145
void * GetPtr() const
Definition: TClass.h:147
auto * l
Definition: textangle.C:4