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 is the output from a few runs of that program:
Definition at line 152 of file command-line.h.
|
private |
Argument list container.
Definition at line 353 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 408 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.
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.
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().
|
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 354 of file command-line.h.
Referenced by AddValue(), Clear(), Copy(), HandleArgument(), and PrintHelp().
|
private |
The program name.
Definition at line 356 of file command-line.h.
Referenced by Clear(), Copy(), GetName(), Parse(), and PrintHelp().
|
private |
The Usage string.
Definition at line 355 of file command-line.h.
Referenced by Clear(), Copy(), PrintHelp(), and Usage().