20 #ifndef ATTRIBUTE_ACCESSOR_HELPER_H
21 #define ATTRIBUTE_ACCESSOR_HELPER_H
30 template <
typename V,
typename T1>
31 Ptr<const AttributeAccessor>
37 template <
typename V,
typename T1,
typename T2>
38 Ptr<const AttributeAccessor>
57 template <
typename T,
typename U>
64 const U *value =
dynamic_cast<const U *
> (&val);
69 T *obj =
dynamic_cast<T *
> (object);
74 return DoSet (obj, value);
78 U *value =
dynamic_cast<U *
> (&val);
83 const T *obj =
dynamic_cast<const T *
> (object);
88 return DoGet (obj, value);
92 virtual bool DoSet (T *
object,
const U *v)
const = 0;
93 virtual bool DoGet (
const T *
object, U *v)
const = 0;
96 template <
typename V,
typename T,
typename U>
97 Ptr<const AttributeAccessor>
103 MemberVariable (U T::*memberVariable)
105 m_memberVariable (memberVariable)
108 virtual bool DoSet (T *
object,
const V *v)
const {
110 bool ok = v->GetAccessor (tmp);
115 (
object->*m_memberVariable) = tmp;
118 virtual bool DoGet (
const T *
object,
V *v)
const {
119 v->Set (object->*m_memberVariable);
122 virtual bool HasGetter (
void)
const {
125 virtual bool HasSetter (
void)
const {
129 U T::*m_memberVariable;
134 template <
typename V,
typename T,
typename U>
135 Ptr<const AttributeAccessor>
141 MemberMethod (U (T::*getter)(
void)
const)
146 virtual bool DoSet (T *
object,
const V *v)
const {
149 virtual bool DoGet (
const T *
object,
V *v)
const {
150 v->
Set ((object->*m_getter)());
153 virtual bool HasGetter (
void)
const {
156 virtual bool HasSetter (
void)
const {
159 U (T::*m_getter)(void)
const;
165 template <
typename V,
typename T,
typename U>
166 Ptr<const AttributeAccessor>
172 MemberMethod (
void (T::*setter)(U))
177 virtual bool DoSet (T *
object,
const V *v)
const {
179 bool ok = v->GetAccessor (tmp);
184 (
object->*m_setter)(tmp);
187 virtual bool DoGet (
const T *
object,
V *v)
const {
190 virtual bool HasGetter (
void)
const {
193 virtual bool HasSetter (
void)
const {
196 void (T::*m_setter)(U);
201 template <
typename W,
typename T,
typename U,
typename V>
202 Ptr<const AttributeAccessor>
204 V (T::*getter)(
void)
const)
209 MemberMethod (
void (T::*setter)(U),
210 V (T::*getter)(
void)
const)
216 virtual bool DoSet (T *
object,
const W *v)
const {
218 bool ok = v->GetAccessor (tmp);
223 (
object->*m_setter)(tmp);
226 virtual bool DoGet (
const T *
object, W *v)
const {
227 v->
Set ((object->*m_getter)());
230 virtual bool HasGetter (
void)
const {
233 virtual bool HasSetter (
void)
const {
236 void (T::*m_setter)(U);
237 V (T::*m_getter)(void)
const;
242 template <
typename W,
typename T,
typename U,
typename V>
243 Ptr<const AttributeAccessor>
245 void (T::*setter)(U))
247 return DoMakeAccessorHelperTwo<W> (setter, getter);
250 template <
typename W,
typename T,
typename U,
typename V>
251 Ptr<const AttributeAccessor>
253 V (T::*getter)(
void)
const)
258 MemberMethod (
bool (T::*setter)(U),
259 V (T::*getter)(
void)
const)
265 virtual bool DoSet (T *
object,
const W *v)
const {
267 bool ok = v->GetAccessor (tmp);
272 ok = (
object->*m_setter)(tmp);
275 virtual bool DoGet (
const T *
object, W *v)
const {
276 v->
Set ((object->*m_getter)());
279 virtual bool HasGetter (
void)
const {
282 virtual bool HasSetter (
void)
const {
285 bool (T::*m_setter)(U);
286 V (T::*m_getter)(void)
const;
291 template <
typename W,
typename T,
typename U,
typename V>
292 Ptr<const AttributeAccessor>
294 void (T::*setter)(U))
296 return DoMakeAccessorHelperTwo<W> (setter, getter);
299 template <
typename V,
typename T1>
300 Ptr<const AttributeAccessor>
303 return DoMakeAccessorHelperOne<V> (a1);
306 template <
typename V,
typename T1,
typename T2>
307 Ptr<const AttributeAccessor>
310 return DoMakeAccessorHelperTwo<V> (a1, a2);
Ptr< const AttributeAccessor > DoMakeAccessorHelperOne(U T::*memberVariable)
smart pointer class similar to boost::intrusive_ptr
Hold a value for an Attribute.
Ptr< const AttributeAccessor > DoMakeAccessorHelperTwo(void(T::*setter)(U), V(T::*getter)(void) const)
implement the ns-3 type and attribute system
virtual bool Get(const ObjectBase *object, AttributeValue &val) const
Ptr< const AttributeAccessor > MakeAccessorHelper(T1 a1)
virtual bool DoSet(T *object, const U *v) const =0
allow setting and getting the value of an attribute.
TypeTraits< typename TypeTraits< T >::ReferencedType >::NonConstType Result
virtual bool Set(ObjectBase *object, const AttributeValue &val) const
Type trait reference values.
virtual bool DoGet(const T *object, U *v) const =0