Parse command-line arguments. More...
#include <command-line.h>
Classes | |
class | CallbackItem |
An argument Item using a Callback to parse the input. More... | |
class | Item |
The argument base class. More... | |
class | UserItem |
An argument Item assigning to POD. More... | |
Public Member Functions | |
CommandLine () | |
Constructor. More... | |
CommandLine (const CommandLine &cmd) | |
Copy constructor. More... | |
~CommandLine () | |
Destructor. More... | |
template<typename T > | |
void | AddValue (const std::string &name, const std::string &help, T &value) |
Add a program argument, assigning to POD. More... | |
void | AddValue (const std::string &name, const std::string &help, Callback< bool, std::string > callback) |
Add a program argument, using a Callback to parse the value. More... | |
std::string | GetName () const |
Get the program name. More... | |
CommandLine & | operator= (const CommandLine &cmd) |
Assignment. More... | |
void | Parse (int argc, char *argv[]) |
Parse the program arguments. More... | |
void | PrintHelp (std::ostream &os) const |
Print program usage to the desired output stream. More... | |
void | Usage (const std::string usage) |
Supply the program usage and documentation. More... | |
Private Types | |
typedef std::list< Item * > | Items |
Argument list container. More... | |
Private Member Functions | |
void | Clear (void) |
Remove all arguments, Usage(), name. More... | |
void | Copy (const CommandLine &cmd) |
Copy constructor. More... | |
void | HandleArgument (const std::string &name, const std::string &value) const |
Match name against the program or general arguments, and dispatch to the appropriate handler. More... | |
void | PrintAttributes (std::ostream &os, const std::string &type) const |
Handler for --PrintAttributes : print the attributes for a given type. More... | |
void | PrintGlobals (std::ostream &os) const |
Handler for --PrintGlobals : print all global variables and values. More... | |
void | PrintGroup (std::ostream &os, const std::string &group) const |
Handler for --PrintGroup : print all types belonging to a given group. More... | |
void | PrintGroups (std::ostream &os) const |
Handler for --PrintGroups : print all TypeId group names. More... | |
void | PrintTypeIds (std::ostream &os) const |
Handler for --PrintTypeIds : print all TypeId names. More... | |
Private Attributes | |
Items | m_items |
The list of arguments. More... | |
std::string | m_name |
The program name. More... | |
std::string | m_usage |
The Usage string. More... | |
Parse command-line arguments.
Instances of this class can be used to parse command-line arguments. Programs can register a general usage message with CommandLine::Usage, and arguments with CommandLine::AddValue. POD argument variables will be set directly; more general arguments can be processed via a Callback.
CommandLine also provides handlers for these standard arguments:
The more common –help
is a synonym for –PrintHelp
; an example is given below.
Finally, CommandLine processes Attribute and GlobalValue arguments.
In use, arguments are given in the form
Most arguments expect a value, as in the first form, –arg=value
. Toggles, corresponding to boolean arguments, can be given in any of the forms
The first form changes the state of toggle1 from its default; all the rest set the corresponding boolean variable to true. 0
, f
and false
are accepted to set the variable to false.
CommandLine can set the initial value of every attribute in the system with the –TypeIdName::AttributeName=value
syntax, for example
CommandLine can also set the value of every GlobalValue in the system with the –GlobalValueName=value
syntax, for example
A simple example is in src/core/example/ command-line-example.cc
The heart of that example is this code:
after which it prints the values of each variable. (The SetCbArg
function is not shown here; see src/core/example/ command-line-example.cc
)
Here is the output from a few runs of that program:
Having parsed the arguments, some programs will need to perform some additional validation of the received values. A common issue at this point is to discover that the supplied arguments are incomplete or incompatible. Suggested best practice is to supply an error message and the complete usage message. For example,
Definition at line 177 of file command-line.h.
|
private |
Argument list container.
Definition at line 380 of file command-line.h.
ns3::CommandLine::CommandLine | ( | ) |
ns3::CommandLine::CommandLine | ( | const CommandLine & | cmd | ) |
Copy constructor.
cmd | the CommandLine to copy from |
Definition at line 43 of file command-line.cc.
References Copy().
ns3::CommandLine::~CommandLine | ( | ) |
Destructor.
Definition at line 54 of file command-line.cc.
References Clear(), and NS_LOG_FUNCTION.
void ns3::CommandLine::AddValue | ( | const std::string & | name, |
const std::string & | help, | ||
T & | value | ||
) |
Add a program argument, assigning to POD.
name | the name of the program-supplied argument |
help | the help text used by --PrintHelp |
value | a reference to the variable where the value parsed will be stored (if no value is parsed, this variable is not modified). |
Definition at line 435 of file command-line.h.
References ns3::CommandLine::UserItem< T >::m_default, ns3::CommandLine::Item::m_help, m_items, ns3::CommandLine::Item::m_name, and ns3::CommandLine::UserItem< T >::m_valuePtr.
Referenced by Experiment::CommandSetup(), RoutingExperiment::CommandSetup(), AodvExample::Configure(), MeshTest::Configure(), CommandLineBooleanTestCase::DoRun(), CommandLineIntTestCase::DoRun(), CommandLineUnsignedIntTestCase::DoRun(), CommandLineStringTestCase::DoRun(), main(), PrintPsr(), PrintPsrVsCollisionInterval(), PrintPsrVsDistance(), and PrintSizeVsRange().
void ns3::CommandLine::AddValue | ( | const std::string & | name, |
const std::string & | help, | ||
Callback< bool, std::string > | callback | ||
) |
Add a program argument, using a Callback to parse the value.
name | the name of the program-supplied argument |
help | the help text used by –help |
callback | a Callback function that will be invoked to parse and store the value. |
The callback should have the signature bool callback (const std::string value)
Definition at line 395 of file command-line.cc.
References ns3::CommandLine::CallbackItem::m_callback, ns3::CommandLine::Item::m_help, m_items, ns3::CommandLine::Item::m_name, and NS_LOG_FUNCTION.
|
private |
Remove all arguments, Usage(), name.
Definition at line 73 of file command-line.cc.
References m_items, m_name, m_usage, and NS_LOG_FUNCTION.
Referenced by operator=(), and ~CommandLine().
|
private |
Copy constructor.
cmd | CommandLine to copy |
Definition at line 60 of file command-line.cc.
References m_items, m_name, m_usage, and NS_LOG_FUNCTION.
Referenced by CommandLine(), and operator=().
std::string ns3::CommandLine::GetName | ( | void | ) | const |
Get the program name.
Definition at line 93 of file command-line.cc.
References m_name.
Referenced by main().
|
private |
Match name against the program or general arguments, and dispatch to the appropriate handler.
name | the argument name |
value | the command line value |
Definition at line 316 of file command-line.cc.
References m_items, NS_LOG_DEBUG, NS_LOG_FUNCTION, PrintAttributes(), PrintGlobals(), PrintGroup(), PrintGroups(), PrintHelp(), PrintTypeIds(), ns3::Config::SetDefaultFailSafe(), and ns3::Config::SetGlobalFailSafe().
Referenced by Parse().
CommandLine & ns3::CommandLine::operator= | ( | const CommandLine & | cmd | ) |
Assignment.
cmd | the CommandLine to assign from |
Definition at line 48 of file command-line.cc.
References Clear(), and Copy().
void ns3::CommandLine::Parse | ( | int | argc, |
char * | argv[] | ||
) |
Parse the program arguments.
argc | the 'argc' variable: number of arguments (including the main program name as first element). |
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.
As a side effect, this method saves the program basename, which can be retrieved by GetName().
Definition at line 104 of file command-line.cc.
References HandleArgument(), m_name, NS_LOG_FUNCTION, and ns3::SystemPath::Split().
Referenced by Experiment::CommandSetup(), RoutingExperiment::CommandSetup(), AodvExample::Configure(), MeshTest::Configure(), main(), and CommandLineTestCaseBase::Parse().
|
private |
Handler for --PrintAttributes
: print the attributes for a given type.
os | the output stream. |
type | the TypeId whose Attributes should be displayed |
Definition at line 222 of file command-line.cc.
References ns3::TypeId::AttributeInformation::checker, ns3::TypeId::GetAttribute(), ns3::TypeId::GetAttributeFullName(), ns3::TypeId::GetAttributeN(), ns3::TypeId::GetName(), ns3::TypeId::AttributeInformation::help, ns3::TypeId::AttributeInformation::initialValue, ns3::TypeId::LookupByNameFailSafe(), NS_FATAL_ERROR, and NS_LOG_FUNCTION.
Referenced by HandleArgument().
|
private |
Handler for --PrintGlobals
: print all global variables and values.
Definition at line 202 of file command-line.cc.
References ns3::GlobalValue::Begin(), ns3::GlobalValue::End(), ns3::StringValue::Get(), and NS_LOG_FUNCTION.
Referenced by HandleArgument().
|
private |
Handler for --PrintGroup
: print all types belonging to a given group.
os | the output stream. |
group | the name of the TypeId group to display |
Definition at line 246 of file command-line.cc.
References ns3::TypeId::GetGroupName(), ns3::TypeId::GetName(), ns3::TypeId::GetRegistered(), ns3::TypeId::GetRegisteredN(), visualizer.higcontainer::group, and NS_LOG_FUNCTION.
Referenced by HandleArgument().
|
private |
Handler for --PrintGroups
: print all TypeId group names.
Definition at line 275 of file command-line.cc.
References ns3::TypeId::GetGroupName(), ns3::TypeId::GetRegistered(), ns3::TypeId::GetRegisteredN(), visualizer.higcontainer::group, and NS_LOG_FUNCTION.
Referenced by HandleArgument().
void ns3::CommandLine::PrintHelp | ( | std::ostream & | os | ) | const |
Print program usage to the desired output stream.
Handler for --PrintHelp
and --help
: print Usage(), argument names, and help strings
Alternatively, an overloaded operator << can be used:
Definition at line 150 of file command-line.cc.
References m_items, m_name, m_usage, and NS_LOG_FUNCTION.
Referenced by HandleArgument(), and ns3::operator<<().
|
private |
Handler for --PrintTypeIds
: print all TypeId names.
Definition at line 263 of file command-line.cc.
References ns3::TypeId::GetName(), ns3::TypeId::GetRegistered(), ns3::TypeId::GetRegisteredN(), and NS_LOG_FUNCTION.
Referenced by HandleArgument().
void ns3::CommandLine::Usage | ( | const std::string | usage | ) |
Supply the program usage and documentation.
usage | Program usage message to write with –help . |
Definition at line 87 of file command-line.cc.
References m_usage.
Referenced by main().
|
private |
The list of arguments.
Definition at line 381 of file command-line.h.
Referenced by AddValue(), Clear(), Copy(), HandleArgument(), and PrintHelp().
|
private |
The program name.
Definition at line 383 of file command-line.h.
Referenced by Clear(), Copy(), GetName(), Parse(), and PrintHelp().
|
private |
The Usage string.
Definition at line 382 of file command-line.h.
Referenced by Clear(), Copy(), PrintHelp(), and Usage().