@@ -247,3 +247,82 @@ bool cmdlinet::parse(int argc, const char **argv, const char *optstring)
247
247
248
248
return false ;
249
249
}
250
+
251
+ cmdlinet::option_namest cmdlinet::option_names () const
252
+ {
253
+ return option_namest{*this };
254
+ }
255
+
256
+ cmdlinet::option_namest::option_names_iteratort::option_names_iteratort (
257
+ const cmdlinet *command_line,
258
+ std::size_t index)
259
+ : command_line(command_line), index(index)
260
+ {
261
+ goto_next_valid_index ();
262
+ }
263
+
264
+ cmdlinet::option_namest::option_names_iteratort &
265
+ cmdlinet::option_namest::option_names_iteratort::operator ++()
266
+ {
267
+ PRECONDITION (command_line != nullptr );
268
+ ++index ;
269
+ goto_next_valid_index ();
270
+ return *this ;
271
+ }
272
+ bool cmdlinet::option_namest::option_names_iteratort::is_valid_index () const
273
+ {
274
+ PRECONDITION (command_line != nullptr );
275
+ auto const &options = command_line->options ;
276
+ return index < options.size () && options[index ].isset &&
277
+ options[index ].islong ;
278
+ }
279
+
280
+ void cmdlinet::option_namest::option_names_iteratort::goto_next_valid_index ()
281
+ {
282
+ PRECONDITION (command_line != nullptr );
283
+ while (index < command_line->options .size () && !is_valid_index ())
284
+ {
285
+ ++index ;
286
+ }
287
+ }
288
+
289
+ const cmdlinet::option_namest::option_names_iteratort
290
+ cmdlinet::option_namest::option_names_iteratort::operator ++(int dummy)
291
+ {
292
+ return ++option_names_iteratort (*this );
293
+ }
294
+
295
+ const std::string &cmdlinet::option_namest::option_names_iteratort::operator *()
296
+ {
297
+ PRECONDITION (command_line != nullptr );
298
+ return command_line->options .at (index ).optstring ;
299
+ }
300
+
301
+ bool cmdlinet::option_namest::option_names_iteratort::
302
+ operator ==(const cmdlinet::option_namest::option_names_iteratort &other)
303
+ {
304
+ PRECONDITION (command_line != nullptr && command_line == other.command_line );
305
+ return index == other.index ;
306
+ }
307
+
308
+ bool cmdlinet::option_namest::option_names_iteratort::
309
+ operator !=(const cmdlinet::option_namest::option_names_iteratort &other)
310
+ {
311
+ PRECONDITION (command_line != nullptr && command_line == other.command_line );
312
+ return index != other.index ;
313
+ }
314
+
315
+ cmdlinet::option_namest::option_namest (const cmdlinet &command_line)
316
+ : command_line(command_line)
317
+ {
318
+ }
319
+
320
+ cmdlinet::option_namest::option_names_iteratort cmdlinet::option_namest::begin ()
321
+ {
322
+ return option_names_iteratort (&command_line, 0 );
323
+ }
324
+
325
+ cmdlinet::option_namest::option_names_iteratort cmdlinet::option_namest::end ()
326
+ {
327
+ return option_names_iteratort (&command_line, command_line.options .size ());
328
+ }
0 commit comments