DD4hep  1.32.0
Detector Description Toolkit for High Energy Physics
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Callback.h
Go to the documentation of this file.
1 //==========================================================================
2 // AIDA Detector description implementation
3 //--------------------------------------------------------------------------
4 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
5 // All rights reserved.
6 //
7 // For the licensing terms see $DD4hepINSTALL/LICENSE.
8 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
9 //
10 // Author : M.Frank
11 //
12 //==========================================================================
13 #ifndef DD4HEP_CALLBACK_H
14 #define DD4HEP_CALLBACK_H
15 
16 // C/C++ include files
17 #include <typeinfo>
18 #include <vector>
19 
21 namespace dd4hep {
22 
23 
25 
37  class Callback {
38  public:
39  typedef unsigned long (*func_t)(void* obj, const void* fun, const void* args[]);
41  struct mfunc_t {
42  void *first, *second;
43  };
44  typedef unsigned long ulong;
45 
46  void* par;
49 
52  : par(0), call(0) {
53  func.first = func.second = 0;
54  }
56  Callback(void* p)
57  : par(p), call(0) {
58  func.first = func.second = 0;
59  }
61  Callback(const void* p)
62  : par((void*)p), call(0) {
63  func.first = func.second = 0;
64  }
66  Callback(void* p, void* mf, func_t c)
67  : par(p), call(c) {
68  func = *(mfunc_t*) mf;
69  }
71  operator bool() const {
72  return (call && par && func.first);
73  }
75  unsigned long execute(const void* user_param[]) const {
76  return (*this) ? call(par, &func, user_param) : 0;
77  }
79  template <typename T> static T* cast(void* p) {
80  return (T*) p;
81  }
83  template <typename T> static const T* c_cast(const void* p) {
84  return (const T*) p;
85  }
86 
88 
96  template <typename T> class Wrapper {
97  public:
98  typedef T pmf_t;
100  union Functor {
103  Functor(const void* f) {
104  ptr = *(mfunc_t*) f;
105  }
107  pmf = f;
108  }
109  };
110  static mfunc_t pmf(pmf_t f) {
111  const Functor func(f);
112  return func.ptr;
113  }
114  };
115 
117  template <typename T> const Callback& _make(ulong (*fptr)(void* o, const void* f, const void* u[]), T pmf) {
119  typename Wrapper<T>::Functor f(pmf);
120  func = f.ptr;
121  call = fptr;
122  return *this;
123  }
125  template <typename R, typename T> const Callback& make(R (T::*pmf)()) {
126  typedef R (T::*pfunc_t)();
127  struct _Wrapper : public Wrapper<pfunc_t> {
128  static ulong call(void* o, const void* f, const void*[]) {
129  return (ulong) (cast<T>(o)->*(typename Wrapper<pfunc_t>::Functor(f).pmf))();
130  }
131  };
132  return _make(_Wrapper::call, pmf);
133  }
135  template <typename R, typename T> const Callback& make(R (T::*pmf)() const) {
136  typedef R (T::*pfunc_t)() const;
137  struct _Wrapper : public Wrapper<pfunc_t> {
138  static ulong call(void* o, const void* f, const void*[]) {
139  return (ulong) (cast<T>(o)->*(typename Wrapper<pfunc_t>::Functor(f).pmf))();
140  }
141  };
142  return _make(_Wrapper::call, pmf);
143  }
145  template <typename T> const Callback& make(void (T::*pmf)()) {
146  typedef void (T::*pfunc_t)() const;
147  struct _Wrapper : public Wrapper<pfunc_t> {
148  static ulong call(void* o, const void* f, const void*[]) {
149  (cast<T>(o)->*(typename Wrapper<pfunc_t>::Functor(f).pmf))();
150  return 1;
151  }
152  };
153  return _make(_Wrapper::call, pmf);
154  }
156  template <typename T> const Callback& make(void (T::*pmf)() const) {
157  typedef void (T::*pfunc_t)() const;
158  struct _Wrapper : public Wrapper<pfunc_t> {
159  static ulong call(void* o, const void* f, const void*[]) {
160  (cast<T>(o)->*(typename Wrapper<pfunc_t>::Functor(f).pmf))();
161  return 1;
162  }
163  };
164  return _make(_Wrapper::call, pmf);
165  }
166 
168  template <typename R, typename T, typename A> const Callback& make(R (T::*pmf)(A)) {
170  typedef R (T::*pfunc_t)(A);
171  struct _Wrapper : public Wrapper<pfunc_t> {
172  static ulong call(void* o, const void* f, const void* u[]) {
173  return (ulong) (cast<T>(o)->*(typename Wrapper<pfunc_t>::Functor(f).pmf))((A) u[0]);
174  }
175  };
176  return _make(_Wrapper::call, pmf);
177  }
179  template <typename R, typename T, typename A> const Callback& make(R (T::*pmf)(A) const) {
180  typedef R (T::*pfunc_t)(A) const;
181  struct _Wrapper : public Wrapper<pfunc_t> {
182  static ulong call(void* o, const void* f, const void* u[]) {
183  return (ulong) (cast<T>(o)->*(typename Wrapper<pfunc_t>::Functor(f).pmf))((A) u[0]);
184  }
185  };
186  return _make(_Wrapper::call, pmf);
187  }
189  template <typename T, typename A> const Callback& make(void (T::*pmf)(A)) {
190  typedef void (T::*pfunc_t)(const A);
191  struct _Wrapper : public Wrapper<pfunc_t> {
192  static ulong call(void* o, const void* f, const void* u[]) {
193  (cast<T>(o)->*(typename Wrapper<pfunc_t>::Functor(f).pmf))((A) u[0]);
194  return 1;
195  }
196  };
197  return _make(_Wrapper::call, pmf);
198  }
200  template <typename T, typename A> const Callback& make(void (T::*pmf)(A) const) {
201  typedef void (T::*pfunc_t)(const A) const;
202  struct _Wrapper : public Wrapper<pfunc_t> {
203  static ulong call(void* o, const void* f, const void* u[]) {
204  (cast<T>(o)->*(typename Wrapper<pfunc_t>::Functor(f).pmf))((A) u[0]);
205  return 1;
206  }
207  };
208  return _make(_Wrapper::call, pmf);
209  }
210 
213  template <typename R, typename T, typename A0, typename A1> const Callback& make(R (T::*pmf)(A0, A1)) {
215  typedef R (T::*pfunc_t)(A0, A1);
216  typedef Wrapper<pfunc_t> _W;
217  struct _Wrapper : public _W {
218  static ulong call(void* o, const void* f, const void* u[]) {
219  return (ulong) (cast<T>(o)->*(typename _W::Functor(f).pmf))((A0) u[0], (A1) u[1]);
220  }
221  };
222  return _make(_Wrapper::call, pmf);
223  }
225  template <typename R, typename T, typename A0, typename A1> const Callback& make(R (T::*pmf)(A0, A1) const) {
226  typedef R (T::*pfunc_t)(A0, A1);
227  typedef Wrapper<pfunc_t> _W;
228  struct _Wrapper : public _W {
229  static ulong call(void* o, const void* f, const void* u[]) {
230  return (ulong) (cast<T>(o)->*(typename _W::Functor(f).pmf))((A0) u[0], (A1) u[1]);
231  }
232  };
233  return _make(_Wrapper::call, pmf);
234  }
236  template <typename T, typename A0, typename A1> const Callback& make(void (T::*pmf)(A0, A1)) {
237  typedef void (T::*pfunc_t)(A0, A1);
238  typedef Wrapper<pfunc_t> _W;
239  struct _Wrapper : public _W {
240  static ulong call(void* o, const void* f, const void* u[]) {
241  (cast<T>(o)->*(typename _W::Functor(f).pmf))((A0) u[0], (A1) u[1]);
242  return 1;
243  }
244  };
245  return _make(_Wrapper::call, pmf);
246  }
248  template <typename T, typename A0, typename A1> const Callback& make(void (T::*pmf)(A0, A1) const) {
249  typedef void (T::*pfunc_t)(A0, A1);
250  typedef Wrapper<pfunc_t> _W;
251  struct _Wrapper : public _W {
252  static ulong call(void* o, const void* f, const void* u[]) {
253  (cast<T>(o)->*(typename _W::Functor(f).pmf))((A0) u[0], (A1) u[1]);
254  return 1;
255  }
256  };
257  return _make(_Wrapper::call, pmf);
258  }
259 
262  template <typename R, typename T, typename A0, typename A1, typename A2> const Callback& make(R (T::*pmf)(A0, A1, A2)) {
264  typedef R (T::*pfunc_t)(A0, A1, A2);
265  typedef Wrapper<pfunc_t> _W;
266  struct _Wrapper : public _W {
267  static ulong call(void* o, const void* f, const void* u[]) {
268  return (ulong) (cast<T>(o)->*(typename _W::Functor(f).pmf))((A0) u[0], (A1) u[1], (A2) u[2]);
269  }
270  };
271  return _make(_Wrapper::call, pmf);
272  }
274  template <typename R, typename T, typename A0, typename A1, typename A2> const Callback& make(R (T::*pmf)(A0, A1, A2) const) {
275  typedef R (T::*pfunc_t)(A0, A1, A2);
276  typedef Wrapper<pfunc_t> _W;
277  struct _Wrapper : public _W {
278  static ulong call(void* o, const void* f, const void* u[]) {
279  return (ulong) (cast<T>(o)->*(typename _W::Functor(f).pmf))((A0) u[0], (A1) u[1], (A2) u[2]);
280  }
281  };
282  return _make(_Wrapper::call, pmf);
283  }
285  template <typename T, typename A0, typename A1, typename A2> const Callback& make(void (T::*pmf)(A0, A1, A2)) {
286  typedef void (T::*pfunc_t)(A0, A1, A2);
287  typedef Wrapper<pfunc_t> _W;
288  struct _Wrapper : public _W {
289  static ulong call(void* o, const void* f, const void* u[]) {
290  (cast<T>(o)->*(typename _W::Functor(f).pmf))((A0) u[0], (A1) u[1], (A2) u[2]);
291  return 1;
292  }
293  };
294  return _make(_Wrapper::call, pmf);
295  }
297  template <typename T, typename A0, typename A1, typename A2> const Callback& make(void (T::*pmf)(A0, A1, A2) const) {
298  typedef void (T::*pfunc_t)(A0, A1, A2);
299  typedef Wrapper<pfunc_t> _W;
300  struct _Wrapper : public _W {
301  static ulong call(void* o, const void* f, const void* u[]) {
302  (cast<T>(o)->*(typename _W::Functor(f).pmf))((A0) u[0], (A1) u[1], (A2) u[2]);
303  return 1;
304  }
305  };
306  return _make(_Wrapper::call, pmf);
307  }
308 
309  template <typename T> static Callback make(void* p, T pmf) {
310  return Callback(p).make(pmf);
311  }
312 
313  template <typename P, typename R, typename T> static T* dyn_cast(P* p, R (T::*)()) {
314  return dynamic_cast<T*>(p);
315  }
316  template <typename P, typename R, typename T> static const T* dyn_cast(const P* p, R (T::*)() const) {
317  return dynamic_cast<const T*>(p);
318  }
319 
320  template <typename P, typename R, typename T, typename A> static T* dyn_cast(P* p, R (T::*)(A)) {
321  return dynamic_cast<T*>(p);
322  }
323  template <typename P, typename R, typename T, typename A> static const T* dyn_cast(const P* p, R (T::*)(A) const) {
324  return dynamic_cast<const T*>(p);
325  }
326  };
327 
329 
339  typedef std::vector<Callback> Callbacks;
340  enum Location { FRONT, END };
344  }
347  : callbacks(c.callbacks) {
348  }
351  if ( this != & c ) callbacks = c.callbacks;
352  return *this;
353  }
354 
355  //template <typename TYPE, typename R, typename OBJECT>
356  // CallbackSequence(const std::vector<TYPE*>& objects, R (TYPE::value_type::*pmf)()) {
357  //}
358  bool empty() const {
359  return callbacks.empty();
360  }
362  void clear() {
363  callbacks.clear();
364  }
366  void add(const Callback& cb,Location where) {
367  if ( where == CallbackSequence::FRONT )
368  callbacks.insert(callbacks.begin(),cb);
369  else
370  callbacks.insert(callbacks.end(),cb);
371  }
373  void add(const Callback& cb) {
374  callbacks.insert(callbacks.end(),cb);
375  }
377  void operator()() const;
379  template <typename A0> void operator()(A0 a0) const;
381  template <typename A0, typename A1> void operator()(A0 a0, A1 a1) const;
383  template <typename A0, typename A1, typename A2> void operator()(A0 a0, A1 a1, A2 a2) const;
385  static void checkTypes(const std::type_info& typ1, const std::type_info& typ2, void* test);
386 
388  template <typename TYPE, typename R, typename OBJECT>
390  void add(TYPE* pointer, R (OBJECT::*pmf)(),Location where=CallbackSequence::END) {
391  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
392  add(Callback(pointer).make(pmf),where);
393  }
395  template <typename TYPE, typename R, typename OBJECT>
396  void add(TYPE* pointer, R (OBJECT::*pmf)() const,Location where=CallbackSequence::END) {
397  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
398  add(Callback(pointer).make(pmf),where);
399  }
401  template <typename TYPE, typename OBJECT>
402  void add(TYPE* pointer, void (OBJECT::*pmf)(),Location where=CallbackSequence::END) {
403  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
404  add(Callback(pointer).make(pmf),where);
405  }
407  template <typename TYPE, typename OBJECT>
408  void add(TYPE* pointer, void (OBJECT::*pmf)() const,Location where=CallbackSequence::END) {
409  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
410  add(Callback(pointer).make(pmf),where);
411  }
412 
414  template <typename TYPE, typename R, typename OBJECT, typename A>
416  void add(TYPE* pointer, R (OBJECT::*pmf)(A),Location where=CallbackSequence::END) {
417  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
418  add(Callback(pointer).make(pmf),where);
419  }
421  template <typename TYPE, typename OBJECT, typename A>
422  void add(TYPE* pointer, void (OBJECT::*pmf)(A),Location where=CallbackSequence::END) {
423  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
424  add(Callback(pointer).make(pmf),where);
425  }
427  template <typename TYPE, typename R, typename OBJECT, typename A>
428  void add(TYPE* pointer, R (OBJECT::*pmf)(A) const,Location where=CallbackSequence::END) {
429  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
430  add(Callback(pointer).make(pmf),where);
431  }
433  template <typename TYPE, typename OBJECT, typename A>
434  void add(TYPE* pointer, void (OBJECT::*pmf)(A) const,Location where=CallbackSequence::END) {
435  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
436  add(Callback(pointer).make(pmf),where);
437  }
438 
439 
441  template <typename TYPE, typename R, typename OBJECT, typename A1, typename A2>
443  void add(TYPE* pointer, R (OBJECT::*pmf)(A1, A2),Location where=CallbackSequence::END) {
444  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
445  add(Callback(pointer).make(pmf),where);
446  }
448  template <typename TYPE, typename R, typename OBJECT, typename A1, typename A2>
449  void add(TYPE* pointer, R (OBJECT::*pmf)(A1, A2) const,Location where=CallbackSequence::END) {
450  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
451  add(Callback(pointer).make(pmf),where);
452  }
454  template <typename TYPE, typename OBJECT, typename A1, typename A2>
455  void add(TYPE* pointer, void (OBJECT::*pmf)(A1, A2),Location where=CallbackSequence::END) {
456  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
457  add(Callback(pointer).make(pmf),where);
458  }
460  template <typename TYPE, typename OBJECT, typename A1, typename A2>
461  void add(TYPE* pointer, void (OBJECT::*pmf)(A1, A2) const,Location where=CallbackSequence::END) {
462  checkTypes(typeid(TYPE), typeid(OBJECT), dynamic_cast<OBJECT*>(pointer));
463  add(Callback(pointer).make(pmf),where);
464  }
465  };
466 
468  inline void CallbackSequence::operator()() const {
469  if (!callbacks.empty()) {
470  const void* args[1] = { 0 };
471  for (Callbacks::const_iterator i = callbacks.begin(); i != callbacks.end(); ++i)
472  (*i).execute(args);
473  }
474  }
476  template <typename A0> inline
477  void CallbackSequence::operator()(A0 a0) const {
478  if (!callbacks.empty()) {
479  const void* args[1] = { a0 };
480  for (Callbacks::const_iterator i = callbacks.begin(); i != callbacks.end(); ++i)
481  (*i).execute(args);
482  }
483  }
485  template <typename A0, typename A1> inline
486  void CallbackSequence::operator()(A0 a0, A1 a1) const {
487  if (!callbacks.empty()) {
488  const void* args[2] = { a0, a1 };
489  for (Callbacks::const_iterator i = callbacks.begin(); i != callbacks.end(); ++i)
490  (*i).execute(args);
491  }
492  }
494  template <typename A0, typename A1, typename A2> inline
495  void CallbackSequence::operator()(A0 a0, A1 a1, A2 a2) const {
496  if (!callbacks.empty()) {
497  const void* args[3] = { a0, a1, a2 };
498  for (Callbacks::const_iterator i = callbacks.begin(); i != callbacks.end(); ++i)
499  (*i).execute(args);
500  }
501  }
502 
503 } // End namespace dd4hep
504 #endif // DD4HEP_CALLBACK_H
dd4hep::CallbackSequence::add
void add(TYPE *pointer, void(OBJECT::*pmf)(A) const, Location where=CallbackSequence::END)
Add a new callback to a const void member function and 1 argument.
Definition: Callback.h:434
dd4hep::CallbackSequence::add
void add(TYPE *pointer, void(OBJECT::*pmf)(), Location where=CallbackSequence::END)
Add a new callback to a void member function with no arguments.
Definition: Callback.h:402
dd4hep::Callback::ulong
unsigned long ulong
Definition: Callback.h:44
dd4hep::Callback::dyn_cast
static const T * dyn_cast(const P *p, R(T::*)() const)
Definition: Callback.h:316
dd4hep::Callback::mfunc_t
Structure definition to store callback related data.
Definition: Callback.h:41
dd4hep::Callback::Callback
Callback(const void *p)
Constructor with object initialization.
Definition: Callback.h:61
dd4hep::CallbackSequence::add
void add(TYPE *pointer, void(OBJECT::*pmf)(A), Location where=CallbackSequence::END)
Add a new callback to a void member function and 1 argument.
Definition: Callback.h:422
dd4hep::Callback::_make
const Callback & _make(ulong(*fptr)(void *o, const void *f, const void *u[]), T pmf)
Callback setup function for Callbacks with member functions taking no arguments.
Definition: Callback.h:118
dd4hep::CallbackSequence::operator=
CallbackSequence & operator=(const CallbackSequence &c)
Assignment operator.
Definition: Callback.h:350
dd4hep::CallbackSequence::FRONT
@ FRONT
Definition: Callback.h:340
dd4hep::Callback::Wrapper::pmf
static mfunc_t pmf(pmf_t f)
Definition: Callback.h:110
dd4hep::CallbackSequence::Location
Location
Definition: Callback.h:340
dd4hep::Callback::make
const Callback & make(void(T::*pmf)(A0, A1))
Callback setup function for Callbacks with const void member functions taking 2 arguments.
Definition: Callback.h:236
dd4hep::CallbackSequence::checkTypes
static void checkTypes(const std::type_info &typ1, const std::type_info &typ2, void *test)
Check the compatibility of two typed objects. The test is the result of a dynamic_cast.
Definition: Callback.cpp:19
dd4hep::CallbackSequence::add
void add(const Callback &cb, Location where)
Generically Add a new callback to the sequence depending on the location arguments.
Definition: Callback.h:366
dd4hep::Callback::dyn_cast
static T * dyn_cast(P *p, R(T::*)(A))
Definition: Callback.h:320
dd4hep::CallbackSequence::CallbackSequence
CallbackSequence(const CallbackSequence &c)
Copy constructor.
Definition: Callback.h:346
dd4hep::CallbackSequence::add
void add(TYPE *pointer, R(OBJECT::*pmf)() const, Location where=CallbackSequence::END)
Add a new callback to a const member function with explicit return type and no arguments.
Definition: Callback.h:396
dd4hep::CallbackSequence::add
void add(TYPE *pointer, void(OBJECT::*pmf)() const, Location where=CallbackSequence::END)
Add a new callback to a const void member function and no arguments.
Definition: Callback.h:408
dd4hep::Callback::make
const Callback & make(R(T::*pmf)(A0, A1, A2) const)
Callback setup function for Callbacks with const member functions with explicit return type taking 3 ...
Definition: Callback.h:274
dd4hep::CallbackSequence::add
void add(TYPE *pointer, R(OBJECT::*pmf)(A1, A2), Location where=CallbackSequence::END)
Add a new callback to a member function with explicit return type and 2 arguments.
Definition: Callback.h:443
dd4hep::Callback::func
mfunc_t func
Definition: Callback.h:48
dd4hep::Callback::Wrapper::pmf_t
T pmf_t
Definition: Callback.h:98
dd4hep::Callback::make
const Callback & make(R(T::*pmf)())
Callback setup function for Callbacks with member functions with explicit return type taking no argum...
Definition: Callback.h:125
dd4hep::CallbackSequence::END
@ END
Definition: Callback.h:340
dd4hep::CallbackSequence::add
void add(TYPE *pointer, R(OBJECT::*pmf)(), Location where=CallbackSequence::END)
Add a new callback to a member function with explicit return type and no arguments.
Definition: Callback.h:390
dd4hep::CallbackSequence
Definition of an actor on sequences of callbacks.
Definition: Callback.h:338
dd4hep::CallbackSequence::CallbackSequence
CallbackSequence()
Default constructor.
Definition: Callback.h:343
dd4hep::Callback::make
static Callback make(void *p, T pmf)
Definition: Callback.h:309
dd4hep::Callback::Callback
Callback(void *p)
Constructor with object initialization.
Definition: Callback.h:56
dd4hep::CallbackSequence::add
void add(TYPE *pointer, void(OBJECT::*pmf)(A1, A2) const, Location where=CallbackSequence::END)
Add a new callback to a const void member function with 2 arguments.
Definition: Callback.h:461
dd4hep::Callback
Definition of the generic callback structure for member functions.
Definition: Callback.h:37
dd4hep::Callback::make
const Callback & make(void(T::*pmf)(A0, A1, A2))
Callback setup function for Callbacks with const void member functions taking 3 arguments.
Definition: Callback.h:285
dd4hep::CallbackSequence::add
void add(TYPE *pointer, R(OBJECT::*pmf)(A), Location where=CallbackSequence::END)
Add a new callback to a member function with explicit return type and 1 argument.
Definition: Callback.h:416
dd4hep::Callback::call
func_t call
Definition: Callback.h:47
dd4hep::Callback::dyn_cast
static T * dyn_cast(P *p, R(T::*)())
Definition: Callback.h:313
dd4hep::CallbackSequence::add
void add(const Callback &cb)
Generically Add a new callback to the sequence depending on the location arguments.
Definition: Callback.h:373
dd4hep::CallbackSequence::operator()
void operator()() const
Execution overload for callbacks with no arguments.
Definition: Callback.h:468
dd4hep::Callback::make
const Callback & make(void(T::*pmf)(A0, A1) const)
Callback setup function for Callbacks with const void member functions taking 2 arguments.
Definition: Callback.h:248
dd4hep::CallbackSequence::clear
void clear()
Clear the sequence and remove all callbacks.
Definition: Callback.h:362
dd4hep::Callback::Wrapper::Functor::Functor
Functor(const void *f)
Definition: Callback.h:103
dd4hep::CallbackSequence::add
void add(TYPE *pointer, R(OBJECT::*pmf)(A) const, Location where=CallbackSequence::END)
Add a new callback to a const member function with explicit return type and 1 argument.
Definition: Callback.h:428
dd4hep::Callback::dyn_cast
static const T * dyn_cast(const P *p, R(T::*)(A) const)
Definition: Callback.h:323
dd4hep::Callback::par
void * par
Definition: Callback.h:46
dd4hep::Callback::Callback
Callback(void *p, void *mf, func_t c)
Initializing constructor.
Definition: Callback.h:66
dd4hep::Callback::make
const Callback & make(void(T::*pmf)(A0, A1, A2) const)
Callback setup function for Callbacks with const void member functions taking 3 arguments.
Definition: Callback.h:297
dd4hep::CallbackSequence::empty
bool empty() const
Definition: Callback.h:358
dd4hep::Callback::Wrapper
Wrapper around a C++ member function pointer.
Definition: Callback.h:96
dd4hep::Callback::Wrapper::Functor::Functor
Functor(pmf_t f)
Definition: Callback.h:106
dd4hep::Callback::make
const Callback & make(void(T::*pmf)())
Callback setup function for Callbacks with void member functions taking no arguments.
Definition: Callback.h:145
dd4hep::Callback::make
const Callback & make(R(T::*pmf)(A) const)
Callback setup function for Callbacks with const member functions with explicit return type taking 1 ...
Definition: Callback.h:179
dd4hep::Callback::Wrapper::Functor
Union to store pointers to member functions in callback objects.
Definition: Callback.h:100
dd4hep::Callback::execute
unsigned long execute(const void *user_param[]) const
Execute the callback with the required number of user parameters.
Definition: Callback.h:75
dd4hep::Callback::mfunc_t::first
void * first
Definition: Callback.h:42
dd4hep
Namespace for the AIDA detector description toolkit.
Definition: AlignmentsCalib.h:28
dd4hep::Callback::Callback
Callback()
Default constructor.
Definition: Callback.h:51
dd4hep::CallbackSequence::add
void add(TYPE *pointer, R(OBJECT::*pmf)(A1, A2) const, Location where=CallbackSequence::END)
Add a new callback to a const member function with explicit return type and 2 arguments.
Definition: Callback.h:449
dd4hep::CallbackSequence::add
void add(TYPE *pointer, void(OBJECT::*pmf)(A1, A2), Location where=CallbackSequence::END)
Add a new callback to a void member function with 2 arguments.
Definition: Callback.h:455
dd4hep::Callback::cast
static T * cast(void *p)
Template cast function used internally by the wrapper for type conversion to the object's type.
Definition: Callback.h:79
dd4hep::Callback::make
const Callback & make(void(T::*pmf)(A))
Callback setup function for Callbacks with void member functions taking 1 argument.
Definition: Callback.h:189
dd4hep::CallbackSequence::Callbacks
std::vector< Callback > Callbacks
Definition: Callback.h:339
dd4hep::Callback::make
const Callback & make(R(T::*pmf)(A0, A1) const)
Callback setup function for Callbacks with const member functions with explicit return type taking 2 ...
Definition: Callback.h:225
dd4hep::Callback::mfunc_t::second
void * second
Definition: Callback.h:42
dd4hep::Callback::c_cast
static const T * c_cast(const void *p)
Template const cast function used internally by the wrapper for type conversion to the object's type.
Definition: Callback.h:83
dd4hep::Callback::make
const Callback & make(R(T::*pmf)() const)
Callback setup function for Callbacks with const member functions with explicit return type taking no...
Definition: Callback.h:135
dd4hep::Callback::Wrapper::Functor::pmf
pmf_t pmf
Definition: Callback.h:102
dd4hep::Callback::make
const Callback & make(void(T::*pmf)(A) const)
Callback setup function for Callbacks with const void member functions taking 1 argument.
Definition: Callback.h:200
dd4hep::CallbackSequence::callbacks
Callbacks callbacks
Definition: Callback.h:341
dd4hep::Callback::Wrapper::Functor::ptr
mfunc_t ptr
Definition: Callback.h:101
dd4hep::Callback::make
const Callback & make(void(T::*pmf)() const)
Callback setup function for Callbacks with const void member functions taking no arguments.
Definition: Callback.h:156
dd4hep::Callback::func_t
unsigned long(* func_t)(void *obj, const void *fun, const void *args[])
Definition: Callback.h:39