8#ifndef ATTRIBUTE_ACCESSOR_HELPER_H 
    9#define ATTRIBUTE_ACCESSOR_HELPER_H 
   57template <
typename V, 
typename T1>
 
  100template <
typename V, 
typename T1, 
typename T2>
 
  109#include <type_traits> 
  138template <
typename T, 
typename U>
 
  161        const U* value = 
dynamic_cast<const U*
>(&val);
 
  162        if (value == 
nullptr)
 
  166        T* obj = 
dynamic_cast<T*
>(
object);
 
  171        return DoSet(obj, value);
 
 
  188        U* value = 
dynamic_cast<U*
>(&val);
 
  189        if (value == 
nullptr)
 
  193        const T* obj = 
dynamic_cast<const T*
>(
object);
 
  198        return DoGet(obj, value);
 
 
  210    virtual bool DoSet(T* 
object, 
const U* 
v) 
const = 0;
 
  219    virtual bool DoGet(
const T* 
object, U* 
v) 
const = 0;
 
 
  236template <
typename V, 
typename T, 
typename U>
 
  248        MemberVariable(U T::* memberVariable)
 
  250              m_memberVariable(memberVariable)
 
  255        bool DoSet(T* 
object, 
const V* 
v)
 const override 
  258            bool ok = 
v->GetAccessor(tmp);
 
  263            (
object->*m_memberVariable) = tmp;
 
  267        bool DoGet(
const T* 
object, V* 
v)
 const override 
  269            v->Set(
object->*m_memberVariable);
 
  273        bool HasGetter()
 const override 
  278        bool HasSetter()
 const override 
  283        U T::* m_memberVariable; 
 
 
  301template <
typename V, 
typename T, 
typename U>
 
  302inline Ptr<const AttributeAccessor>
 
  313        MemberMethod(U (T::*getter)() 
const)
 
  320        bool DoSet(T* , 
const V* )
 const override 
  325        bool DoGet(
const T* 
object, V* 
v)
 const override 
  331        bool HasGetter()
 const override 
  336        bool HasSetter()
 const override 
  341        U (T::*m_getter)() 
const; 
 
 
  360template <
typename V, 
typename T, 
typename U>
 
  361inline Ptr<const AttributeAccessor>
 
  372        MemberMethod(
void (T::*setter)(U))
 
  379        bool DoSet(T* 
object, 
const V* 
v)
 const override 
  382            bool ok = 
v->GetAccessor(tmp);
 
  387            (
object->*m_setter)(tmp);
 
  391        bool DoGet(
const T* , V* )
 const override 
  396        bool HasGetter()
 const override 
  401        bool HasSetter()
 const override 
  406        void (T::*m_setter)(U); 
 
 
  429template <
typename W, 
typename T, 
typename U, 
typename V>
 
  430inline Ptr<const AttributeAccessor>
 
  445        MemberMethod(
void (T::*setter)(U), V (T::*getter)() 
const)
 
  453        bool DoSet(T* 
object, 
const W* 
v)
 const override 
  456            bool ok = 
v->GetAccessor(tmp);
 
  461            (
object->*m_setter)(tmp);
 
  465        bool DoGet(
const T* 
object, W* 
v)
 const override 
  471        bool HasGetter()
 const override 
  476        bool HasSetter()
 const override 
  481        void (T::*m_setter)(U);   
 
  482        V (T::*m_getter)() 
const; 
 
 
  492template <
typename W, 
typename T, 
typename U, 
typename V>
 
  493inline Ptr<const AttributeAccessor>
 
  516template <
typename W, 
typename T, 
typename U, 
typename V>
 
  517inline Ptr<const AttributeAccessor>
 
  532        MemberMethod(
bool (T::*setter)(U), V (T::*getter)() 
const)
 
  540        bool DoSet(T* 
object, 
const W* 
v)
 const override 
  543            bool ok = 
v->GetAccessor(tmp);
 
  548            ok = (
object->*m_setter)(tmp);
 
  552        bool DoGet(
const T* 
object, W* 
v)
 const override 
  558        bool HasGetter()
 const override 
  563        bool HasSetter()
 const override 
  568        bool (T::*m_setter)(U);   
 
  569        V (T::*m_getter)() 
const; 
 
 
  579template <
typename W, 
typename T, 
typename U, 
typename V>
 
  580inline Ptr<const AttributeAccessor>
 
  586template <
typename V, 
typename T1>
 
  587inline Ptr<const AttributeAccessor>
 
  593template <
typename V, 
typename T1, 
typename T2>
 
  594inline Ptr<const AttributeAccessor>
 
ns3::AttributeValue, ns3::AttributeAccessor and ns3::AttributeChecker declarations.
 
Basic functionality for accessing class attributes via class data members, or get functor/set methods...
 
bool Set(ObjectBase *object, const AttributeValue &val) const override
Set the underlying member to the argument AttributeValue.
 
AccessorHelper()
Constructor.
 
virtual bool DoGet(const T *object, U *v) const =0
Getter implementation.
 
bool Get(const ObjectBase *object, AttributeValue &val) const override
Get the value of the underlying member into the AttributeValue.
 
virtual bool DoSet(T *object, const U *v) const =0
Setter implementation.
 
Hold a value for an Attribute.
 
Anchor the ns-3 type and attribute system.
 
Smart pointer class similar to boost::intrusive_ptr.
 
Ptr< const AttributeAccessor > DoMakeAccessorHelperOne(U T::*memberVariable)
MakeAccessorHelper implementation for a class data member.
 
Ptr< const AttributeAccessor > MakeAccessorHelper(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
 
Ptr< const AttributeAccessor > DoMakeAccessorHelperTwo(void(T::*setter)(U), V(T::*getter)() const)
MakeAccessorHelper implementation with a class get functor method and a class set method returning vo...
 
Every class exported by the ns3 library is enclosed in the ns3 namespace.
 
The non-const and non-reference type equivalent to T.
 
std::remove_cvref_t< T > Result
The non-const, non reference type.