Changeset 204:77d56a21c3ab in lemon
- Timestamp:
- 07/12/08 10:21:44 (16 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
demo/arg_parser_demo.cc
r137 r204 30 30 int main(int argc, const char **argv) 31 31 { 32 ArgParser ap(argc,argv); 32 // Initialize the argument parser 33 ArgParser ap(argc, argv); 33 34 int i; 34 35 std::string s; 35 double d; 36 bool b,sil; 37 bool g1,g2,g3; 38 ap.refOption("n", "An integer input.", i, true) 39 .refOption("val", "A double input.", d) 40 .doubleOption("val2", "A double input.", d) 41 .synonym("vals","val") 42 .refOption("name", "A string input.", s) 43 .refOption("f", "A switch.", b) 44 .refOption("nohelp", "", sil) 45 .refOption("gra","Choice A",g1) 46 .refOption("grb","Choice B",g2) 47 .refOption("grc","Choice C",g3) 48 .optionGroup("gr","gra") 49 .optionGroup("gr","grb") 50 .optionGroup("gr","grc") 51 .mandatoryGroup("gr") 52 .onlyOneGroup("gr") 53 .other("infile","The input file.") 36 double d = 1.0; 37 bool b, nh; 38 bool g1, g2, g3; 39 40 // Add a mandatory integer option with storage reference 41 ap.refOption("n", "An integer input.", i, true); 42 // Add a double option with storage reference (the default value is 1.0) 43 ap.refOption("val", "A double input.", d); 44 // Add a double option without storage reference (the default value is 3.14) 45 ap.doubleOption("val2", "A double input.", 3.14); 46 // Set synonym for -val option 47 ap.synonym("vals", "val"); 48 // Add a string option 49 ap.refOption("name", "A string input.", s); 50 // Add bool options 51 ap.refOption("f", "A switch.", b) 52 .refOption("nohelp", "", nh) 53 .refOption("gra", "Choice A", g1) 54 .refOption("grb", "Choice B", g2) 55 .refOption("grc", "Choice C", g3); 56 // Bundle -gr* options into a group 57 ap.optionGroup("gr", "gra") 58 .optionGroup("gr", "grb") 59 .optionGroup("gr", "grc"); 60 // Set the group mandatory 61 ap.mandatoryGroup("gr"); 62 // Set the options of the group exclusive (only one option can be given) 63 ap.onlyOneGroup("gr"); 64 // Add non-parsed arguments (e.g. input files) 65 ap.other("infile", "The input file.") 54 66 .other("..."); 55 67 68 // Perform the parsing process 69 // (in case of any error it terminates the program) 56 70 ap.parse(); 57 71 72 // Check each option if it has been given and print its value 58 73 std::cout << "Parameters of '" << ap.commandName() << "':\n"; 59 74 60 if(ap.given("n"))std::cout << " Value of -n: " << i << std::endl;75 std::cout << " Value of -n: " << i << std::endl; 61 76 if(ap.given("val")) std::cout << " Value of -val: " << d << std::endl; 77 if(ap.given("val2")) { 78 d = ap["val2"]; 79 std::cout << " Value of -val2: " << d << std::endl; 80 } 62 81 if(ap.given("name")) std::cout << " Value of -name: " << s << std::endl; 63 82 if(ap.given("f")) std::cout << " -f is given\n"; 64 if(ap.given("nohelp")) std::cout << " Value of -nohelp: " << sil<< std::endl;83 if(ap.given("nohelp")) std::cout << " Value of -nohelp: " << nh << std::endl; 65 84 if(ap.given("gra")) std::cout << " -gra is given\n"; 66 85 if(ap.given("grb")) std::cout << " -grb is given\n"; 67 86 if(ap.given("grc")) std::cout << " -grc is given\n"; 68 87 69 88 switch(ap.files().size()) { 70 89 case 0: … … 81 100 std::cout << " '" << ap.files()[i] << "'\n"; 82 101 102 return 0; 83 103 } -
lemon/arg_parser.h
r108 r204 119 119 public: 120 120 121 /// \e121 ///Constructor 122 122 ArgParser(int argc, const char **argv); 123 123 124 124 ~ArgParser(); 125 125 126 ///\name Options 127 /// 128 129 ///@{ 130 126 131 ///Add a new integer type option 127 132 133 ///Add a new integer type option. 128 134 ///\param name The name of the option. The leading '-' must be omitted. 129 135 ///\param help A help string. … … 136 142 ///Add a new floating point type option 137 143 144 ///Add a new floating point type option. 138 145 ///\param name The name of the option. The leading '-' must be omitted. 139 146 ///\param help A help string. … … 146 153 ///Add a new bool type option 147 154 155 ///Add a new bool type option. 148 156 ///\param name The name of the option. The leading '-' must be omitted. 149 157 ///\param help A help string. … … 157 165 ///Add a new string type option 158 166 167 ///Add a new string type option. 159 168 ///\param name The name of the option. The leading '-' must be omitted. 160 169 ///\param help A help string. … … 165 174 std::string value="", bool obl=false); 166 175 167 ///\name Options with external storage 176 ///Give help string for non-parsed arguments. 177 178 ///With this function you can give help string for non-parsed arguments. 179 ///The parameter \c name will be printed in the short usage line, while 180 ///\c help gives a more detailed description. 181 ArgParser &other(const std::string &name, 182 const std::string &help=""); 183 184 ///@} 185 186 ///\name Options with External Storage 168 187 ///Using this functions, the value of the option will be directly written 169 188 ///into a variable once the option appears in the command line. … … 173 192 ///Add a new integer type option with a storage reference 174 193 194 ///Add a new integer type option with a storage reference. 175 195 ///\param name The name of the option. The leading '-' must be omitted. 176 196 ///\param help A help string. … … 183 203 ///Add a new floating type option with a storage reference 184 204 205 ///Add a new floating type option with a storage reference. 185 206 ///\param name The name of the option. The leading '-' must be omitted. 186 207 ///\param help A help string. … … 193 214 ///Add a new bool type option with a storage reference 194 215 216 ///Add a new bool type option with a storage reference. 195 217 ///\param name The name of the option. The leading '-' must be omitted. 196 218 ///\param help A help string. … … 204 226 ///Add a new string type option with a storage reference 205 227 228 ///Add a new string type option with a storage reference. 206 229 ///\param name The name of the option. The leading '-' must be omitted. 207 230 ///\param help A help string. … … 219 242 ///@{ 220 243 221 ///B oundle some options into a group244 ///Bundle some options into a group 222 245 223 246 /// You can group some option by calling this function repeatedly for each … … 231 254 232 255 ///If you call this function for a group, than at most one of them can be 233 ///given at the same time 256 ///given at the same time. 234 257 ArgParser &onlyOneGroup(const std::string &group); 235 258 … … 248 271 249 272 ///@} 250 251 ///Give help string for non-parsed arguments.252 253 ///With this function you can give help string for non-parsed arguments.254 ///The parameter \c name will be printed in the short usage line, while255 ///\c help gives a more detailed description.256 ArgParser &other(const std::string &name,257 const std::string &help="");258 259 ///Give back the non-option type arguments.260 261 ///Give back a reference to a vector consisting of the program arguments262 ///not starting with a '-' character.263 std::vector<std::string> &files() { return _file_args; }264 265 ///Give back the command name (the 0th argument)266 const std::string &commandName() { return _command_name; }267 273 268 274 void show(std::ostream &os,Opts::iterator i); … … 287 293 } 288 294 295 ///Give back the command name (the 0th argument) 296 const std::string &commandName() { return _command_name; } 297 289 298 ///Check if an opion has been given to the command. 290 299 bool given(std::string op) … … 361 370 return RefType(*this, n); 362 371 } 372 373 ///Give back the non-option type arguments. 374 375 ///Give back a reference to a vector consisting of the program arguments 376 ///not starting with a '-' character. 377 std::vector<std::string> &files() { return _file_args; } 363 378 364 379 }; 365 380 } 366 381 367 368 369 #endif // LEMON_MAIN_PARAMS 382 #endif // LEMON_ARG_PARSER
Note: See TracChangeset
for help on using the changeset viewer.