00001 #ifndef COMMANDLINEPARSER_H
00002 #define COMMANDLINEPARSER_H
00003
00004 #include <string>
00005 #include <map>
00006 #include <list>
00007
00008 using namespace std;
00009
00102 class CommandLineParser{
00103 public:
00109 CommandLineParser(string description_text,int width_tokenfield=30) \
00110 : descriptiontext(description_text),
00111 tokenfield_width(width_tokenfield)
00112 {
00113 descriptiontext += string("\nCommand line switches:\n -h");
00114 descriptiontext += string(tokenfield_width-1,' ');
00115 descriptiontext += string(" - help\n");
00116 }
00117
00119 virtual ~CommandLineParser() {}
00120
00129 void addParameter(string token,string helptext,string defaultvalue=string());
00130
00140 void parse(int argc, char **argv,bool zeroArgsForHelp=false) throw(string);
00141
00148 string getArgument(string parameter) throw(string);
00149
00155 bool isSet(string parameter) { return !tokenvaluemap[parameter].empty(); }
00156
00165 long int getLongIntArgument(string parameter,int base=0) throw(string);
00166
00174 double getDoubleArgument(string parameter) throw(string);
00175
00182 bool getBooleanArgument(string parameter) throw(string);
00183
00191 list<int> getIntegerListArgument(string parameter) throw(string);
00192
00200 list<double> getDoubleListArgument(string parameter) throw(string);
00201
00206 string getHelpMessage() const { return descriptiontext; }
00207
00212 const list<string> &getRemainingArguments() const { return remaining_tokens; }
00213
00214 private:
00216 map<string,string> tokenvaluemap;
00218 string descriptiontext;
00220 const int tokenfield_width;
00222 list<string> remaining_tokens;
00223 };
00224
00225 #endif // COMMANDLINEPARSER_H