20 #ifndef ATTRIBUTE_ACCESSOR_HELPER_H
21 #define ATTRIBUTE_ACCESSOR_HELPER_H
30 template <
typename V,
typename T1>
32 Ptr<const AttributeAccessor>
38 template <
typename V,
typename T1,
typename T2>
40 Ptr<const AttributeAccessor>
59 template <
typename T,
typename U>
66 const U *value =
dynamic_cast<const U *
> (&val);
71 T *obj =
dynamic_cast<T *
> (object);
76 return DoSet (obj, value);
80 U *value =
dynamic_cast<U *
> (&val);
85 const T *obj =
dynamic_cast<const T *
> (object);
90 return DoGet (obj, value);
94 virtual bool DoSet (T *
object,
const U *v)
const = 0;
95 virtual bool DoGet (
const T *
object, U *v)
const = 0;
98 template <
typename V,
typename T,
typename U>
100 Ptr<const AttributeAccessor>
106 MemberVariable (U T::*memberVariable)
108 m_memberVariable (memberVariable)
111 virtual bool DoSet (T *
object,
const V *v)
const {
113 bool ok = v->GetAccessor (tmp);
118 (
object->*m_memberVariable) = tmp;
121 virtual bool DoGet (
const T *
object, V *v)
const {
122 v->Set (object->*m_memberVariable);
125 virtual bool HasGetter (
void)
const {
128 virtual bool HasSetter (
void)
const {
132 U T::*m_memberVariable;
137 template <
typename V,
typename T,
typename U>
139 Ptr<const AttributeAccessor>
145 MemberMethod (U (T::*getter)(
void)
const)
150 virtual bool DoSet (T *
object,
const V *v)
const {
153 virtual bool DoGet (
const T *
object, V *v)
const {
154 v->
Set ((object->*m_getter)());
157 virtual bool HasGetter (
void)
const {
160 virtual bool HasSetter (
void)
const {
163 U (T::*m_getter)(void)
const;
169 template <
typename V,
typename T,
typename U>
171 Ptr<const AttributeAccessor>
177 MemberMethod (
void (T::*setter)(U))
182 virtual bool DoSet (T *
object,
const V *v)
const {
184 bool ok = v->GetAccessor (tmp);
189 (
object->*m_setter)(tmp);
192 virtual bool DoGet (
const T *
object, V *v)
const {
195 virtual bool HasGetter (
void)
const {
198 virtual bool HasSetter (
void)
const {
201 void (T::*m_setter)(U);
206 template <
typename W,
typename T,
typename U,
typename V>
208 Ptr<const AttributeAccessor>
210 V (T::*getter)(
void)
const)
215 MemberMethod (
void (T::*setter)(U),
216 V (T::*getter)(
void)
const)
222 virtual bool DoSet (T *
object,
const W *v)
const {
224 bool ok = v->GetAccessor (tmp);
229 (
object->*m_setter)(tmp);
232 virtual bool DoGet (
const T *
object, W *v)
const {
233 v->
Set ((object->*m_getter)());
236 virtual bool HasGetter (
void)
const {
239 virtual bool HasSetter (
void)
const {
242 void (T::*m_setter)(U);
243 V (T::*m_getter)(void)
const;
248 template <
typename W,
typename T,
typename U,
typename V>
250 Ptr<const AttributeAccessor>
252 void (T::*setter)(U))
254 return DoMakeAccessorHelperTwo<W> (setter, getter);
257 template <
typename W,
typename T,
typename U,
typename V>
259 Ptr<const AttributeAccessor>
261 V (T::*getter)(
void)
const)
266 MemberMethod (
bool (T::*setter)(U),
267 V (T::*getter)(
void)
const)
273 virtual bool DoSet (T *
object,
const W *v)
const {
275 bool ok = v->GetAccessor (tmp);
280 ok = (
object->*m_setter)(tmp);
283 virtual bool DoGet (
const T *
object, W *v)
const {
284 v->
Set ((object->*m_getter)());
287 virtual bool HasGetter (
void)
const {
290 virtual bool HasSetter (
void)
const {
293 bool (T::*m_setter)(U);
294 V (T::*m_getter)(void)
const;
299 template <
typename W,
typename T,
typename U,
typename V>
301 Ptr<const AttributeAccessor>
303 void (T::*setter)(U))
305 return DoMakeAccessorHelperTwo<W> (setter, getter);
308 template <
typename V,
typename T1>
310 Ptr<const AttributeAccessor>
313 return DoMakeAccessorHelperOne<V> (a1);
316 template <
typename V,
typename T1,
typename T2>
318 Ptr<const AttributeAccessor>
321 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