doxygen doc
This commit is contained in:
@@ -26,6 +26,35 @@
|
||||
#include <sstream>
|
||||
#include "fatal-error.h"
|
||||
|
||||
/**
|
||||
* \defgroup AttributeHelper
|
||||
*
|
||||
* All these macros can be used to generate automatically the code
|
||||
* for subclasses of AttributeValue, AttributeAccessor, and, AttributeChecker,
|
||||
* which can be used to give attribute powers to a normal class. i.e.,
|
||||
* the user class can then effectively be made an attribute.
|
||||
*
|
||||
* There are two kinds of helper macros:
|
||||
* 1) The simple macros.
|
||||
* 2) The more complex macros.
|
||||
*
|
||||
* The simple macros are implemented in terms of the complex
|
||||
* macros and should generally be prefered over the complex macros:
|
||||
* - ATTRIBUTE_HELPER_HEADER_1,
|
||||
* - ATTRIBUTE_HELPER_HEADER_2, and,
|
||||
* - ATTRIBUTE_HELPER_CPP,
|
||||
*/
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro defines and generates the code for the implementation
|
||||
* of the MakeXXXAccessor template functions. This macro is typically
|
||||
* invoked in a class header to allow users of this class to view and
|
||||
* use the template functions defined here. This macro is implemented
|
||||
* through the helper templates functions ns3::MakeAccessorHelper<>.
|
||||
*/
|
||||
#define ATTRIBUTE_ACCESSOR_DEFINE(type) \
|
||||
template <typename T1> \
|
||||
Ptr<const AttributeAccessor> Make##type##Accessor (T1 a1) \
|
||||
@@ -38,6 +67,13 @@
|
||||
return MakeAccessorHelper<type##Value> (a1, a2); \
|
||||
}
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class.
|
||||
*
|
||||
* This macro defines the class XXXValue associated to class XXX.
|
||||
* This macro is typically invoked in a class header.
|
||||
*/
|
||||
#define ATTRIBUTE_VALUE_DEFINE(type) \
|
||||
class type##Value : public AttributeValue \
|
||||
{ \
|
||||
@@ -55,14 +91,39 @@
|
||||
type m_value; \
|
||||
};
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro defines the conversion operators for class XXX to and
|
||||
* from instances of type Attribute.
|
||||
* Typically invoked from xxx.h.
|
||||
*/
|
||||
#define ATTRIBUTE_CONVERTER_DEFINE(type) \
|
||||
type (Attribute value); \
|
||||
operator Attribute () const;
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro defines the XXXChecker class and the associated
|
||||
* MakeXXXChecker function.
|
||||
* Typically invoked from xxx.h.
|
||||
*/
|
||||
#define ATTRIBUTE_CHECKER_DEFINE(type) \
|
||||
class type##Checker : public AttributeChecker {}; \
|
||||
Ptr<const AttributeChecker> Make##type##Checker (void); \
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro implements the XXXValue class (without the
|
||||
* XXXValue::SerializeToString and XXXValue::DeserializeFromString
|
||||
* methods).
|
||||
* Typically invoked from xxx.cc.
|
||||
*/
|
||||
#define ATTRIBUTE_VALUE_IMPLEMENT_NO_SERIALIZE(type) \
|
||||
type##Value::type##Value () \
|
||||
: m_value () {} \
|
||||
@@ -92,6 +153,15 @@
|
||||
return Attribute::Create<type##Value> (*this); \
|
||||
}
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class.
|
||||
*
|
||||
* This macro implements the XXXValue class (including the
|
||||
* XXXValue::SerializeToString and XXXValue::DeserializeFromString
|
||||
* methods).
|
||||
* Typically invoked from xxx.cc.
|
||||
*/
|
||||
#define ATTRIBUTE_VALUE_IMPLEMENT(type) \
|
||||
std::string \
|
||||
type##Value::SerializeToString (Ptr<const AttributeChecker> checker) const { \
|
||||
@@ -108,12 +178,26 @@
|
||||
} \
|
||||
ATTRIBUTE_VALUE_IMPLEMENT_NO_SERIALIZE (type)
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro implements the MakeXXXChecker function.
|
||||
* Typically invoked from xxx.cc.
|
||||
*/
|
||||
#define ATTRIBUTE_CHECKER_IMPLEMENT(type) \
|
||||
Ptr<const AttributeChecker> Make##type##Checker (void) \
|
||||
{ \
|
||||
return MakeSimpleAttributeChecker<type##Value,type##Checker> (); \
|
||||
} \
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro implements the conversion operators to and from
|
||||
* instances of type Attribute. Typically invoked from xxx.cc.
|
||||
*/
|
||||
#define ATTRIBUTE_CONVERTER_IMPLEMENT(type) \
|
||||
type::type (Attribute value) \
|
||||
{ \
|
||||
@@ -130,15 +214,35 @@
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro should be invoked from a public section of the class
|
||||
* declaration.
|
||||
*/
|
||||
#define ATTRIBUTE_HELPER_HEADER_1(type) \
|
||||
ATTRIBUTE_CONVERTER_DEFINE (type)
|
||||
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro should be invoked outside of the class
|
||||
* declaration in its public header.
|
||||
*/
|
||||
#define ATTRIBUTE_HELPER_HEADER_2(type) \
|
||||
ATTRIBUTE_VALUE_DEFINE (type); \
|
||||
ATTRIBUTE_ACCESSOR_DEFINE (type); \
|
||||
ATTRIBUTE_CHECKER_DEFINE (type);
|
||||
|
||||
#define ATTRIBUTE_HELPER_CPP(type) \
|
||||
/**
|
||||
* \ingroup AttributeHelper
|
||||
* \param type the name of the class
|
||||
*
|
||||
* This macro should be invoked from the class implementation file.
|
||||
*/
|
||||
#define ATTRIBUTE_HELPER_CPP(type) \
|
||||
ATTRIBUTE_CHECKER_IMPLEMENT (type); \
|
||||
ATTRIBUTE_CONVERTER_IMPLEMENT (type); \
|
||||
ATTRIBUTE_VALUE_IMPLEMENT (type);
|
||||
|
||||
@@ -25,6 +25,12 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief Hold a bool native type
|
||||
*
|
||||
* This class can be used to hold bool variables
|
||||
* which must go through the Attribute system.
|
||||
*/
|
||||
class Boolean
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -26,16 +26,44 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief parse command-line arguments
|
||||
*
|
||||
* Instances of this class can be used to parse command-line
|
||||
* arguments: users can register new arguments with
|
||||
* CommandLine::AddValue but the most important functionality
|
||||
* provided by this class is that it can be used to set the
|
||||
* 'initial value' of every attribute in the system with the
|
||||
* --TypeIdName::AttributeName=value syntax and it can be used
|
||||
* to set the value of every GlobalValue in the system with
|
||||
* the --GlobalValueName=value syntax.
|
||||
*/
|
||||
class CommandLine
|
||||
{
|
||||
public:
|
||||
~CommandLine ();
|
||||
|
||||
/**
|
||||
* \param name the name of the user-supplied argument
|
||||
* \param help some help text used by --PrintHelp
|
||||
* \param value a reference to the variable where the
|
||||
* value parsed will be stored (if no value
|
||||
* is parsed, this variable is not modified).
|
||||
*/
|
||||
template <typename T>
|
||||
void AddValue (const std::string &name,
|
||||
const std::string &help,
|
||||
T &value);
|
||||
|
||||
/**
|
||||
* \param argc the 'argc' variable: number of arguments (including the
|
||||
* main program name as first element).
|
||||
* \param argv the 'argv' variable: a null-terminated array of strings,
|
||||
* each of which identifies a command-line argument.
|
||||
*
|
||||
* Obviously, this method will parse the input command-line arguments and
|
||||
* will attempt to handle them all.
|
||||
*/
|
||||
void Parse (int &argc, char *argv[]) const;
|
||||
private:
|
||||
class Item
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief Hold an floating point type
|
||||
*
|
||||
* This class can be used to hold variables of floating point type
|
||||
* such as 'double' or 'float'. The internal format is 'double'.
|
||||
*/
|
||||
class Double
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -26,6 +26,12 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief hold variables of type 'enum'
|
||||
*
|
||||
* This class can be used to hold variables of any kind
|
||||
* of enum.
|
||||
*/
|
||||
class Enum : public AttributeValue
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -28,27 +28,81 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief hold a so-called 'global value'.
|
||||
*
|
||||
* Instances of this class are expected to be allocated as static
|
||||
* global variables and should be used to store configurable global state.
|
||||
*/
|
||||
class GlobalValue
|
||||
{
|
||||
typedef std::vector<GlobalValue *> Vector;
|
||||
public:
|
||||
typedef Vector::const_iterator Iterator;
|
||||
|
||||
/**
|
||||
* \param name the name of this global value.
|
||||
* \param help some help text which describes the purpose of this
|
||||
* global value.
|
||||
* \param initialValue the value to assign to this global value
|
||||
* during construction.
|
||||
* \param checker a pointer to an AttributeChecker which can verify
|
||||
* that any user-supplied value to override the initial
|
||||
* value matches the requested type constraints.
|
||||
*/
|
||||
GlobalValue (std::string name, std::string help,
|
||||
Attribute initialValue,
|
||||
Ptr<const AttributeChecker> checker);
|
||||
|
||||
/**
|
||||
* \returns the name of this GlobalValue.
|
||||
*/
|
||||
std::string GetName (void) const;
|
||||
/**
|
||||
* \returns the help text of this GlobalValue.
|
||||
*/
|
||||
std::string GetHelp (void) const;
|
||||
/**
|
||||
* \returns the current value of this GlobalValue.
|
||||
*/
|
||||
Attribute GetValue (void) const;
|
||||
/**
|
||||
* \returns the checker associated to this GlobalValue.
|
||||
*/
|
||||
Ptr<const AttributeChecker> GetChecker (void) const;
|
||||
|
||||
/**
|
||||
* \param value the new value to set in this GlobalValue.
|
||||
*/
|
||||
bool SetValue (Attribute value);
|
||||
|
||||
/**
|
||||
* \param name the name of the global value
|
||||
* \param value the value to set in the requested global value.
|
||||
*
|
||||
* Iterate over the set of GlobalValues until a matching name is found
|
||||
* and then set its value with GlobalValue::SetValue.
|
||||
*
|
||||
* This method cannot fail. It will crash if the input is not valid.
|
||||
*/
|
||||
static void Bind (std::string name, Attribute value);
|
||||
|
||||
/**
|
||||
* \param name the name of the global value
|
||||
* \param value the value to set in the requested global value.
|
||||
* \returns true if the value could be set successfully, false otherwise.
|
||||
*
|
||||
* Iterate over the set of GlobalValues until a matching name is found
|
||||
* and then set its value with GlobalValue::SetValue.
|
||||
*/
|
||||
static bool BindFailSafe (std::string name, Attribute value);
|
||||
|
||||
/**
|
||||
* \returns an iterator which represents a pointer to the first GlobalValue registered.
|
||||
*/
|
||||
static Iterator Begin (void);
|
||||
/**
|
||||
* \returns an iterator which represents a pointer to the last GlobalValue registered.
|
||||
*/
|
||||
static Iterator End (void);
|
||||
private:
|
||||
friend class GlobalValueTests;
|
||||
|
||||
@@ -26,6 +26,13 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief Hold a signed integer type
|
||||
*
|
||||
* This class can be used to hold variables of signed integer
|
||||
* type such as int8_t, int16_t, int32_t, int64_t, or,
|
||||
* int, etc.
|
||||
*/
|
||||
class Integer
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -6,6 +6,12 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief hold variables of type string
|
||||
*
|
||||
* This class can be used to hold variables of type string,
|
||||
* that is, either char * or std::string.
|
||||
*/
|
||||
class String
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -26,6 +26,13 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
/**
|
||||
* \brief Hold an unsigned integer type
|
||||
*
|
||||
* This class can be used to hold variables of unsigned integer
|
||||
* type such as uint8_t, uint16_t, uint32_t, uint64_t, or,
|
||||
* unsigned int, etc.
|
||||
*/
|
||||
class Uinteger
|
||||
{
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user