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;
108 typedef void *(*NewFunc_t)(
void *);
121 const char *dfil,
const char *ifil,
138 template <
class T> TGenericClassInfo *GetClassInfo(
const T* t) {
139 TGenericClassInfo *GenerateInitInstance(
const T*);
140 return CreateInitInstance(t);
154 const std::type_info &info,
159 const char *dfil,
const char *ifil,
166 const std::type_info &info,
177 const char *dfil,
const char *ifil,
198namespace ROOT {
namespace Internal {
203 static void SetInstance(::ROOT::TGenericClassInfo& R__instance,
205 static void SetName(
const std::string&
name, std::string& nameMember);
215 static void *
New(
void *
p) {
return p ?
new(
p)
T :
new T; };
217 return p ?
new(
p)
T[nElements] :
new T[nElements]; }
222 static ::TVirtualIsAProxy* isa_proxy = new ::TInstrumentedIsAProxy<T>(
nullptr);
223 static ::ROOT::TGenericClassInfo
227 &T::Dictionary, isa_proxy, 0,
sizeof(
T) );
238 static std::string
gName;
241 return gName.c_str();
252 template <
typename T>
257 template <
typename T>
269#define _ClassDefBase_(name, id, virtual_keyword, overrd) \
271 static_assert(std::is_integral<decltype(id)>::value, \
272 "ClassDef(Inline) macro: the specified class version number is not an integer."); \
273 virtual_keyword Bool_t CheckTObjectHashConsistency() const overrd \
275 static std::atomic<UChar_t> recurseBlocker(0); \
276 if (R__likely(recurseBlocker >= 2)) { \
277 return ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency; \
278 } else if (recurseBlocker == 1) { \
280 } else if (recurseBlocker++ == 0) { \
281 ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency = \
282 ::ROOT::Internal::HasConsistentHashMember(_QUOTE_(name)) || \
283 ::ROOT::Internal::HasConsistentHashMember(*IsA()); \
285 return ::ROOT::Internal::THashConsistencyHolder<decltype(*this)>::fgHashConsistency; \
291 static constexpr Version_t Class_Version() { return id; } \
292 virtual_keyword TClass *IsA() const overrd \
293 { return name::Class(); } \
294 virtual_keyword void ShowMembers(TMemberInspector &insp) const overrd \
296 ::ROOT::Class_ShowMembers(name::Class(), this, insp); \
298 void StreamerNVirtual(TBuffer &ClassDef_StreamerNVirtual_b) { name::Streamer(ClassDef_StreamerNVirtual_b); } \
299 static const char *DeclFileName() { return __FILE__; }
301#define _ClassDefOutline_(name,id, virtual_keyword, overrd) \
302 _ClassDefBase_(name,id, virtual_keyword, overrd) \
305 static atomic_TClass_ptr fgIsA; \
307 static int ImplFileLine(); \
308 static const char *ImplFileName(); \
309 static const char *Class_Name(); \
310 static TClass *Dictionary(); \
311 static TClass *Class(); \
312 virtual_keyword void Streamer(TBuffer&) overrd;
314#define _ClassDefInline_(name, id, virtual_keyword, overrd) \
315 _ClassDefBase_(name, id, virtual_keyword, overrd) public : \
316 static int ImplFileLine() { return -1; } \
317 static const char *ImplFileName() { return nullptr; } \
318 static const char *Class_Name() \
320 return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Name(); \
322 static TClass *Dictionary() \
324 return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Dictionary(); \
326 static TClass *Class() \
328 return ::ROOT::Internal::ClassDefGenerateInitInstanceLocalInjector<name>::Class(); \
330 virtual_keyword void Streamer(TBuffer &R__b) overrd \
332 ::ROOT::Internal::DefaultStreamer(R__b, name::Class(), this); \
335#define ClassDef(name,id) \
336 _ClassDefOutline_(name,id,virtual,) \
337 static int DeclFileLine() { return __LINE__; }
339#define ClassDefOverride(name,id) \
340 _ClassDefOutline_(name,id,,override) \
341 static int DeclFileLine() { return __LINE__; }
343#define ClassDefNV(name,id) \
344 _ClassDefOutline_(name,id,,) \
345 static int DeclFileLine() { return __LINE__; }
347#define ClassDefInline(name,id) \
348 _ClassDefInline_(name,id,virtual,) \
349 static int DeclFileLine() { return __LINE__; }
351#define ClassDefInlineOverride(name,id) \
352 _ClassDefInline_(name,id,,override) \
353 static int DeclFileLine() { return __LINE__; }
355#define ClassDefInlineNV(name,id) \
356 _ClassDefInline_(name,id,,) \
357 static int DeclFileLine() { return __LINE__; }
361#define R__UseDummy(name) \
362 class _NAME2_(name,_c) { public: _NAME2_(name,_c)() { if (name) { } } }
364#define ClassImpUnique(name,key) \
366 TGenericClassInfo *GenerateInitInstance(const name*); \
368 static int _R__UNIQUE_(_NAME2_(R__dummyint,key)) __attribute__((unused)) = \
369 GenerateInitInstance((name*)0x0)->SetImplFile(__FILE__, __LINE__); \
370 R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyint,key))); \
375#define ClassImp(name) ClassImpUnique(name,default)
378#define NamespaceImpUnique(name,key) \
380 namespace ROOTDict { \
382 ::ROOT::TGenericClassInfo *GenerateInitInstance(); \
384 static int _R__UNIQUE_(_NAME2_(R__dummyint,key)) = \
385 GenerateInitInstance()->SetImplFile(__FILE__, __LINE__); \
386 R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyint,key))); \
391#define NamespaceImp(name) NamespaceImpUnique(name,default)
402#define ClassDefT(name,id) \
403 _ClassDefOutline_(name,id,virtual,) \
404 static int DeclFileLine() { return __LINE__; }
406#define ClassDefTNV(name,id) \
407 _ClassDefOutline_(name,id,virtual,) \
408 static int DeclFileLine() { return __LINE__; }
411#define ClassDefT2(name,Tmpl)
413#define templateClassImpUnique(name, key) \
416 _R__UNIQUE_(_NAME2_(R__dummyholder, key)) = ::ROOT::RegisterClassTemplate(_QUOTE_(name), __FILE__, __LINE__); \
418 R__UseDummy(_R__UNIQUE_(_NAME2_(R__dummyholder, key))); \
420#define templateClassImp(name) templateClassImpUnique(name,default)
422#define ClassImpT(name,Tmpl) templateClassImp(name)
429#define ClassDef2T2(name,Tmpl1,Tmpl2)
430#define ClassImp2T(name,Tmpl1,Tmpl2) templateClassImp(name)
438#define ClassDef3T2(name,Tmpl1,Tmpl2,Tmpl3)
439#define ClassImp3T(name,Tmpl1,Tmpl2,Tmpl3) templateClassImp(name)
444#define RootClassVersion(name,VersionNumber) \
446 TGenericClassInfo *GenerateInitInstance(const name*); \
448 static Short_t _R__UNIQUE_(R__dummyVersionNumber) = \
449 GenerateInitInstance((name*)0x0)->SetVersion(VersionNumber); \
451 R__UseDummy(_R__UNIQUE_(R__dummyVersionNumber)); \
454#define RootStreamer(name,STREAMER) \
457 TGenericClassInfo *GenerateInitInstance(const name*); \
459 static Short_t _R__UNIQUE_(R__dummyStreamer) = \
460 GenerateInitInstance((name*)0x0)->SetStreamer(STREAMER); \
462 R__UseDummy(_R__UNIQUE_(R__dummyStreamer)); \
472# define _R_PragmaStr(x) _Pragma(#x)
473# define R__LOAD_LIBRARY(LIBRARY) _R_PragmaStr(cling load ( #LIBRARY ))
474# define R__ADD_INCLUDE_PATH(PATH) _R_PragmaStr(cling add_include_path ( #PATH ))
475# define R__ADD_LIBRARY_PATH(PATH) _R_PragmaStr(cling add_library_path ( #PATH ))
476#elif defined(R__WIN32)
477# define _R_PragmaStr(x) __pragma(#x)
478# define R__LOAD_LIBRARY(LIBRARY) _R_PragmaStr(comment(lib, #LIBRARY))
479# define R__ADD_INCLUDE_PATH(PATH) _R_PragmaStr(comment(path, #PATH))
480# define R__ADD_LIBRARY_PATH(PATH) _R_PragmaStr(comment(path, #PATH))
489# define R__LOAD_LIBRARY(LIBRARY)
490# define R__ADD_INCLUDE_PATH(PATH)
491# define R__ADD_LIBRARY_PATH(PATH)
496# define R__CLING_PTRCHECK(ONOFF) __attribute__((annotate("__cling__ptrcheck(" #ONOFF ")")))
498# 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 *)
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 constexpr Version_t Class_Version()
static const char * Class_Name()
static const char * DeclFileName()
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)())
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
void Unregister(const char *classname) const override
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
virtual void Unregister(const char *classname) 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.
R__EXTERN PyObject * gName
void(off) SmallVectorTemplateBase< T
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)
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
void(* DirAutoAdd_t)(void *, TDirectory *)
void(* ResetAfterMergeFunc_t)(void *, TFileMergeInfo *)
void(* DesFunc_t)(void *)
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 AddClassAlternate(const char *normName, const char *alternate)
Global function called by GenerateInitInstance.
void RemoveClass(const char *cname)
Global function called by the dtor of a class's init class (see the ClassImp macro).
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 *)
static Bool_t fgHashConsistency