Logo ROOT   6.14/05
Reference Guide
Rtypes.h
Go to the documentation of this file.
1 /* @(#)root/base:$Id$ */
2 
3 /*************************************************************************
4  * Copyright (C) 1995-2014, Rene Brun and Fons Rademakers. *
5  * All rights reserved. *
6  * *
7  * For the licensing terms see $ROOTSYS/LICENSE. *
8  * For the list of contributors see $ROOTSYS/README/CREDITS. *
9  *************************************************************************/
10 
11 #ifndef ROOT_Rtypes
12 #define ROOT_Rtypes
13 
14 //////////////////////////////////////////////////////////////////////////
15 // //
16 // Rtypes //
17 // //
18 // Basic types used by ROOT; ClassDef macros. //
19 // //
20 //////////////////////////////////////////////////////////////////////////
21 
22 
23 #include "RtypesCore.h"
24 #include "DllImport.h"
25 
26 #include "snprintf.h" // part of stdio.h on systems that have it
27 #include "strlcpy.h" // part of string.h on systems that have it
28 
29 #include <atomic>
30 #include <stdio.h>
31 #include <string.h>
32 #include <typeinfo>
33 
34 #if defined(R__WIN32)
35 #define __attribute__(unused)
36 #endif
37 
38 //---- forward declared class types --------------------------------------------
39 
40 class TClass;
41 class TBuffer;
42 class TDirectory;
43 class TMemberInspector;
44 class TObject;
45 class TNamed;
46 class TCollection;
47 class TFileMergeInfo;
48 class TString;
49 
50 //Moved from TSystem.
53  kMAXPATHLEN = 8192,
54  kBUFFERSIZE = 8192,
55  kItimerResolution = 10 // interval-timer resolution in ms
56 };
57 
58 enum EColor { kWhite =0, kBlack =1, kGray=920,
59  kRed =632, kGreen =416, kBlue=600, kYellow=400, kMagenta=616, kCyan=432,
60  kOrange=800, kSpring=820, kTeal=840, kAzure =860, kViolet =880, kPink=900 };
61 
62 // There is several streamer concepts.
63 class TClassStreamer; // Streamer functor for a class
64 class TMemberStreamer; // Streamer functor for a data member
65 typedef void (*ClassStreamerFunc_t)(TBuffer&, void*); // Streamer function for a class
66 typedef void (*ClassConvStreamerFunc_t)(TBuffer&, void*, const TClass*); // Streamer function for a class with conversion.
67 typedef void (*MemberStreamerFunc_t)(TBuffer&, void*, Int_t); // Streamer function for a data member
68 
69 // This class is used to implement proxy around collection classes.
71 
72 typedef void (*VoidFuncPtr_t)(); //pointer to void function
73 typedef TClass* (*DictFuncPtr_t)(); //pointer to dictionary function
74 // NOTE: the previous name must be changed.
75 
76 //--- bit manipulation ---------------------------------------------------------
77 
78 #define BIT(n) (1ULL << (n))
79 #define SETBIT(n,i) ((n) |= BIT(i))
80 #define CLRBIT(n,i) ((n) &= ~BIT(i))
81 #define TESTBIT(n,i) ((Bool_t)(((n) & BIT(i)) != 0))
82 
83 
84 //---- debug global ------------------------------------------------------------
85 
87 
88 
89 //---- ClassDef macros ---------------------------------------------------------
90 
91 typedef void (*ShowMembersFunc_t)(const void *obj, TMemberInspector &R__insp, Bool_t isTransient);
92 class TVirtualIsAProxy;
93 typedef TClass *(*IsAGlobalFunc_t)(const TClass*, const void *obj);
94 
95 // TBuffer.h declares and implements the following 2 operators
96 template <class Tmpl> TBuffer &operator>>(TBuffer &buf, Tmpl *&obj);
97 template <class Tmpl> TBuffer &operator<<(TBuffer &buf, const Tmpl *obj);
98 
99 // This might get used if we implement setting a class version.
100 // template <class RootClass> Short_t GetClassVersion(RootClass *);
101 
102 namespace ROOT {
103 
104  class TGenericClassInfo;
105  typedef void *(*NewFunc_t)(void *);
106  typedef void *(*NewArrFunc_t)(Long_t size, void *arena);
107  typedef void (*DelFunc_t)(void *);
108  typedef void (*DelArrFunc_t)(void *);
109  typedef void (*DesFunc_t)(void *);
110  typedef void (*DirAutoAdd_t)(void *, TDirectory *);
111  typedef Long64_t (*MergeFunc_t)(void *, TCollection *, TFileMergeInfo *);
113 
114  template <class RootClass> Short_t SetClassVersion(RootClass *);
115 
116  extern TClass *CreateClass(const char *cname, Version_t id,
117  const std::type_info &info, TVirtualIsAProxy *isa,
118  const char *dfil, const char *ifil,
119  Int_t dl, Int_t il);
120  extern void AddClass(const char *cname, Version_t id, const std::type_info &info,
121  DictFuncPtr_t dict, Int_t pragmabits);
122  extern void RemoveClass(const char *cname);
123  extern void ResetClassVersion(TClass*, const char*, Short_t);
124  extern void AddClassAlternate(const char *normName, const char *alternate);
125 
126  extern TNamed *RegisterClassTemplate(const char *name,
127  const char *file, Int_t line);
128 
129  extern void Class_ShowMembers(TClass *cl, const void *obj, TMemberInspector&);
130 
131 #if 0
132  // This function is only implemented in the dictionary file.
133  // The parameter is 'only' for overloading resolution.
134  // Used to be a template <class T> TGenericClassInfo *GenerateInitInstance(const T*);
135  template <class T> TGenericClassInfo *GetClassInfo(const T* t) {
136  TGenericClassInfo *GenerateInitInstance(const T*);
137  return CreateInitInstance(t);
138  };
139 #endif
140 
141  namespace Internal {
143  // This class defines the interface for the class registration and
144  // the TClass creation. To modify the default behavior, one would
145  // inherit from this class and overload ROOT::DefineBehavior().
146  // See TQObject.h and table/inc/Ttypes.h for examples.
147  public:
148  virtual ~TInitBehavior() { }
149 
150  virtual void Register(const char *cname, Version_t id,
151  const std::type_info &info,
152  DictFuncPtr_t dict, Int_t pragmabits) const = 0;
153  virtual void Unregister(const char *classname) const = 0;
154  virtual TClass *CreateClass(const char *cname, Version_t id,
155  const std::type_info &info, TVirtualIsAProxy *isa,
156  const char *dfil, const char *ifil,
157  Int_t dl, Int_t il) const = 0;
158  };
159 
161  public:
162  virtual void Register(const char *cname, Version_t id,
163  const std::type_info &info,
164  DictFuncPtr_t dict, Int_t pragmabits) const {
165  ROOT::AddClass(cname, id, info, dict, pragmabits);
166  }
167 
168  virtual void Unregister(const char *classname) const {
169  ROOT::RemoveClass(classname);
170  }
171 
172  virtual TClass *CreateClass(const char *cname, Version_t id,
173  const std::type_info &info, TVirtualIsAProxy *isa,
174  const char *dfil, const char *ifil,
175  Int_t dl, Int_t il) const {
176  return ROOT::CreateClass(cname, id, info, isa, dfil, ifil, dl, il);
177  }
178  };
179 
180  const TInitBehavior *DefineBehavior(void * /*parent_type*/,
181  void * /*actual_type*/);
182  } // namespace Internal
183 
184 } // namespace ROOT
185 
186 // The macros below use TGenericClassInfo and TInstrumentedIsAProxy, so let's
187 // ensure they are included.
188 #include "TGenericClassInfo.h"
189 
190 typedef std::atomic<TClass*> atomic_TClass_ptr;
191 
192 #include "TIsAProxy.h"
193 
194 namespace ROOT { namespace Internal {
195 
197 public:
198  // All implemented in TGenericClassInfo.cxx.
199  static void SetInstance(::ROOT::TGenericClassInfo& R__instance,
201  static void SetName(const std::string& name, std::string& nameMember);
202  static void SetfgIsA(atomic_TClass_ptr& isA, TClass*(*dictfun)());
203 };
204 
205 template <typename T>
207  public TCDGIILIBase {
209  static ::ROOT::TGenericClassInfo *fgGenericInfo;
210  public:
211  static void *New(void *p) { return p ? new(p) T : new T; };
212  static void *NewArray(Long_t nElements, void *p) {
213  return p ? new(p) T[nElements] : new T[nElements]; }
214  static void Delete(void *p) { delete ((T*)p); }
215  static void DeleteArray(void *p) { delete[] ((T*)p); }
216  static void Destruct(void *p) { ((T*)p)->~T(); }
217  static ::ROOT::TGenericClassInfo *GenerateInitInstanceLocal() {
218  static ::TVirtualIsAProxy* isa_proxy = new ::TInstrumentedIsAProxy<T>(0);
219  static ::ROOT::TGenericClassInfo
220  R__instance(T::Class_Name(), T::Class_Version(),
221  T::DeclFileName(), T::DeclFileLine(),
222  typeid(T), ::ROOT::Internal::DefineBehavior((T*)0, (T*)0),
223  &T::Dictionary, isa_proxy, 0, sizeof(T) );
224  SetInstance(R__instance, &New, &NewArray, &Delete, &DeleteArray, &Destruct);
225  return &R__instance;
226  }
227  // We need a reference to the template instance static member in a concrete function in order
228  // to force its instantiation (even before the function is actually run)
229  // Since we do have a reference to Dictionary (in T::Dictionary), using fgGenericInfo
230  // here will insure that it is initialized at process start or library load time.
231  static TClass *Dictionary() { fgIsA = fgGenericInfo->GetClass(); return fgIsA; }
232  static TClass *Class() { SetfgIsA(fgIsA, &Dictionary); return fgIsA; }
233  static const char* Name() {
234  static std::string gName;
235  if (gName.empty())
236  SetName(GetDemangledTypeName(typeid(T)), gName);
237  return gName.c_str();
238  }
239  };
240 
241  template<typename T>
243  template<typename T>
246  };
247 
248  template <typename T>
251  };
252 
253  template <typename T>
255 
256  void DefaultStreamer(TBuffer &R__b, const TClass *cl, void *objpointer);
258  Bool_t HasConsistentHashMember(const char *clName);
259 }} // namespace ROOT::Internal
260 
261 
262 // Common part of ClassDef definition.
263 // DeclFileLine() is not part of it since CINT uses that as trigger for
264 // the class comment string.
265 #define _ClassDefBase_(name, id, virtual_keyword, overrd) \
266 private: \
267  virtual_keyword Bool_t CheckTObjectHashConsistency() const overrd \
268  { \
269  static std::atomic<UChar_t> recurseBlocker(0); \
270  if (R__likely(recurseBlocker >= 2)) { \
271  return ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency; \
272  } else if (recurseBlocker == 1) { \
273  return false; \
274  } else if (recurseBlocker++ == 0) { \
275  ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency = \
276  ::ROOT::Internal::HasConsistentHashMember(_QUOTE_(name)) || \
277  ::ROOT::Internal::HasConsistentHashMember(*IsA()); \
278  ++recurseBlocker; \
279  return ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency; \
280  } \
281  return false; /* unreacheable */ \
282  } \
283  \
284 public: \
285  static Version_t Class_Version() { return id; } \
286  virtual_keyword TClass *IsA() const overrd { return name::Class(); } \
287  virtual_keyword void ShowMembers(TMemberInspector &insp) const overrd \
288  { \
289  ::ROOT::Class_ShowMembers(name::Class(), this, insp); \
290  } \
291  void StreamerNVirtual(TBuffer &ClassDef_StreamerNVirtual_b) { name::Streamer(ClassDef_StreamerNVirtual_b); } \
292  static const char *DeclFileName() { return __FILE__; }
293 
294 #define _ClassDefOutline_(name,id, virtual_keyword, overrd) \
295  _ClassDefBase_(name,id, virtual_keyword, overrd) \
296 private: \
297  static atomic_TClass_ptr fgIsA; \
298 public: \
299  static int ImplFileLine(); \
300  static const char *ImplFileName(); \
301  static const char *Class_Name(); \
302  static TClass *Dictionary(); \
303  static TClass *Class(); \
304  virtual_keyword void Streamer(TBuffer&) overrd;
305 
306 #define _ClassDefInline_(name, id, virtual_keyword, overrd) \
307  _ClassDefBase_(name, id, virtual_keyword, overrd) public : static int ImplFileLine() { return -1; } \
308  static const char *ImplFileName() { return 0; } \
309  static const char *Class_Name() \
310  { \
311  return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Name(); \
312  } \
313  static TClass *Dictionary() \
314  { \
315  return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Dictionary(); \
316  } \
317  static TClass *Class() { return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Class(); } \
318  virtual_keyword void Streamer(TBuffer &R__b) overrd { ::ROOT::Internal::DefaultStreamer(R__b, name::Class(), this); }
319 
320 #define ClassDef(name,id) \
321  _ClassDefOutline_(name,id,virtual,) \
322  static int DeclFileLine() { return __LINE__; }
323 
324 #define ClassDefOverride(name,id) \
325  _ClassDefOutline_(name,id,,override) \
326  static int DeclFileLine() { return __LINE__; }
327 
328 #define ClassDefNV(name,id) \
329  _ClassDefOutline_(name,id,,) \
330  static int DeclFileLine() { return __LINE__; }
331 
332 #define ClassDefInline(name,id) \
333  _ClassDefInline_(name,id,virtual,) \
334  static int DeclFileLine() { return __LINE__; }
335 
336 #define ClassDefInlineOverride(name,id) \
337  _ClassDefInline_(name,id,,override) \
338  static int DeclFileLine() { return __LINE__; }
339 
340 #define ClassDefInlineNV(name,id) \
341  _ClassDefInline_(name,id,,) \
342  static int DeclFileLine() { return __LINE__; }
343 
344 //#define _ClassDefInterp_(name,id) ClassDefInline(name,id)
345 
346 #define R__UseDummy(name) \
347  class _NAME2_(name,_c) { public: _NAME2_(name,_c)() { if (name) { } } }
348 
349 
350 #define ClassImpUnique(name,key) \
351  namespace ROOT { \
352  TGenericClassInfo *GenerateInitInstance(const name*); \
353  namespace { \
354  static int _R__UNIQUE_(_NAME2_(R__dummyint,key)) __attribute__((unused)) = \
355  GenerateInitInstance((name*)0x0)->SetImplFile(__FILE__, __LINE__); \
356  R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyint,key))); \
357  } \
358  }
359 #define ClassImp(name) ClassImpUnique(name,default)
360 
361 // Macro for Namespace
362 
363 #define NamespaceImpUnique(name,key) \
364  namespace name { \
365  namespace ROOT { \
366  ::ROOT::TGenericClassInfo *GenerateInitInstance(); \
367  namespace { \
368  static int _R__UNIQUE_(_NAME2_(R__dummyint,key)) = \
369  GenerateInitInstance()->SetImplFile(__FILE__, __LINE__); \
370  R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyint,key))); \
371  } \
372  } \
373  }
374 #define NamespaceImp(name) NamespaceImpUnique(name,default)
375 
376 //---- ClassDefT macros for templates with one template argument ---------------
377 // ClassDefT corresponds to ClassDef
378 // ClassDefT2 goes in the same header as ClassDefT but must be
379 // outside the class scope
380 // ClassImpT corresponds to ClassImp
381 
382 
383 // This ClassDefT is stricly redundant and is kept only for
384 // backward compatibility.
385 
386 #define ClassDefT(name,id) \
387  _ClassDefOutline_(name,id,virtual,) \
388  static int DeclFileLine() { return __LINE__; }
389 
390 #define ClassDefTNV(name,id) \
391  _ClassDefOutline_(name,id,virtual,) \
392  static int DeclFileLine() { return __LINE__; }
393 
394 
395 #define ClassDefT2(name,Tmpl)
396 
397 #define templateClassImpUnique(name, key) \
398  namespace ROOT { \
399  static TNamed * \
400  _R__UNIQUE_(_NAME2_(R__dummyholder, key)) = ::ROOT::RegisterClassTemplate(_QUOTE_(name), __FILE__, __LINE__); \
401  R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyholder, key))); \
402  }
403 #define templateClassImp(name) templateClassImpUnique(name,default)
404 
405 #define ClassImpT(name,Tmpl) templateClassImp(name)
406 
407 //---- ClassDefT macros for templates with two template arguments --------------
408 // ClassDef2T2 goes in the same header as ClassDefT but must be
409 // outside the class scope
410 // ClassImp2T corresponds to ClassImpT
411 
412 #define ClassDef2T2(name,Tmpl1,Tmpl2)
413 #define ClassImp2T(name,Tmpl1,Tmpl2) templateClassImp(name)
414 
415 
416 //---- ClassDefT macros for templates with three template arguments ------------
417 // ClassDef3T2 goes in the same header as ClassDefT but must be
418 // outside the class scope
419 // ClassImp3T corresponds to ClassImpT
420 
421 #define ClassDef3T2(name,Tmpl1,Tmpl2,Tmpl3)
422 #define ClassImp3T(name,Tmpl1,Tmpl2,Tmpl3) templateClassImp(name)
423 
424 
425 //---- Macro to set the class version of non instrumented classes --------------
426 
427 #define RootClassVersion(name,VersionNumber) \
428 namespace ROOT { \
429  TGenericClassInfo *GenerateInitInstance(const name*); \
430  static Short_t _R__UNIQUE_(R__dummyVersionNumber) = \
431  GenerateInitInstance((name*)0x0)->SetVersion(VersionNumber); \
432  R__UseDummy(_R__UNIQUE_(R__dummyVersionNumber)); \
433 }
434 
435 #define RootStreamer(name,STREAMER) \
436 namespace ROOT { \
437  TGenericClassInfo *GenerateInitInstance(const name*); \
438  static Short_t _R__UNIQUE_(R__dummyStreamer) = \
439  GenerateInitInstance((name*)0x0)->SetStreamer(STREAMER); \
440  R__UseDummy(_R__UNIQUE_(R__dummyStreamer)); \
441 }
442 
443 //---- Macro to load a library into the interpreter --------------
444 // Call as R__LOAD_LIBRARY(libEvent)
445 // This macro intentionally does not take string as argument, to
446 // prevent compilation errors with complex diagnostics due to
447 // TString BAD_DO_NOT_TRY = "lib";
448 // R__LOAD_LIBRARY(BAD_DO_NOT_TRY + "BAD_DO_NOT_TRY.so") // ERROR!
449 #ifdef __CLING__
450 # define _R_PragmaStr(x) _Pragma(#x)
451 # define R__LOAD_LIBRARY(LIBRARY) _R_PragmaStr(cling load ( #LIBRARY ))
452 # define R__ADD_INCLUDE_PATH(PATH) _R_PragmaStr(cling add_include_path ( #PATH ))
453 # define R__ADD_LIBRARY_PATH(PATH) _R_PragmaStr(cling add_library_path ( #PATH ))
454 #elif defined(R__WIN32)
455 # define _R_PragmaStr(x) __pragma(#x)
456 # define R__LOAD_LIBRARY(LIBRARY) _R_PragmaStr(comment(lib, #LIBRARY))
457 # define R__ADD_INCLUDE_PATH(PATH) _R_PragmaStr(comment(path, #PATH))
458 # define R__ADD_LIBRARY_PATH(PATH) _R_PragmaStr(comment(path, #PATH))
459 #else
460 // No way to inform linker though preprocessor :-(
461 // We could even inform the user:
462 /*
463 # define R__LOAD_LIBRARY(LIBRARY) \
464  _R_PragmaStr(message "Compiler cannot handle linking against " #LIBRARY \
465  ". Use -L and -l instead.")
466 */
467 # define R__LOAD_LIBRARY(LIBRARY)
468 # define R__ADD_INCLUDE_PATH(PATH)
469 # define R__ADD_LIBRARY_PATH(PATH)
470 #endif
471 
472 #endif
void AddClass(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits)
Global function called by the ctor of a class&#39;s init class (see the ClassImp macro).
virtual void Unregister(const char *classname) const
Definition: Rtypes.h:168
void(* ClassStreamerFunc_t)(TBuffer &, void *)
Definition: Rtypes.h:65
long long Long64_t
Definition: RtypesCore.h:69
void(* ShowMembersFunc_t)(const void *obj, TMemberInspector &R__insp, Bool_t isTransient)
Definition: Rtypes.h:91
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21
short Version_t
Definition: RtypesCore.h:61
TLine * line
void(* DelArrFunc_t)(void *)
Definition: Rtypes.h:108
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
Definition: Rtypes.h:111
Definition: Rtypes.h:59
double T(double x)
Definition: ChebyshevPol.h:34
Definition: Rtypes.h:58
Definition: Rtypes.h:58
Definition: Rtypes.h:60
Buffer base class used for serializing objects.
Definition: TBuffer.h:40
Basic string class.
Definition: TString.h:131
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
Definition: Rtypes.h:59
Definition: Rtypes.h:59
Abstract base class for accessing the data-members of a class.
ESysConstants
Definition: Rtypes.h:51
const TInitBehavior * DefineBehavior(void *, void *)
TBuffer & operator>>(TBuffer &buf, Tmpl *&obj)
Definition: TBuffer.h:378
TBuffer & operator<<(TBuffer &buf, const Tmpl *obj)
Definition: TBuffer.h:394
Definition: Rtypes.h:60
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:29
void AddClassAlternate(const char *normName, const char *alternate)
Global function called by GenerateInitInstance.
void(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
Definition: Rtypes.h:67
::ROOT::TGenericClassInfo * GenerateInitInstanceLocal()
Definition: Rtypes.h:217
void *(* NewFunc_t)(void *)
Definition: Rtypes.h:105
TClass *(* DictFuncPtr_t)()
Definition: Rtypes.h:73
Definition: Rtypes.h:60
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
Definition: Rtypes.h:66
EColor
Definition: Rtypes.h:58
Definition: Rtypes.h:58
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
Definition: Rtypes.h:112
void ResetClassVersion(TClass *, const char *, Short_t)
Global function to update the version number.
void *(* NewArrFunc_t)(Long_t size, void *arena)
Definition: Rtypes.h:106
void RemoveClass(const char *cname)
Global function called by the dtor of a class&#39;s init class (see the ClassImp macro).
Definition: Rtypes.h:60
Collection abstract base class.
Definition: TCollection.h:63
void(* VoidFuncPtr_t)()
Definition: Rtypes.h:72
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&#39; static Dictionary() method (see the ClassDef macro).
Definition: TClass.cxx:5599
short Short_t
Definition: RtypesCore.h:35
The ROOT global object gROOT contains a list of all defined classes.
Definition: TClass.h:75
std::atomic< TClass * > atomic_TClass_ptr
Definition: Rtypes.h:190
static void * NewArray(Long_t nElements, void *p)
Definition: Rtypes.h:212
Short_t SetClassVersion(RootClass *)
virtual void Unregister(const char *classname) const =0
long Long_t
Definition: RtypesCore.h:50
virtual void Register(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits) const
Definition: Rtypes.h:162
R__EXTERN PyObject * gName
Definition: PyStrings.h:33
Describe directory structure in memory.
Definition: TDirectory.h:34
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:2887
Definition: Rtypes.h:59
Mother of all ROOT objects.
Definition: TObject.h:37
void(* DelFunc_t)(void *)
Definition: Rtypes.h:107
#define R__EXTERN
Definition: DllImport.h:27
typedef void((*Func_t)())
void(* DirAutoAdd_t)(void *, TDirectory *)
Definition: Rtypes.h:110
Definition: file.py:1
Definition: Rtypes.h:60
R__EXTERN Int_t gDebug
Definition: Rtypes.h:86
Definition: Rtypes.h:59
virtual void Register(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits) const =0
void Destruct(TCppType_t type, TCppObject_t instance)
Definition: Cppyy.cxx:271
Bool_t HasConsistentHashMember(TClass &clRef)
Return true is the Hash/RecursiveRemove setup is consistent, i.e.
Definition: TClass.cxx:7021
std::string GetDemangledTypeName(const std::type_info &)
Returns a string with the demangled and normalized name for the given type.
TNamed * RegisterClassTemplate(const char *name, const char *file, Int_t line)
Global function to register the implementation file and line of a class template (i.e.
virtual 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) const =0
gr SetName("gr")
void DefaultStreamer(TBuffer &R__b, const TClass *cl, void *objpointer)
Default streamer implementation used by ClassDefInline to avoid requirement to include TBuffer...
Definition: TBuffer.cxx:28
char name[80]
Definition: TGX11.cxx:109
Definition: Rtypes.h:60
virtual 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) const
Definition: Rtypes.h:172
void Class_ShowMembers(TClass *cl, const void *obj, TMemberInspector &)
Indirect call to the implementation of ShowMember allowing [forward] declaration with out a full defi...
Definition: TClass.cxx:496
void(* DesFunc_t)(void *)
Definition: Rtypes.h:109