class ParmParse

Parse Parameters From Command Line and Input Files

Inheritance:

ParmParse


public members:

constructors, destructor
ParmParse (int argc, char** argv, const char* prefix = 0, const char* parfile = 0)
ParmParse (const char* prefix = 0)
~ParmParse()

inquiry functions
bool contains (const char* name)
bool contains (const std::string& name)
int countval (const char* name, int n = -1)
int countname (const char* name)
int countname (const std::string& name)
void dumpTable (std::ostream& os)

access functions

access single object
void get (const char* name, int& ref, int ival=0)
int query (const char* name, int& ref, int ival=0)
void get (const char* name, float& ref, int ival=0)
int query (const char* name, float& ref, int ival=0)
void get (const char* name, double& ref, int ival=0)
int query (const char* name, double& ref, int ival=0)
void get (const char* name, std::string& ref, int ival=0)
int query (const char* name, std::string& ref, int ival=0)

access an array of objects
void getarr (const char* name, Vector <int>& ref, int start_ix, int num_val)
int queryarr (const char* name, Vector <int>& ref, int start_ix, int num_val)
void getarr (const char* name, Vector <float>& ref, int start_ix, int num_val)
int queryarr (const char* name, Vector <float>& ref, int start_ix, int num_val)
void getarr (const char* name, Vector <double>& ref, int start_ix, int num_val)
int queryarr (const char* name, Vector <double>& ref, int start_ix, int num_val)
void getarr (const char* name, Vector <std::string>& ref, int start_ix, int num_val)
int queryarr (const char* name, Vector <std::string>& ref, int start_ix, int num_val)

Documentation

The ParmParse class is used to interpret parameters passed in to a program from the command line and an arbitrary collection of input files. The parameters are stored in static table that can be queried by any object of type ParmParse. A parameter can be either an "option" (usually specified on the command line) or a "definition". An option is of the form "-<name>" and is stored in the table without the hyphen. A definition is of the form "<name> = <value><value>...<value>". It is stored in the table as a name, value-list pair.

In the following example, verbose and no_opt are stored in the table as options. niter is a definition with the single integer value 10; name is a definition with the string value "big code" and dx is a definition with the two floating point values 0.5 and 0.75.

prog -verbose -no_opt niter = 10 name = "big code" dx = 0.5 0.75

The ParmParse class has two constructors. The first is responsible for building the table and is usually called by the main routine of an application. It has arguments for the command line argc and argv parameters, as well as an optional filename argument for reading definitions from an input file. The table is built by reading the input file first (if it exists) with the command line arguments added to the end of the table. The order of a definition in the table is significant, so command line parameters can be used to override definitions in the input file. A definition of the explicit form: FILE=<filename> is not added to the table but is a directive to include the named file at that point in the table.

The second constructor is generally used by other classes in the code. It permits access to the table via a large collection of query functions. Both constructors have an optional prefix argument that narrows the search to entries in the table with the same prefix. For example, let PlanR be a ParmParse object with code prefix "ope". PlanR.get("val",v) will look for an entry in the parameter list of the form: ope.val==<value>, and will reject all entries not starting with the correct code prefix.

The query functions search the table for definition names that match a given string (and prefix) and return values from the corresponding value list. The values can be returned as ints, Array<int>s, floats, std::vector<float>s, doubles, std::vector<double>s, std::strings, or std::vector<std::sring>s. All values in the table are stored as PP_String objects, but if an int, float, or double is requested, the translation is done automatically. In the previous example, the value of niter could be returned as either an std::string, an int, a double, or a float. The values of dx can be returned as std::strings, floats, or doubles, but the value of name can be returned only as an std::string.

Comments in an input file include all text from a `#' character to the end of the line. Here is a sample input file:

-no_garbage

niter = 100

title = "Double Wammy"

cell_size = 0.5 0.75

plot.var = Density 1 10

plot.var = Energy 5 12

bigarray = 1 2 3 4 5 6 7 8

9 10 11 12

test = apple "boy blue" 10 20 30 40

FILE = prob_file

ParmParse (int argc, char** argv, const char* prefix = 0, const char* parfile = 0)
Construct an initial ParmParse object from the argc and argv passed in to main(). An error will be signalled if another ParmParse object currently exists. If parfile is specified, read the parameters in from that file first and then append those derived from argv to the table. If prefix is specified, load this string as the code prefix for this particular ParmParse object.

ParmParse (const char* prefix = 0)
Construct an additional ParmParse object sharing the same internal table as any other such objects in existence. If prefix is specified, load this string as the code prefix for this particular ParmParse object.

~ParmParse ()
The destructor. The internal static table will only be deleted if there are no other ParmParse objects in existence.

bool contains (const char* name)
Returns true if name is in table.

bool contains (const std::string& name)
Returns true if name is in table.

int countval (const char* name, int n = -1)
Returns the number of values associated with nth occurence of name (prepended with the prefix) in the table. n == -1 implies the last occurence.

int countname (const char* name)
Returns the number of times the given name (prepended with prefix) appears in the table.

int countname (const std::string& name)
Returns the number of times the given name (prepended with prefix) appears in the table.

void dumpTable (std::ostream& os)
Write the contents of the table in ASCII to the ostream.

void get (const char* name, int& ref, int ival=0)
Get the ival'th value of last occurrence of the requested name. If successful, the value is converted to an int and stored in reference ref. If the name does not exist or ival'th value does not exist, or if the printed representation of the value cannot be converted to an int, an error message is output and the program halts. Note that ival == 0 is the first value in the list.

int query (const char* name, int& ref, int ival=0)
Get the ival'th value of last occurrence of the requested name. If successful, the value is converted to an int and stored in reference ref. Returns 1 if successful. Returns 0 if the name does not exist. If ival'th value does not exist, or if the printed representation of the value cannot be converted to an int, an error message is output and the program halts. Note that ival == 0 is the first value in the list.

void get (const char* name, float& ref, int ival=0)
Get the ival'th value of last occurrence of the requested name. If successful, the value is converted to a float and stored in reference ref. If the name does not exist or ival'th value does not exist, or if the printed representation of the value cannot be converted to a float, an error message is output and the program halts. Note that ival == 0 is the first value in the list.

int query (const char* name, float& ref, int ival=0)
Get the ival'th value of last occurrence of the requested name. If successful, the value is converted to a float and stored in reference ref. Returns 1 if successful. Returns 0 if the name does not exist. If ival'th value does not exist, or if the printed representation of the value cannot be converted to a float, an error message is output and the program halts. Note that ival == 0 is the first value in the list.

void get (const char* name, double& ref, int ival=0)
Get the ival'th value of last occurrence of the requested name. If successful, the value is converted to a double and stored in reference ref. If the name does not exist or ival'th value does not exist, or if the printed representation of the value cannot be converted to a double, an error message is output and the program halts. Note that ival == 0 is the first value in the list.

int query (const char* name, double& ref, int ival=0)
Get the ival'th value of last occurrence of the requested name. If successful, the value is converted to a double and stored in reference ref. Returns 1 if successful. Returns 0 if the name does not exist. If ival'th value does not exist, or if the printed representation of the value cannot be converted to a double, an error message is output and the program halts. Note that ival == 0 is the first value in the list.

void get (const char* name, std::string& ref, int ival=0)
Get the ival'th value of last occurrence of the requested name. If successful, the value is converted to a string and stored in reference ref. If the name does not exist or ival'th value does not exist, or if the printed representation of the value cannot be converted to a string, an error message is output and the program halts. Note that ival == 0 is the first value in the list.

int query (const char* name, std::string& ref, int ival=0)
Get the ival'th value of last occurrence of the requested name. If successful, the value is converted to a string and stored in reference ref. Returns 1 if successful. Returns 0 if the name does not exist. If ival'th value does not exist, or if the printed representation of the value cannot be converted to a string, an error message is output and the program halts. Note that ival == 0 is the first value in the list.

void getarr (const char* name, Vector <int>& ref, int start_ix, int num_val)
Gets a std::vector<int> of num_val values from last occurrence of given name. If successful, the values are converted to an int and stored in the std::vector<int> object ref. ref is resized (if necessary) to hold num_val values. The value in the list indexed by start_ix is copied into std::vector<int>[0], std::vector<int>[1] holds start_ix+1, etc. If there are fewer than start_ix + num_val values associated with the last occurrence, or if some of the values cannot be converted to an int, an error message is reported and the program halts.

int queryarr (const char* name, Vector <int>& ref, int start_ix, int num_val)
Gets a std::vector<int> of num_val values from last occurrence of given name. If successful, the values are converted to an int and stored in the std::vector<int> object ref. ref is resized (if necessary) to hold num_val values. The value in the list indexed by start_ix is copied into std::vector<int>[0], std::vector<int>[1] holds start_ix+1, etc. Returns 0 if the name does not exist. If there are fewer than start_ix + num_val values associated with the last occurrence, or if some of the values cannot be converted to an int, an error message is reported and the program halts.

void getarr (const char* name, Vector <float>& ref, int start_ix, int num_val)
Gets a std::vector<float> of num_val values from last occurrence of given name. If successful, the values are converted to a float and stored in the std::vector<float> object ref. ref is resized (if necessary) to hold num_val values. The value in the list indexed by start_ix is copied into std::vector<float>[0], std::vector<float>[1] holds start_ix+1, etc. If there are fewer than start_ix + num_val values associated with the last occurrence, or if some of the values cannot be converted to a float, an error message is reported and the program halts.

int queryarr (const char* name, Vector <float>& ref, int start_ix, int num_val)
Gets a std::vector<float> of num_val values from last occurrence of given name. If successful, the values are converted to a float and stored in the std::vector<float> object ref. ref is resized (if necessary) to hold num_val values. The value in the list indexed by start_ix is copied into std::vector<float>[0], std::vector<float>[1] holds start_ix+1, etc. Returns 0 if the name does not exist. If there are fewer than start_ix + num_val values associated with the last occurrence, or if some of the values cannot be converted to a float, an error message is reported and the program halts.

void getarr (const char* name, Vector <double>& ref, int start_ix, int num_val)
Gets a std::vector<double> of num_val values from last occurrence of given name. If successful, the values are converted to a double and stored in the std::vector<double> object ref. ref is resized (if necessary) to hold num_val values. The value in the list indexed by start_ix is copied into std::vector<double>[0], std::vector<double>[1] holds start_ix+1, etc. If there are fewer than start_ix + num_val values associated with the last occurrence, or if some of the values cannot be converted to a double, an error message is reported and the program halts.

int queryarr (const char* name, Vector <double>& ref, int start_ix, int num_val)
Gets a std::vector<double> of num_val values from last occurrence of given name. If successful, the values are converted to a double and stored in the std::vector<double> object ref. ref is resized (if necessary) to hold num_val values. The value in the list indexed by start_ix is copied into std::vector<double>[0], std::vector<double>[1] holds start_ix+1, etc. Returns 0 if the name does not exist. If there are fewer than start_ix + num_val values associated with the last occurrence, or if some of the values cannot be converted to a double, an error message is reported and the program halts.

void getarr (const char* name, Vector <std::string>& ref, int start_ix, int num_val)
Gets a std::vector<string> of num_val values from last occurrence of given name. If successful, the values are converted to a string and stored in the std::vector<string> object ref. ref is resized (if necessary) to hold num_val values. The value in the list indexed by start_ix is copied into std::vector<string>[0], std::vector<string>[1] holds start_ix+1, etc. If there are fewer than start_ix + num_val values associated with the last occurrence, or if some of the values cannot be converted to a string, an error message is reported and the program halts.

int queryarr (const char* name, Vector <std::string>& ref, int start_ix, int num_val)
Gets a std::vector<string> of num_val values from last occurrence of given name. If successful, the values are converted to a string and stored in the std::vector<string> object ref. ref is resized (if necessary) to hold num_val values. The value in the list indexed by start_ix is copied into std::vector<string>[0], std::vector<string>[1] holds start_ix+1, etc. Returns 0 if the name does not exist. If there are fewer than start_ix + num_val values associated with the last occurrence, or if some of the values cannot be converted to a string, an error message is reported and the program halts.


this class has no child classes.

alphabetic index hierarchy of classes


Chombo

Copyright Notice

This software is copyright (C) by the Lawrence Berkeley National Laboratory. Permission is granted to reproduce this software for non-commercial purposes provided that this notice is left intact.

It is acknowledged that the U.S. Government has rights to this software under Contract DE-AC03-765F00098 between the U.S. Department of Energy and the University of California.

This software is provided as a professional and academic contribution for joint exchange. Thus it is experimental, is provided ``as is'', with no warranties of any kind whatsoever, no support, no promise of updates, or printed documentation. By using this software, you acknowledge that the Lawrence Berkeley National Laboratory and Regents of the University of California shall have no liability with respect to the infringement of other copyrights by any part of this software.