gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Doc improvements related to ArgParser
0 2 0
default
2 files changed with 80 insertions and 47 deletions:
↑ Collapse diff ↑
Ignore white space 6 line context
... ...
@@ -29,43 +29,62 @@
29 29
using namespace lemon;
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:
71 90
    std::cout << "  No file argument was given.\n";
... ...
@@ -80,4 +99,5 @@
80 99
  for(unsigned int i=0;i<ap.files().size();++i)
81 100
    std::cout << "    '" << ap.files()[i] << "'\n";
82 101
  
102
  return 0;
83 103
}
Ignore white space 6 line context
... ...
@@ -118,13 +118,19 @@
118 118
    
119 119
  public:
120 120

	
121
    ///\e
121
    ///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.
130 136
    ///\param value A default value for the option.
... ...
@@ -135,6 +141,7 @@
135 141

	
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.
140 147
    ///\param value A default value for the option.
... ...
@@ -145,6 +152,7 @@
145 152

	
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.
150 158
    ///\param value A default value for the option.
... ...
@@ -156,6 +164,7 @@
156 164

	
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.
161 170
    ///\param value A default value for the option.
... ...
@@ -164,7 +173,17 @@
164 173
		      const std::string &help,
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.
170 189

	
... ...
@@ -172,6 +191,7 @@
172 191

	
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.
177 197
    ///\param obl Indicate if the option is mandatory.
... ...
@@ -182,6 +202,7 @@
182 202

	
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.
187 208
    ///\param obl Indicate if the option is mandatory.
... ...
@@ -192,6 +213,7 @@
192 213

	
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.
197 219
    ///\param obl Indicate if the option is mandatory.
... ...
@@ -203,6 +225,7 @@
203 225

	
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.
208 231
    ///\param obl Indicate if the option is mandatory.
... ...
@@ -218,7 +241,7 @@
218 241
    
219 242
    ///@{
220 243

	
221
    ///Boundle some options into a group
244
    ///Bundle some options into a group
222 245

	
223 246
    /// You can group some option by calling this function repeatedly for each
224 247
    /// option to be grouped with the same groupname.
... ...
@@ -230,7 +253,7 @@
230 253
    ///Make the members of a group exclusive
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
  
236 259
    ///Make a group mandatory
... ...
@@ -248,23 +271,6 @@
248 271
    
249 272
    ///@}
250 273

	
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, while
255
    ///\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 arguments
262
    ///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

	
268 274
    void show(std::ostream &os,Opts::iterator i);
269 275
    void show(std::ostream &os,Groups::iterator i);
270 276
    void showHelp(Opts::iterator i);
... ...
@@ -286,6 +292,9 @@
286 292
      return parse();
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) 
291 300
    {
... ...
@@ -360,10 +369,14 @@
360 369
    {
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
0 comments (0 inline)