16#ifndef SIMICS_ATTRIBUTE_H
17#define SIMICS_ATTRIBUTE_H
19#include <simics/base/conf-object.h>
31#define GET_MACRO(_1, _2, NAME, ...) NAME
42#define ATTR_GETTER(...) \
43 IMPL(GET_MACRO(__VA_ARGS__, _G_DUAL, _G_SINGLE)(__VA_ARGS__))
44#define ATTR_SETTER(...) \
45 IMPL(GET_MACRO(__VA_ARGS__, _S_DUAL, _S_SINGLE)(__VA_ARGS__))
46#define ATTR_CLS_VAR(CLASS, VAR) \
47 simics::AttributeAccessor<CLASS, decltype(&CLASS::VAR), &CLASS::VAR>()
49#define ATTR_TYPE_STR(VAR) simics::attr_type_str<decltype(VAR)>()
53using attr_getter = std::add_pointer_t<attr_value_t(conf_object_t *)>;
54using attr_setter = std::add_pointer_t<set_error_t(conf_object_t *,
60template <
typename CLASS,
typename MEMBER, MEMBER m>
62 static_assert(std::is_member_object_pointer<MEMBER>::value,
63 "type MEMBER is not a member object pointer type");
66 :
getter(detail::attr_getter_helper_dual<
67 MEMBER, CLASS>::template f<m>),
68 setter(detail::attr_setter_helper_dual<
69 MEMBER, CLASS>::template f<m>) {}
101 (
getter &&
setter) ? Sim_Attr_Optional : Sim_Attr_Pseudo) {}
106 template <
typename CLASS,
typename MEMBER, MEMBER m>
109 attr_attr_t
attr = Sim_Attr_Optional)
116 virtual const std::string &
name()
const {
120 virtual const std::string &
type()
const {
124 virtual const std::string &
desc()
const {
136 virtual attr_attr_t
attr()
const {
173 virtual const std::string &
name()
const {
177 virtual const std::string &
type()
const {
181 virtual const std::string &
desc()
const {
193 virtual attr_attr_t
attr()
const {
Represents a Simics attribute.
Definition: attribute.h:79
virtual attr_setter setter() const
Definition: attribute.h:132
virtual const std::string & name() const
Definition: attribute.h:116
virtual const std::string & desc() const
Definition: attribute.h:124
virtual attr_getter getter() const
Definition: attribute.h:128
Attribute(Attribute &&)=default
Attribute(const std::string &name, const std::string &type, const std::string &desc, AttributeAccessor< CLASS, MEMBER, m > ref, attr_attr_t attr=Sim_Attr_Optional)
Definition: attribute.h:107
virtual ~Attribute()=default
virtual attr_attr_t attr() const
Definition: attribute.h:136
virtual const std::string & type() const
Definition: attribute.h:120
Attribute(const std::string &name, const std::string &type, const std::string &desc, attr_getter getter, attr_setter setter, attr_attr_t attr)
Definition: attribute.h:92
Attribute(const std::string &name, const std::string &type, const std::string &desc, attr_getter getter, attr_setter setter)
Definition: attribute.h:98
Represents a Simics class attribute.
Definition: attribute.h:152
virtual cls_attr_setter setter() const
Definition: attribute.h:189
virtual const std::string & name() const
Definition: attribute.h:173
ClassAttribute(const std::string &name, const std::string &type, const std::string &desc, cls_attr_getter getter, cls_attr_setter setter, attr_attr_t attr)
Definition: attribute.h:167
std::add_pointer_t< set_error_t(conf_class_t *, attr_value_t *)> cls_attr_setter
Definition: attribute.h:156
virtual const std::string & desc() const
Definition: attribute.h:181
virtual const std::string & type() const
Definition: attribute.h:177
std::add_pointer_t< attr_value_t(conf_class_t *)> cls_attr_getter
Definition: attribute.h:154
virtual attr_attr_t attr() const
Definition: attribute.h:193
virtual cls_attr_getter getter() const
Definition: attribute.h:185
Definition: after-bank.h:33
std::add_pointer_t< attr_value_t(conf_object_t *)> attr_getter
Definition: attribute.h:53
std::add_pointer_t< set_error_t(conf_object_t *, attr_value_t *)> attr_setter
Definition: attribute.h:55
A container of get and set callbacks for a class member variable.
Definition: attribute.h:61
attr_setter setter
Definition: attribute.h:72
attr_getter getter
Definition: attribute.h:71
AttributeAccessor()
Definition: attribute.h:65