19#ifndef ATTRIBUTE_HELPER_H 
   20#define ATTRIBUTE_HELPER_H 
   97template <
typename T, 
typename BASE>
 
  105    struct SimpleAttributeChecker : 
public BASE
 
  109            return dynamic_cast<const T*
>(&
value) != 
nullptr;
 
  112        std::string GetValueTypeName()
 const override 
  117        bool HasUnderlyingTypeInformation()
 const override 
  122        std::string GetUnderlyingTypeInformation()
 const override 
  129            return ns3::Create<T>();
 
  134            const T* src = 
dynamic_cast<const T*
>(&source);
 
  135            T* dst = 
dynamic_cast<T*
>(&destination);
 
  136            if (src == 
nullptr || dst == 
nullptr)
 
  145        std::string m_underlying; 
 
  146    }* checker = 
new SimpleAttributeChecker();
 
  148    checker->m_type = name;
 
  149    checker->m_underlying = underlying;
 
  169#define ATTRIBUTE_ACCESSOR_DEFINE(type)                                                            \ 
  170    template <typename T1>                                                                         \ 
  171    Ptr<const AttributeAccessor> Make##type##Accessor(T1 a1)                                       \ 
  173        return MakeAccessorHelper<type##Value>(a1);                                                \ 
  175    template <typename T1, typename T2>                                                            \ 
  176    Ptr<const AttributeAccessor> Make##type##Accessor(T1 a1, T2 a2)                                \ 
  178        return MakeAccessorHelper<type##Value>(a1, a2);                                            \ 
  198#define ATTRIBUTE_VALUE_DEFINE_WITH_NAME(type, name)                                               \ 
  199    class name##Value : public AttributeValue                                                      \ 
  203        name##Value(const type& value);                                                            \ 
  204        void Set(const type& value);                                                               \ 
  206        template <typename T>                                                                      \ 
  207        bool GetAccessor(T& value) const                                                           \ 
  209            value = T(m_value);                                                                    \ 
  212        Ptr<AttributeValue> Copy() const override;                                                 \ 
  213        std::string SerializeToString(Ptr<const AttributeChecker> checker) const override;         \ 
  214        bool DeserializeFromString(std::string value,                                              \ 
  215                                   Ptr<const AttributeChecker> checker) override;                  \ 
  232#define ATTRIBUTE_VALUE_DEFINE(name) ATTRIBUTE_VALUE_DEFINE_WITH_NAME(name, name) 
  249#define ATTRIBUTE_CONVERTER_DEFINE(type) 
  267#define ATTRIBUTE_CHECKER_DEFINE(type)                                                             \ 
  268    class type##Checker : public AttributeChecker                                                  \ 
  271    Ptr<const AttributeChecker> Make##type##Checker() 
  289#define ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME(type, name)                                            \ 
  290    name##Value::name##Value()                                                                     \ 
  294    name##Value::name##Value(const type& value)                                                    \ 
  298    void name##Value::Set(const type& v)                                                           \ 
  302    type name##Value::Get() const                                                                  \ 
  306    Ptr<AttributeValue> name##Value::Copy() const                                                  \ 
  308        return ns3::Create<name##Value>(*this);                                                    \ 
  310    std::string name##Value::SerializeToString(Ptr<const AttributeChecker> checker) const          \ 
  312        std::ostringstream oss;                                                                    \ 
  316    bool name##Value::DeserializeFromString(std::string value,                                     \ 
  317                                            Ptr<const AttributeChecker> checker)                   \ 
  319        std::istringstream iss;                                                                    \ 
  322        NS_ABORT_MSG_UNLESS(iss.eof(),                                                             \ 
  324                                << "\"" << value << "\""                                           \
 
  325                                << " is not properly formatted");                                  \
 
  326        return !iss.bad() && !iss.fail();                                                          \
 
  343#define ATTRIBUTE_VALUE_IMPLEMENT(type) ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME(type, type) 
  356#define ATTRIBUTE_CHECKER_IMPLEMENT(type)                                                          \ 
  357    Ptr<const AttributeChecker> Make##type##Checker()                                              \ 
  359        return MakeSimpleAttributeChecker<type##Value, type##Checker>(#type "Value", #type);       \
 
  375#define ATTRIBUTE_CHECKER_IMPLEMENT_WITH_NAME(type, name)                                          \ 
  376    Ptr<const AttributeChecker> Make##type##Checker()                                              \ 
  378        return MakeSimpleAttributeChecker<type##Value, type##Checker>(#type "Value", name);        \
 
  402#define ATTRIBUTE_HELPER_HEADER(type)                                                              \ 
  403    ATTRIBUTE_VALUE_DEFINE(type);                                                                  \ 
  404    ATTRIBUTE_ACCESSOR_DEFINE(type);                                                               \ 
  405    ATTRIBUTE_CHECKER_DEFINE(type) 
  424#define ATTRIBUTE_HELPER_CPP(type)                                                                 \ 
  425    ATTRIBUTE_CHECKER_IMPLEMENT(type);                                                             \ 
  426    ATTRIBUTE_VALUE_IMPLEMENT(type) 
NS_ABORT_x macro definitions.
 
ns3::MakeAccessorHelper declarations and template implementations.
 
ns3::AttributeValue, ns3::AttributeAccessor and ns3::AttributeChecker declarations.
 
Hold a value for an Attribute.
 
Smart pointer class similar to boost::intrusive_ptr.
 
Ptr< AttributeChecker > MakeSimpleAttributeChecker(std::string name, std::string underlying)
A simple string-based attribute checker.
 
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
 
Every class exported by the ns3 library is enclosed in the ns3 namespace.
 
Ptr< T > Copy(Ptr< T > object)
Return a deep copy of a Ptr.