class OptionParser

A class for parsing command line arguments into Option objects. More...

Full nameUtilities::BaseOption::OptionParser
Definition#include <options.h>
List of all Methods
Annotated List
Files
Globals
Hierarchy
Index

Public Methods

Protected Methods


Detailed Description

A class for parsing command line arguments into Option objects. The following example demonstrates the principle:


#include "options.h"

// $Id: opttst.cc,v 1.3 2001/02/08 18:34:07 flitney Exp flitney $ 

using namespace Utilities;

Option<bool> verbose(string("-V,--verbose"), false, 
		     string("switch on diagnostic messages"), 
		     false, BaseOption::no_argument);
Option<bool> help(string("-h,--help"), false,
		  string("display this message"),
		  false, BaseOption::no_argument);
Option<float> dof(string("-d,--dof"), 100.0,
		  string("number of degrees of freedom"),
		  true, BaseOption::requires_argument);
Option<string> mask(string("-m,--mask"), string("mask"),
		    string("brain mask volume"),
		    true, BaseOption::requires_argument);
Option<string> resid(string("-r,--res"), string("res4d"),
		     string("4d `residual-of-fit' image"),
		     true, BaseOption::requires_argument);
Option<int> segid(string("-s,--shared-seg-id"), -1,
		  "shared memory segment ID",
		  false, BaseOption::requires_argument);

string title = 
"opttst (Version 1.0)\n\n\
Copyright(c) 2000, University of Oxford\n\
Dave Flitney";

string examples =
"opttst --dof=<number> --mask=<filename> --res=<filename>\n\
opttst -d <number> -m <filename> -r <filename>\n\
opttst --verbose\n";

int main(unsigned int argc, char **argv) {

  OptionParser options(title, examples);

  try {

    options.add(verbose);
    options.add(help);
    options.add(segid);
    options.add(dof);
    options.add(mask);
    options.add(resid);

    for(unsigned int a = options.parse_command_line(argc, argv); 
	a < argc; a++)
      cout << argv[a] << endl;
  
    if(help.value() || 
       !options.check_compulsory_arguments())
      options.usage();

    if(verbose.value()) {
      cout << "verbose = " << verbose.value() << endl;
      cout << "help = " << help.value() << endl;
      cout << "segid = " << segid.value() << endl;
      cout << "dof = " << dof.value() << endl;
      cout << "mask = " << mask.value() << endl;
      cout << "resid = " << resid.value() << endl;
    }

  } catch(X_OptionError& e) {
    options.usage();
    cerr << endl << e.what() << endl;
  } catch(std::exception &e) {
    cerr << e.what() << endl;
  }    
}

See also: BaseOption, Option, @example

 OptionParser (const string& p, const string& e): progname_(p), example_(e)

void  add (BaseOption& o)

Parameters:
oAn option to be added to the parser

void  usage ()

bool  check_compulsory_arguments (bool verbose=false)

Parameters:
verboseIf set then this method will carp about any option which is marked as compulsory but hasn't been set

Returns: true if all compulsory arguments have been set and false otherwise

unsigned int  parse_command_line (unsigned int argc, char **argv)

The parameters, argc and argv, should normally be those passed to main via the command line shell.

Parameters:
argcThe argument count.
argvThe vector of argument strings.

OptionParser ()

[virtual]

 OptionParser ()

[protected]