Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

ParmParse Class Reference

Parse Parameters From Command Line and Input Files. More...

#include <ParmParse.H>

Collaboration diagram for ParmParse:

Collaboration graph
[legend]
List of all members.

Public Types

enum  PPType {
  ppDefn, ppOption, ppInt, ppFloat,
  ppDouble, ppString, ppEQ_sign, ppEOF
}

Public Member Functions

 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 Member Functions

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_entryppindex (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

Detailed Description

Parse Parameters From Command Line and Input Files.

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= 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==, 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


Member Enumeration Documentation

enum ParmParse::PPType
 

Enumeration values:
ppDefn 
ppOption 
ppInt 
ppFloat 
ppDouble 
ppString 
ppEQ_sign 
ppEOF 


Constructor & Destructor Documentation

ParmParse::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::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::~ParmParse  ) 
 

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


Member Function Documentation

void ParmParse::addDefn PP_String def,
PP_List< PP_String > &  val,
PP_List< PP_entry * > &  tab
[protected]
 

void ParmParse::bldTable const char *  str,
int  lenstr,
PP_List< PP_entry * > &  tab
[protected]
 

bool ParmParse::contains const std::string &  name  ) 
 

Returns true if name is in table.

bool ParmParse::contains const char *  name  ) 
 

Returns true if name is in table.

int ParmParse::countname const std::string &  name  )  [inline]
 

Returns the number of times the given name (prepended with prefix) appears in the table.

int ParmParse::countname const char *  name  ) 
 

Returns the number of times the given name (prepended with prefix) appears in the table.

int ParmParse::countval const char *  name,
int  n = -1
[inline]
 

Returns the number of values associated with nth occurence of name (prepended with the prefix) in the table. n == -1 implies the last occurence.

void ParmParse::dumpTable std::ostream &  os  ) 
 

Write the contents of the table in ASCII to the ostream.

void ParmParse::get const char *  name,
std::string &  ref,
int  ival = 0
[inline]
 

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.

void ParmParse::get const char *  name,
double &  ref,
int  ival = 0
[inline]
 

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.

void ParmParse::get const char *  name,
float &  ref,
int  ival = 0
[inline]
 

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.

void ParmParse::get const char *  name,
int &  ref,
int  ival = 0
[inline]
 

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.

void ParmParse::getarr const char *  name,
const PPType  type,
void *  ptr,
int  start_ix,
int  num_val,
int  k = -1
[protected]
 

void ParmParse::getarr const char *  name,
std::vector< std::string > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

void ParmParse::getarr const char *  name,
Vector< std::string > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

void ParmParse::getarr const char *  name,
std::vector< double > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

void ParmParse::getarr const char *  name,
Vector< double > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

void ParmParse::getarr const char *  name,
std::vector< float > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

void ParmParse::getarr const char *  name,
Vector< float > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

void ParmParse::getarr const char *  name,
std::vector< int > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

void ParmParse::getarr const char *  name,
Vector< int > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

PPType ParmParse::getToken const char *  ,
int &  ,
int  ,
char * 
[protected]
 

void ParmParse::getval const char *  name,
const PPType  type,
void *  ptr,
int  ival,
int  k = -1
[protected]
 

int ParmParse::isDouble const PP_String str,
double &  val
[inline, protected]
 

bool ParmParse::isInteger const PP_String str,
int &  val
[inline, protected]
 

const PP_entry* ParmParse::ppindex int  n,
const char *  name
const [protected]
 

void ParmParse::ppinit const char *  parfile  )  [protected]
 

int ParmParse::query const char *  name,
std::string &  ref,
int  ival = 0
[inline]
 

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.

int ParmParse::query const char *  name,
double &  ref,
int  ival = 0
[inline]
 

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.

int ParmParse::query const char *  name,
float &  ref,
int  ival = 0
[inline]
 

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.

int ParmParse::query const char *  name,
int &  ref,
int  ival = 0
[inline]
 

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.

int ParmParse::queryarr const char *  name,
const PPType  type,
void *  ptr,
int  start_ix,
int  num_val,
int  k = -1
[protected]
 

int ParmParse::queryarr const char *  name,
std::vector< std::string > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

int ParmParse::queryarr const char *  name,
Vector< std::string > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

int ParmParse::queryarr const char *  name,
std::vector< double > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

int ParmParse::queryarr const char *  name,
Vector< double > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

int ParmParse::queryarr const char *  name,
std::vector< float > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

int ParmParse::queryarr const char *  name,
Vector< float > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

int ParmParse::queryarr const char *  name,
std::vector< int > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

int ParmParse::queryarr const char *  name,
Vector< int > &  ref,
int  start_ix,
int  num_val
[inline]
 

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.

int ParmParse::queryval const char *  name,
const PPType  type,
void *  ptr,
int  ival,
int  k = -1
[protected]
 

void ParmParse::read_file const char *  fname,
PP_List< PP_entry * > &  tab
[protected]
 

void ParmParse::rmTable  )  [protected]
 


Friends And Related Function Documentation

friend class PP_entry [friend]
 


Member Data Documentation

int ParmParse::num_obj [static, protected]
 

PP_List<PP_entry*> ParmParse::table [static, protected]
 

PP_String ParmParse::thePrefix [protected]
 

int ParmParse::xargc [static, protected]
 

char** ParmParse::xargv [static, protected]
 


The documentation for this class was generated from the following file:
Generated on Wed Jun 2 13:58:50 2004 for Chombo&INSwithParticles by doxygen 1.3.2