28 class TGlobal :
public TDictionary {
31 DataMemberInfo_t *fInfo;
34 TGlobal(DataMemberInfo_t *info =
nullptr);
35 TGlobal (
const TGlobal &);
36 TGlobal &operator=(
const TGlobal &);
39 virtual Int_t GetArrayDim()
const;
40 virtual DeclId_t GetDeclId()
const;
41 virtual Int_t GetMaxIndex(Int_t dim)
const;
42 virtual void *GetAddress()
const;
43 virtual const char *GetTypeName()
const;
44 virtual const char *GetFullTypeName()
const;
45 virtual Bool_t IsValid();
46 virtual Long_t Property()
const;
47 virtual bool Update(DataMemberInfo_t *info);
53 class TGlobalMappedFunction :
public TGlobal {
55 typedef void *(*GlobalFunc_t)();
56 typedef std::function<void *()> GlobalFunctor_t;
58 TGlobalMappedFunction(
const char *name,
const char *type, GlobalFunc_t funcPtr);
60 virtual ~TGlobalMappedFunction() =
default;
61 Int_t GetArrayDim()
const override {
return 0; }
62 DeclId_t GetDeclId()
const override {
return (DeclId_t)(fFuncPtr); }
63 Int_t GetMaxIndex(Int_t )
const override {
return -1; }
64 void *GetAddress()
const override {
return !fFunctor ? (*fFuncPtr)() : fFunctor(); }
65 const char *GetTypeName()
const override {
return GetTitle(); }
66 const char *GetFullTypeName()
const override {
return GetTitle(); }
67 Long_t Property()
const override {
return 0; }
68 bool Update(DataMemberInfo_t * )
override {
return false; }
70 static void Add(TGlobalMappedFunction *gmf);
72 template <
typename GlobFunc>
73 static void MakeFunctor(
const char *name,
const char *type, GlobFunc &func)
75 auto glob =
new TGlobalMappedFunction(name, type, (GlobalFunc_t)((
void *)&func));
76 glob->fFunctor = [&func] {
78 return (
void *)(&res);
83 template <
typename GlobFunc>
84 static void MakeFunctor(
const char *name,
const char *type, GlobFunc &func, GlobalFunctor_t functor)
86 auto glob =
new TGlobalMappedFunction(name, type, (GlobalFunc_t)((
void *)&func));
87 glob->fFunctor = functor;
92 GlobalFunc_t fFuncPtr{
nullptr};
94 GlobalFunctor_t fFunctor;
96 TGlobalMappedFunction &operator=(
const TGlobal &) =
delete;
99 static TList &GetEarlyRegisteredGlobals();