HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ArgParse Class Reference

#include <argparse.h>

Public Types

typedef std::function< void(const
ArgParse &ap, std::ostream &)> 
callback_t
 

Public Member Functions

 ArgParse (int argc=0, const char **argv=NULL)
 
 ~ArgParse ()
 
int options (const char *intro,...)
 
int parse (int argc, const char **argv)
 
std::string geterror () const
 
void usage () const
 
void briefusage () const
 
std::string command_line () const
 
void set_preoption_help (callback_t callback)
 
void set_postoption_help (callback_t callback)
 

Detailed Description

Argument Parsing

The parse function takes a list of options and variables or functions for storing option values and return <0 on failure:

static int parse_files (int argc, const char *argv[])
{
for (int i = 0; i < argc; i++)
filenames.push_back (argv[i]);
return 0;
}
static int blah_callback (int argc, const char *argv[])
{
std::cout << "blah argument was " << argv[1] << "\n";
return 0;
}
...
ArgParse ap;
ap.options ("Usage: myapp [options] filename...",
"%*", parse_objects, "",
"-camera %f %f %f", &camera[0], &camera[1], &camera[2],
"set the camera position",
"-lookat %f %f %f", &lx, &ly, &lz,
"set the position of interest",
"-oversampling %d", &oversampling, "oversamping rate",
"-passes %d", &passes, "number of passes",
"-lens %f %f %f", &aperture, &focalDistance, &focalLength,
"set aperture, focal distance, focal length",
"-format %d %d %f", &width, &height, &aspect,
"set width, height, aspect ratio",
"-v", &verbose, "verbose output",
"-q %!", &verbose, "quiet mode",
"--blah %@ %s", blahcallback, "Make the callback",
NULL);
if (ap.parse (argc, argv) < 0) {
std::cerr << ap.geterror() << std::endl;
ap.usage ();
return EXIT_FAILURE;
}

The available argument types are:

  • no % argument - bool flag
  • %! - a bool flag, but set it to false if the option is set
  • %d - 32bit integer
  • %f - 32bit float
  • %F - 64bit float (double)
  • %s - std::string
  • %L - std::vector<std::string> (takes 1 arg, appends to list)
  • %@ - a function pointer for a callback function will be invoked immediately. The prototype for the callback is int callback (int argc, char argv[])
  • % - catch all non-options and pass individually as an (argc,argv) sublist to a callback, each immediately after it's found
  • %1 - catch all non-options that occur before any option is encountered (like %*, but only for those prior to the first real option.

There are several special format tokens:

  • "<SEPARATOR>" - not an option at all, just a description to print in the usage output.

Notes:

  • If an option doesn't have any arguments, a bool flag argument is assumed.
  • No argument destinations are initialized.
  • The empty string, "", is used as a global sublist (ie. "%*").
  • Sublist functions are all of the form "int func(int argc, char **argv)".
  • If a sublist function returns -1, parse() will terminate early.
  • It is perfectly legal for the user to append ':' and more characters to the end of an option name, it will match only the portion before the semicolon (but a callback can detect the full string, this is useful for making arguments: myprog –flag:myopt=1 foobar

Definition at line 146 of file argparse.h.

Member Typedef Documentation

typedef std::function<void(const ArgParse& ap, std::ostream&)> ArgParse::callback_t

Definition at line 185 of file argparse.h.

Constructor & Destructor Documentation

ArgParse::ArgParse ( int  argc = 0,
const char **  argv = NULL 
)
ArgParse::~ArgParse ( )

Member Function Documentation

void ArgParse::briefusage ( ) const

Print a brief usage message to stdout. The usage message is generated and formatted automatically based on the command and description arguments passed to parse().

std::string ArgParse::command_line ( ) const

Return the entire command-line as one string.

std::string ArgParse::geterror ( ) const

Return any error messages generated during the course of parse() (and clear any error flags). If no error has occurred since the last time geterror() was called, it will return an empty string.

int ArgParse::options ( const char *  intro,
  ... 
)

Declare the command line options. After the introductory message, parameters are a set of format strings and variable pointers. Each string contains an option name and a scanf-like format string to enumerate the arguments of that option (eg. "-option %d %f %s"). The format string is followed by a list of pointers to the argument variables, just like scanf. A NULL terminates the list. Multiple calls to options() will append additional options.

int ArgParse::parse ( int  argc,
const char **  argv 
)

With the options already set up, parse the command line. Return 0 if ok, -1 if it's a malformed command line.

void ArgParse::set_postoption_help ( callback_t  callback)
void ArgParse::set_preoption_help ( callback_t  callback)
void ArgParse::usage ( ) const

Print the usage message to stdout. The usage message is generated and formatted automatically based on the command and description arguments passed to parse().


The documentation for this class was generated from the following file: