#include <ParmParse.H>
Collaboration diagram for ParmParse:
Public Types | |
enum | PPType { ppDefn, ppOption, ppInt, ppFloat, ppDouble, ppString, ppEQ_sign, ppEOF } |
Public Methods | |
ParmParse (int argc, char **argv, const char *prefix=0, const char *parfile=0) | |
ParmParse (const char *prefix=0) | |
~ParmParse () | |
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) |
void | get (const char *name, int &ref, int ival=0) |
access single object | |
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) |
Get the ival'th value of last occurrence of the requested name. | |
int | query (const char *name, std::string &ref, int ival=0) |
Get the ival'th value of last occurrence of the requested name. | |
void | getarr (const char *name, Vector< int > &ref, int start_ix, int num_val) |
access an array of objects | |
void | getarr (const char *name, std::vector< int > &ref, int start_ix, int num_val) |
access an array of objects | |
int | queryarr (const char *name, Vector< int > &ref, int start_ix, int num_val) |
access an array of objects | |
int | queryarr (const char *name, std::vector< int > &ref, int start_ix, int num_val) |
access an array of objects | |
void | getarr (const char *name, Vector< float > &ref, int start_ix, int num_val) |
access an array | |
void | getarr (const char *name, std::vector< float > &ref, int start_ix, int num_val) |
access an array | |
int | queryarr (const char *name, Vector< float > &ref, int start_ix, int num_val) |
int | queryarr (const char *name, std::vector< float > &ref, int start_ix, int num_val) |
void | getarr (const char *name, Vector< double > &ref, int start_ix, int num_val) |
void | getarr (const char *name, std::vector< double > &ref, int start_ix, int num_val) |
int | queryarr (const char *name, Vector< double > &ref, int start_ix, int num_val) |
int | queryarr (const char *name, std::vector< double > &ref, int start_ix, int num_val) |
void | getarr (const char *name, Vector< std::string > &ref, int start_ix, int num_val) |
void | getarr (const char *name, std::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) |
int | queryarr (const char *name, std::vector< std::string > &ref, int start_ix, int num_val) |
Protected Methods | |
void | bldTable (const char *str, int lenstr, PP_List< PP_entry * > &tab) |
void | addDefn (PP_String &def, PP_List< PP_String > &val, PP_List< PP_entry * > &tab) |
void | read_file (const char *fname, PP_List< PP_entry * > &tab) |
PPType | getToken (const char *, int &, int, char *) |
void | rmTable () |
void | ppinit (const char *parfile) |
const PP_entry * | ppindex (int n, const char *name) const |
void | getval (const char *name, const PPType type, void *ptr, int ival, int k=-1) |
void | getarr (const char *name, const PPType type, void *ptr, int start_ix, int num_val, int k=-1) |
int | queryval (const char *name, const PPType type, void *ptr, int ival, int k=-1) |
int | queryarr (const char *name, const PPType type, void *ptr, int start_ix, int num_val, int k=-1) |
bool | isInteger (const PP_String &str, int &val) |
int | isDouble (const PP_String &str, double &val) |
Protected Attributes | |
PP_String | thePrefix |
Static Protected Attributes | |
PP_List< PP_entry * > | table |
int | xargc |
char ** | xargv |
int | num_obj |
Friends | |
class | PP_entry |
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
|
|
|
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. |
|
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. |
|
The destructor. The internal static table will only be deleted if there are no other ParmParse objects in existence. |
|
|
|
|
|
Returns true if name is in table. |
|
Returns true if name is in table. |
|
Returns the number of times the given name (prepended with prefix) appears in the table. |
|
Returns the number of times the given name (prepended with prefix) appears in the table. |
|
Returns the number of values associated with nth occurence of name (prepended with the prefix) in the table. n == -1 implies the last occurence. |
|
Write the contents of the table in ASCII to the ostream. |
|
Get the ival'th value of last occurrence of the requested name. 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. |
|
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. |
|
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. |
|
access single object 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. |
|
|
|
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. |
|
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. |
|
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. |
|
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. |
|
access an array 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. |
|
access an array 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. |
|
access an array of objects 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. |
|
access an array of objects 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. |
|
|
|
|
|
|
|
|
|
|
|
|
|
Get the ival'th value of last occurrence of the requested name. 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. |
|
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. |
|
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. |
|
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. |
|
|
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
access an array of objects 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. |
|
access an array of objects 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. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|