#include <CmdLine.hh>
Public Member Functions | |
CmdLine () | |
CmdLine (const int argc, char **argv) | |
initialise a CmdLine from a C-style array of command-line arguments | |
CmdLine (const vector< string > &args) | |
initialise a CmdLine from a C++ vector of arguments | |
bool | present (const string &opt) const |
true if the option is present | |
bool | present_and_set (const string &opt) const |
true if the option is present and corresponds to a value | |
const vector< string > & | arguments () const |
return a reference to the vector of command-line arguments (0 is command). | |
template<class T> | |
T | value (const string &opt) const |
returns the value of the argument converted to type T | |
template<class T> | |
T | value (const string &opt, const T &defval) const |
int | int_val (const string &opt) const |
return the integer value corresponding to the given option | |
int | int_val (const string &opt, const int &defval) const |
return the integer value corresponding to the given option or default if option is absent | |
double | double_val (const string &opt) const |
return the double value corresponding to the given option | |
double | double_val (const string &opt, const double &defval) const |
return the double value corresponding to the given option or default if option is absent | |
string | string_val (const string &opt) const |
return the string value corresponding to the given option | |
string | string_val (const string &opt, const string &defval) const |
return the string value corresponding to the given option or default if option is absent | |
string | command_line () const |
return the full command line | |
bool | all_options_used () const |
return true if all options have been asked for at some point or other | |
Private Member Functions | |
void | init () |
builds the internal structures needed to keep track of arguments and options | |
void | _report_conversion_failure (const string &opt, const string &optstring) const |
report failure of conversion | |
Private Attributes | |
map< string, int > | __options |
vector< string > | __arguments |
map< string, bool > | __options_used |
string | __command_line |
Note that functionality might be slightly different? Currently do not implement access to arguments by index though data structure would in principle allow this quite easily.
GPS 03/01/05 [NB: wonder if some of this might be more efficiently written with templates for different type that can be read in...]
Other question: dealing with list of options is rather common occurrence -- command-line arguments, but also card files; maybe one could somehow use base/derived classes to share common functionality?
Definition at line 50 of file CmdLine.hh.
|
Definition at line 58 of file CmdLine.hh. 00058 {};
|
|
initialise a CmdLine from a C-style array of command-line arguments
Definition at line 41 of file CmdLine.cc. References __arguments, and init(). 00041 { 00042 __arguments.resize(argc); 00043 for(int iarg = 0; iarg < argc; iarg++){ 00044 __arguments[iarg] = argv[iarg]; 00045 } 00046 this->init(); 00047 }
|
|
initialise a CmdLine from a C++ vector of arguments
Definition at line 50 of file CmdLine.cc. References __arguments, and init(). 00050 { 00051 __arguments = args; 00052 this->init(); 00053 }
|
|
report failure of conversion
Definition at line 186 of file CmdLine.cc. Referenced by value(). 00187 { 00188 cerr << "Error: could not convert option ("<<opt<<") value (" 00189 <<optstring<<") to requested type"<<endl; 00190 exit(-1); 00191 }
|
|
return true if all options have been asked for at some point or other
Definition at line 173 of file CmdLine.cc. References __options_used. Referenced by main(). 00173 { 00174 bool result = true; 00175 for(map<string,bool>::const_iterator opt = __options_used.begin(); 00176 opt != __options_used.end(); opt++) { 00177 bool this_one = opt->second; 00178 if (! this_one) {cerr << "Option "<<opt->first<<" unused/unrecognized"<<endl;} 00179 result = result && this_one; 00180 } 00181 return result; 00182 }
|
|
return a reference to the vector of command-line arguments (0 is command).
Definition at line 71 of file CmdLine.hh. References __arguments. 00071 {return __arguments;}
|
|
return the full command line
Definition at line 167 of file CmdLine.cc. References __command_line. Referenced by main(). 00167 { 00168 return __command_line; 00169 }
|
|
return the double value corresponding to the given option or default if option is absent
Definition at line 160 of file CmdLine.cc. References double_val(). 00160 { 00161 if (this->present_and_set(opt)) {return double_val(opt);} 00162 else {return defval;} 00163 }
|
|
return the double value corresponding to the given option
Definition at line 147 of file CmdLine.cc. References string_val(). Referenced by double_val(), and main(). 00147 { 00148 double result; 00149 string optstring = string_val(opt); 00150 istringstream optstream(optstring); 00151 optstream >> result; 00152 if (optstream.fail()) { 00153 cerr << "Error: could not convert option ("<<opt<<") value (" 00154 <<optstring<<") to double"<<endl; 00155 exit(-1);} 00156 return result; 00157 }
|
|
builds the internal structures needed to keep track of arguments and options
Definition at line 56 of file CmdLine.cc. References __arguments, __command_line, __options, and __options_used. Referenced by CmdLine(). 00056 { 00057 __command_line = ""; 00058 for(size_t iarg = 0; iarg < __arguments.size(); iarg++){ 00059 __command_line += __arguments[iarg]; 00060 __command_line += " "; 00061 } 00062 00063 // group things into options 00064 bool next_may_be_val = false; 00065 string currentopt; 00066 for(size_t iarg = 1; iarg < __arguments.size(); iarg++){ 00067 // if expecting an option value, then take it (even if 00068 // it is actually next option...) 00069 if (next_may_be_val) {__options[currentopt] = iarg;} 00070 // now see if it might be an option itself 00071 string arg = __arguments[iarg]; 00072 bool thisisopt = (arg.compare(0,1,"-") == 0); 00073 if (thisisopt) { 00074 // set option to a standard undefined value and say that 00075 // we expect (possibly) a value on next round 00076 currentopt = arg; 00077 __options[currentopt] = -1; 00078 __options_used[currentopt] = false; 00079 next_may_be_val = true;} 00080 else { 00081 // otherwise throw away the argument for now... 00082 next_may_be_val = false; 00083 currentopt = ""; 00084 } 00085 } 00086 }
|
|
return the integer value corresponding to the given option or default if option is absent
Definition at line 138 of file CmdLine.cc. References int_val(). 00138 { 00139 if (this->present_and_set(opt)) {return int_val(opt);} 00140 else {return defval;} 00141 }
|
|
return the integer value corresponding to the given option
Definition at line 125 of file CmdLine.cc. References string_val(). Referenced by int_val(), and main(). 00125 { 00126 int result; 00127 string optstring = string_val(opt); 00128 istringstream optstream(optstring); 00129 optstream >> result; 00130 if (optstream.fail()) { 00131 cerr << "Error: could not convert option ("<<opt<<") value (" 00132 <<optstring<<") to int"<<endl; 00133 exit(-1);} 00134 return result; 00135 }
|
|
true if the option is present
Definition at line 89 of file CmdLine.cc. References __options, and __options_used. Referenced by main(), and present_and_set(). 00089 { 00090 bool result = (__options.find(opt) != __options.end()); 00091 if (result) __options_used[opt] = true; 00092 return result; 00093 }
|
|
true if the option is present and corresponds to a value
Definition at line 96 of file CmdLine.cc. References __options, and present().
|
|
return the string value corresponding to the given option or default if option is absent
Definition at line 117 of file CmdLine.cc. References string_val(). 00117 { 00118 if (this->present_and_set(opt)) {return string_val(opt);} 00119 else {return defval;} 00120 }
|
|
return the string value corresponding to the given option
Definition at line 103 of file CmdLine.cc. References __arguments, __options, and __options_used. Referenced by double_val(), int_val(), string_val(), and value(). 00103 { 00104 if (!this->present_and_set(opt)) { 00105 cerr << "Error: Option "<<opt 00106 <<" is needed but is not present_and_set"<<endl; 00107 exit(-1); 00108 } 00109 string arg = __arguments[__options[opt]]; 00110 // this may itself look like an option -- if that is the case 00111 // declare the option to have been used 00112 if (arg.compare(0,1,"-") == 0) {__options_used[arg] = true;} 00113 return arg; 00114 }
|
|
Definition at line 128 of file CmdLine.hh. 00128 { 00129 if (this->present_and_set(opt)) {return value<T>(opt);} 00130 else {return defval;} 00131 }
|
|
returns the value of the argument converted to type T
Definition at line 113 of file CmdLine.hh. References _report_conversion_failure(), and string_val(). Referenced by main(). 00113 { 00114 T result; 00115 string optstring = string_val(opt); 00116 istringstream optstream(optstring); 00117 optstream >> result; 00118 if (optstream.fail()) _report_conversion_failure(opt, optstring); 00119 return result; 00120 }
|
|
Definition at line 52 of file CmdLine.hh. Referenced by arguments(), CmdLine(), init(), and string_val(). |
|
Definition at line 55 of file CmdLine.hh. Referenced by command_line(), and init(). |
|
Definition at line 51 of file CmdLine.hh. Referenced by init(), present(), present_and_set(), and string_val(). |
|
Definition at line 53 of file CmdLine.hh. Referenced by all_options_used(), init(), present(), and string_val(). |