28 #include <algorithm> |
28 #include <algorithm> |
29 #include <lemon/error.h> |
29 #include <lemon/error.h> |
30 |
30 |
31 ///\ingroup misc |
31 ///\ingroup misc |
32 ///\file |
32 ///\file |
33 ///\brief A tools to parse command line arguments. |
33 ///\brief A tool to parse command line arguments. |
34 /// |
|
35 ///\author Alpar Juttner |
|
36 |
34 |
37 namespace lemon { |
35 namespace lemon { |
38 |
36 |
39 ///Command line arguments parser |
37 ///Command line arguments parser |
40 |
38 |
41 ///\ingroup misc |
39 ///\ingroup misc |
42 ///Command line arguments parser |
40 ///Command line arguments parser. |
43 /// |
41 /// |
|
42 ///For a complete example see the \ref arg_parser_demo.cc demo file. |
44 class ArgParser { |
43 class ArgParser { |
45 |
44 |
46 static void _showHelp(void *p); |
45 static void _showHelp(void *p); |
47 protected: |
46 protected: |
48 |
47 |
163 ///\param obl Indicate if the option is mandatory. |
162 ///\param obl Indicate if the option is mandatory. |
164 ArgParser &stringOption(const std::string &name, |
163 ArgParser &stringOption(const std::string &name, |
165 const std::string &help, |
164 const std::string &help, |
166 std::string value="", bool obl=false); |
165 std::string value="", bool obl=false); |
167 |
166 |
168 ///\name Options with an external strorage. |
167 ///\name Options with external storage |
169 ///Using this functions, the value of the option will be directly written |
168 ///Using this functions, the value of the option will be directly written |
170 ///into a variable once the option appears in the command line. |
169 ///into a variable once the option appears in the command line. |
171 |
170 |
172 ///@{ |
171 ///@{ |
173 |
172 |
220 ///@{ |
219 ///@{ |
221 |
220 |
222 ///Boundle some options into a group |
221 ///Boundle some options into a group |
223 |
222 |
224 /// You can group some option by calling this function repeatedly for each |
223 /// You can group some option by calling this function repeatedly for each |
225 /// option to be grupped with the same groupname. |
224 /// option to be grouped with the same groupname. |
226 ///\param group The group name |
225 ///\param group The group name. |
227 ///\param opt The option name |
226 ///\param opt The option name. |
228 ArgParser &optionGroup(const std::string &group, |
227 ArgParser &optionGroup(const std::string &group, |
229 const std::string &opt); |
228 const std::string &opt); |
230 |
229 |
231 ///Make the members of a group exclusive |
230 ///Make the members of a group exclusive |
232 |
231 |
240 ///must be given. |
239 ///must be given. |
241 ArgParser &mandatoryGroup(const std::string &group); |
240 ArgParser &mandatoryGroup(const std::string &group); |
242 |
241 |
243 ///Create synonym to an option |
242 ///Create synonym to an option |
244 |
243 |
245 ///With this function you can create a sysnonym called \c sys of the |
244 ///With this function you can create a synonym \c syn of the |
246 ///option \c opt. |
245 ///option \c opt. |
247 ArgParser &synonym(const std::string &syn, |
246 ArgParser &synonym(const std::string &syn, |
248 const std::string &opt); |
247 const std::string &opt); |
249 |
248 |
250 ///@} |
249 ///@} |
251 |
250 |
252 ///Give help string for non-parsed arguments. |
251 ///Give help string for non-parsed arguments. |
253 |
252 |
254 ///With this function you can give help string for non-parsed arguments. |
253 ///With this function you can give help string for non-parsed arguments. |
255 ///the parameter \c name will be printed in the short usage line, while |
254 ///The parameter \c name will be printed in the short usage line, while |
256 ///\c help gives a more detailed description. |
255 ///\c help gives a more detailed description. |
257 ArgParser &other(const std::string &name, |
256 ArgParser &other(const std::string &name, |
258 const std::string &help=""); |
257 const std::string &help=""); |
259 |
258 |
260 ///Non option type arguments. |
259 ///Give back the non-option type arguments. |
261 |
260 |
262 ///Gives back a reference to a vector consisting of the program arguments |
261 ///Give back a reference to a vector consisting of the program arguments |
263 ///not starting with a '-' character. |
262 ///not starting with a '-' character. |
264 std::vector<std::string> &files() { return _file_args; } |
263 std::vector<std::string> &files() { return _file_args; } |
265 |
264 |
266 ///Give back the command name (the 0th argument) |
265 ///Give back the command name (the 0th argument) |
267 const std::string &commandName() { return _command_name; } |
266 const std::string &commandName() { return _command_name; } |
296 |
295 |
297 |
296 |
298 ///Magic type for operator[] |
297 ///Magic type for operator[] |
299 |
298 |
300 ///This is the type of the return value of ArgParser::operator[](). |
299 ///This is the type of the return value of ArgParser::operator[](). |
301 ///It automatically converts to int, double, bool or std::string if |
300 ///It automatically converts to \c int, \c double, \c bool or |
302 ///the type of the option matches, otherwise it throws an exception. |
301 ///\c std::string if the type of the option matches, otherwise it |
303 ///(i.e. it performs runtime type checking). |
302 ///throws an exception (i.e. it performs runtime type checking). |
304 class RefType |
303 class RefType |
305 { |
304 { |
306 ArgParser &_parser; |
305 ArgParser &_parser; |
307 std::string _name; |
306 std::string _name; |
308 public: |
307 public: |