16#ifndef SIMICS_DETAIL_EVENT_HELPER_H
17#define SIMICS_DETAIL_EVENT_HELPER_H
19#include <simics/base/event.h>
28#define EVENT_HELPER(cls, m, f) \
29 simics::detail::event_helper<decltype(&cls::m), cls>::template f<&cls::m>
31#define EVENT_CALLBACK(cls, m) \
32 simics::detail::event_helper<decltype(&cls::m), cls>::event_class_ptr(), \
33 EVENT_HELPER(cls, m, callback)
35#define EVENT_CLS_VAR(cls, m) \
36 EVENT_CALLBACK(cls, m), EVENT_HELPER(cls, m, destroy), \
37 EVENT_HELPER(cls, m, get_value), EVENT_HELPER(cls, m, set_value), \
38 EVENT_HELPER(cls, m, describe)
40template <
typename T,
typename O,
typename C>
43 static void callback(conf_object_t *obj,
void *data) {
44 (simics::from_obj<C>(obj)->*R).callback(data);
48 static void destroy(conf_object_t *obj,
void *data) {
49 (simics::from_obj<C>(obj)->*R).destroy(data);
53 static attr_value_t
get_value(conf_object_t *obj,
void *data) {
54 return (simics::from_obj<C>(obj)->*R).get_value(data);
58 static void *
set_value(conf_object_t *obj, attr_value_t value) {
59 return (simics::from_obj<C>(obj)->*R).set_value(value);
63 static char *
describe(conf_object_t *obj,
void *data) {
64 return (simics::from_obj<C>(obj)->*R).describe(data);
77 return event_class_ptr_impl<T>(0);
Definition: after-bank.h:33
static attr_value_t get_value(conf_object_t *obj, void *data)
Definition: event-helper.h:53
static void * set_value(conf_object_t *obj, attr_value_t value)
Definition: event-helper.h:58
static event_class_t ** event_class_ptr()
Definition: event-helper.h:76
static char * describe(conf_object_t *obj, void *data)
Definition: event-helper.h:63
static void callback(conf_object_t *obj, void *data)
Definition: event-helper.h:43
static event_class_t ** event_class_ptr_impl(...)
Definition: event-helper.h:73
static auto event_class_ptr_impl(int) -> decltype(&U::event_cls)
Definition: event-helper.h:69
static void destroy(conf_object_t *obj, void *data)
Definition: event-helper.h:48
Definition: event-helper.h:26