26#ifndef R__LESS_INCLUDES
41#define __attribute__(unused)
85#define BIT(n) (1ULL << (n))
86#define SETBIT(n,i) ((n) |= BIT(i))
87#define CLRBIT(n,i) ((n) &= ~BIT(i))
88#define TESTBIT(n,i) ((Bool_t)(((n) & BIT(i)) != 0))
107 class TGenericClassInfo;
109 typedef void *(*NewFunc_t)(
void *);
140 template <
class T> TGenericClassInfo *GetClassInfo(
const T* t) {
156 const std::type_info &
info,
168 const std::type_info &
info,
200namespace ROOT {
namespace Internal {
217 static void *
New(
void *
p) {
return p ?
new(
p) T :
new T; };
224 static ::TVirtualIsAProxy*
isa_proxy = new ::TInstrumentedIsAProxy<T>(
nullptr);
225 static ::ROOT::TGenericClassInfo
227 T::DeclFileName(), T::DeclFileLine(),
229 &T::Dictionary,
isa_proxy, 0,
sizeof(T) );
240 static std::string gName;
243 return gName.c_str();
254 template <
typename T>
259 template <
typename T>
271#define _ClassDefBase_(name, id, virtual_keyword, overrd) \
273 static_assert(std::is_integral<decltype(id)>::value, \
274 "ClassDef(Inline) macro: the specified class version number is not an integer."); \
275 virtual_keyword Bool_t CheckTObjectHashConsistency() const overrd \
277 static std::atomic<UChar_t> recurseBlocker(0); \
278 if (R__likely(recurseBlocker >= 2)) { \
279 return ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency; \
280 } else if (recurseBlocker == 1) { \
282 } else if (recurseBlocker++ == 0) { \
283 ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency = \
284 ::ROOT::Internal::HasConsistentHashMember(_QUOTE_(name)) || \
285 ::ROOT::Internal::HasConsistentHashMember(*IsA()); \
287 return ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency; \
293 static constexpr Version_t Class_Version() { return id; } \
294 virtual_keyword TClass *IsA() const overrd \
295 { return name::Class(); } \
296 virtual_keyword void ShowMembers(TMemberInspector &insp) const overrd \
298 ::ROOT::Class_ShowMembers(name::Class(), this, insp); \
300 void StreamerNVirtual(TBuffer &ClassDef_StreamerNVirtual_b) { name::Streamer(ClassDef_StreamerNVirtual_b); } \
301 static const char *DeclFileName() { return __FILE__; }
303#define _ClassDefOutline_(name,id, virtual_keyword, overrd) \
304 _ClassDefBase_(name,id, virtual_keyword, overrd) \
307 static atomic_TClass_ptr fgIsA; \
309 static int ImplFileLine(); \
310 static const char *ImplFileName(); \
311 static const char *Class_Name(); \
312 static TClass *Dictionary(); \
313 static TClass *Class(); \
314 virtual_keyword void Streamer(TBuffer&) overrd;
316#define _ClassDefInline_(name, id, virtual_keyword, overrd) \
317 _ClassDefBase_(name, id, virtual_keyword, overrd) public : \
318 static int ImplFileLine() { return -1; } \
319 static const char *ImplFileName() { return nullptr; } \
320 static const char *Class_Name() \
322 return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Name(); \
324 static TClass *Dictionary() \
326 return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Dictionary(); \
328 static TClass *Class() \
330 return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Class(); \
332 virtual_keyword void Streamer(TBuffer &R__b) overrd \
334 ::ROOT::Internal::DefaultStreamer(R__b, name::Class(), this); \
337#define ClassDef(name,id) \
338 _ClassDefOutline_(name,id,virtual,) \
339 static int DeclFileLine() { return __LINE__; }
341#define ClassDefOverride(name,id) \
342 _ClassDefOutline_(name,id,,override) \
343 static int DeclFileLine() { return __LINE__; }
345#define ClassDefNV(name,id) \
346 _ClassDefOutline_(name,id,,) \
347 static int DeclFileLine() { return __LINE__; }
349#define ClassDefInline(name,id) \
350 _ClassDefInline_(name,id,virtual,) \
351 static int DeclFileLine() { return __LINE__; }
353#define ClassDefInlineOverride(name,id) \
354 _ClassDefInline_(name,id,,override) \
355 static int DeclFileLine() { return __LINE__; }
357#define ClassDefInlineNV(name,id) \
358 _ClassDefInline_(name,id,,) \
359 static int DeclFileLine() { return __LINE__; }
363#define R__UseDummy(name) \
364 class _NAME2_(name,_c) { public: _NAME2_(name,_c)() { if (name) { } } }
366#define ClassImpUnique(name,key) \
368 TGenericClassInfo *GenerateInitInstance(const name*); \
370 static int _R__UNIQUE_(_NAME2_(R__dummyint,key)) __attribute__((unused)) = \
371 GenerateInitInstance((name*)0x0)->SetImplFile(__FILE__, __LINE__); \
372 R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyint,key))); \
377#define ClassImp(name) ClassImpUnique(name,default)
380#define NamespaceImpUnique(name,key) \
382 namespace ROOTDict { \
384 ::ROOT::TGenericClassInfo *GenerateInitInstance(); \
386 static int _R__UNIQUE_(_NAME2_(R__dummyint,key)) = \
387 GenerateInitInstance()->SetImplFile(__FILE__, __LINE__); \
388 R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyint,key))); \
393#define NamespaceImp(name) NamespaceImpUnique(name,default)
404#define ClassDefT(name,id) \
405 _ClassDefOutline_(name,id,virtual,) \
406 static int DeclFileLine() { return __LINE__; }
408#define ClassDefTNV(name,id) \
409 _ClassDefOutline_(name,id,virtual,) \
410 static int DeclFileLine() { return __LINE__; }
413#define ClassDefT2(name,Tmpl)
415#define templateClassImpUnique(name, key) \
418 _R__UNIQUE_(_NAME2_(R__dummyholder, key)) = ::ROOT::RegisterClassTemplate(_QUOTE_(name), __FILE__, __LINE__); \
420 R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyholder, key))); \
422#define templateClassImp(name) templateClassImpUnique(name,default)
424#define ClassImpT(name,Tmpl) templateClassImp(name)
431#define ClassDef2T2(name,Tmpl1,Tmpl2)
432#define ClassImp2T(name,Tmpl1,Tmpl2) templateClassImp(name)
440#define ClassDef3T2(name,Tmpl1,Tmpl2,Tmpl3)
441#define ClassImp3T(name,Tmpl1,Tmpl2,Tmpl3) templateClassImp(name)
446#define RootClassVersion(name,VersionNumber) \
448 TGenericClassInfo *GenerateInitInstance(const name*); \
450 static Short_t _R__UNIQUE_(R__dummyVersionNumber) = \
451 GenerateInitInstance((name*)0x0)->SetVersion(VersionNumber); \
453 R__UseDummy(_R__UNIQUE_(R__dummyVersionNumber)); \
456#define RootStreamer(name,STREAMER) \
459 TGenericClassInfo *GenerateInitInstance(const name*); \
461 static Short_t _R__UNIQUE_(R__dummyStreamer) = \
462 GenerateInitInstance((name*)0x0)->SetStreamer(STREAMER); \
464 R__UseDummy(_R__UNIQUE_(R__dummyStreamer)); \
474# define _R_PragmaStr(x) _Pragma(#x)
475# define R__LOAD_LIBRARY(LIBRARY) _R_PragmaStr(cling load ( #LIBRARY ))
476# define R__ADD_INCLUDE_PATH(PATH) _R_PragmaStr(cling add_include_path ( #PATH ))
477# define R__ADD_LIBRARY_PATH(PATH) _R_PragmaStr(cling add_library_path ( #PATH ))
478#elif defined(R__WIN32)
479# define _R_PragmaStr(x) __pragma(#x)
480# define R__LOAD_LIBRARY(LIBRARY) _R_PragmaStr(comment(lib, #LIBRARY))
481# define R__ADD_INCLUDE_PATH(PATH) _R_PragmaStr(comment(path, #PATH))
482# define R__ADD_LIBRARY_PATH(PATH) _R_PragmaStr(comment(path, #PATH))
491# define R__LOAD_LIBRARY(LIBRARY)
492# define R__ADD_INCLUDE_PATH(PATH)
493# define R__ADD_LIBRARY_PATH(PATH)
498# define R__CLING_PTRCHECK(ONOFF) __attribute__((annotate("__cling__ptrcheck(" #ONOFF ")")))
500# define R__CLING_PTRCHECK(ONOFF)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
TClass *(* DictFuncPtr_t)()
TBuffer & operator<<(TBuffer &buf, const Tmpl *obj)
void(* MemberStreamerFunc_t)(TBuffer &, void *, Int_t)
void(* ShowMembersFunc_t)(const void *obj, TMemberInspector &R__insp, Bool_t isTransient)
TBuffer & operator>>(TBuffer &buf, Tmpl *&obj)
std::atomic< TClass * > atomic_TClass_ptr
void(* ClassStreamerFunc_t)(TBuffer &, void *)
void(* ClassConvStreamerFunc_t)(TBuffer &, void *, const TClass *)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
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
static void * New(void *p)
static void * NewArray(Long_t nElements, void *p)
static atomic_TClass_ptr fgIsA
static void DeleteArray(void *p)
static void Destruct(void *p)
::ROOT::TGenericClassInfo * fgGenericInfo
::ROOT::TGenericClassInfo * GenerateInitInstanceLocal()
static void Delete(void *p)
static TClass * Dictionary()
static const char * Name()
static void SetInstance(::ROOT::TGenericClassInfo &R__instance, NewFunc_t, NewArrFunc_t, DelFunc_t, DelArrFunc_t, DesFunc_t)
static void SetName(const std::string &name, std::string &nameMember)
static void SetfgIsA(atomic_TClass_ptr &isA, TClass *(*dictfun)())
void Unregister(const char *classname, TClass *cl) const override
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 override
void Register(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits) const override
virtual void Unregister(const char *classname, TClass *cl) const =0
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
virtual void Register(const char *cname, Version_t id, const std::type_info &info, DictFuncPtr_t dict, Int_t pragmabits) const =0
Buffer base class used for serializing objects.
TClass instances represent classes, structs and namespaces in the ROOT type system.
Collection abstract base class.
Describe directory structure in memory.
Abstract base class for accessing the data-members of a class.
The TNamed class is the base class for all named ROOT classes.
Mother of all ROOT objects.
Defines a common interface to inspect/change the contents of an object that represents a collection.
void DefaultStreamer(TBuffer &R__b, const TClass *cl, void *objpointer)
Default streamer implementation used by ClassDefInline to avoid requirement to include TBuffer....
const TInitBehavior * DefineBehavior(void *, void *)
Bool_t HasConsistentHashMember(TClass &clRef)
Return true is the Hash/RecursiveRemove setup is consistent, i.e.
std::string GetDemangledTypeName(const std::type_info &t)
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
void(* DirAutoAdd_t)(void *, TDirectory *)
ROOT::TClassAlt * AddClassAlternate(const char *normName, const char *alternate)
Global function called by GenerateInitInstance.
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
void(* DesFunc_t)(void *)
void RemoveClass(const char *cname, TClass *cl)
Global function called by the dtor of a class's init class (see the ClassImp macro).
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).
void(* DelFunc_t)(void *)
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's init class (see the ClassImp macro).
TNamed * RegisterClassTemplate(const char *name, const char *file, Int_t line)
Global function to register the implementation file and line of a class template (i....
void *(* NewArrFunc_t)(Long_t size, void *arena)
void Class_ShowMembers(TClass *cl, const void *obj, TMemberInspector &)
Indirect call to the implementation of ShowMember allowing [forward] declaration with out a full defi...
void ResetClassVersion(TClass *, const char *, Short_t)
Global function to update the version number.
Short_t SetClassVersion(RootClass *)
void(* DelArrFunc_t)(void *)
void *(* NewFunc_t)(void *)
Long64_t(* MergeFunc_t)(void *, TCollection *, TFileMergeInfo *)
void RemoveClassAlternate(ROOT::TClassAlt *)
static Bool_t fgHashConsistency