11#ifndef TLX_CMDLINE_PARSER_HEADER
12#define TLX_CMDLINE_PARSER_HEADER
137 std::ostream& os,
const std::string& text,
138 size_t wraplen,
size_t indent_first = 0,
size_t indent_rest = 0,
139 size_t current = 0,
size_t indent_newline = 0);
164 void add_bool(
char key,
const std::string& longkey,
bool& dest,
165 const std::string& desc);
169 void add_flag(
char key,
const std::string& longkey,
bool& dest,
170 const std::string& desc);
174 void add_int(
char key,
const std::string& longkey,
int& dest,
175 const std::string& desc);
180 unsigned int& dest,
const std::string& desc);
184 void add_uint(
char key,
const std::string& longkey,
185 unsigned int& dest,
const std::string& desc);
188 void add_size_t(
char key,
const std::string& longkey,
189 size_t& dest,
const std::string& desc);
192 void add_float(
char key,
const std::string& longkey,
193 float& dest,
const std::string& desc);
196 void add_double(
char key,
const std::string& longkey,
197 double& dest,
const std::string& desc);
201 void add_bytes(
char key,
const std::string& longkey,
202 std::uint32_t& dest,
const std::string& desc);
206 void add_bytes(
char key,
const std::string& longkey,
207 std::uint64_t& dest,
const std::string& desc);
210 void add_string(
char key,
const std::string& longkey,
211 std::string& dest,
const std::string& desc);
215 char key,
const std::string& longkey,
216 std::vector<std::string>& dest,
const std::string& desc);
226 void add_bool(
const std::string& longkey,
bool& dest,
227 const std::string& desc);
231 void add_flag(
const std::string& longkey,
bool& dest,
232 const std::string& desc);
235 void add_int(
const std::string& longkey,
int& dest,
236 const std::string& desc);
240 unsigned int& dest,
const std::string& desc);
244 void add_uint(
const std::string& longkey,
245 unsigned int& dest,
const std::string& desc);
249 size_t& dest,
const std::string& desc);
252 void add_float(
const std::string& longkey,
253 float& dest,
const std::string& desc);
257 double& dest,
const std::string& desc);
260 void add_bytes(
const std::string& longkey,
261 std::uint32_t& dest,
const std::string& desc);
264 void add_bytes(
const std::string& longkey,
265 std::uint64_t& dest,
const std::string& desc);
269 std::string& dest,
const std::string& desc);
273 const std::string& longkey,
274 std::vector<std::string>& dest,
const std::string& desc);
286 char key,
const std::string& longkey,
287 const std::string& keytype,
bool& dest,
288 const std::string& desc);
293 char key,
const std::string& longkey,
294 const std::string& keytype,
bool& dest,
295 const std::string& desc);
300 char key,
const std::string& longkey,
301 const std::string& keytype,
int& dest,
302 const std::string& desc);
307 char key,
const std::string& longkey,
308 const std::string& keytype,
unsigned int& dest,
309 const std::string& desc);
314 char key,
const std::string& longkey,
315 const std::string& keytype,
unsigned int& dest,
316 const std::string& desc);
321 char key,
const std::string& longkey,
322 const std::string& keytype,
size_t& dest,
323 const std::string& desc);
328 char key,
const std::string& longkey,
329 const std::string& keytype,
float& dest,
330 const std::string& desc);
335 char key,
const std::string& longkey,
336 const std::string& keytype,
double& dest,
337 const std::string& desc);
342 char key,
const std::string& longkey,
343 const std::string& keytype, std::uint32_t& dest,
344 const std::string& desc);
349 char key,
const std::string& longkey,
350 const std::string& keytype, std::uint64_t& dest,
351 const std::string& desc);
355 char key,
const std::string& longkey,
356 const std::string& keytype, std::string& dest,
357 const std::string& desc);
361 char key,
const std::string& longkey,
362 const std::string& keytype, std::vector<std::string>& dest,
363 const std::string& desc);
374 const std::string& name,
int& dest,
const std::string& desc);
378 const std::string& name,
unsigned int& dest,
379 const std::string& desc);
384 const std::string& name,
unsigned int& dest,
385 const std::string& desc);
389 const std::string& name,
size_t& dest,
390 const std::string& desc);
394 const std::string& name,
float& dest,
395 const std::string& desc);
399 const std::string& name,
double& dest,
400 const std::string& desc);
405 const std::string& name, std::uint32_t& dest,
406 const std::string& desc);
411 const std::string& name, std::uint64_t& dest,
412 const std::string& desc);
416 const std::string& name, std::string& dest,
417 const std::string& desc);
423 const std::string& name, std::vector<std::string>& dest,
424 const std::string& desc);
436 const std::string& name,
int& dest,
const std::string& desc);
441 const std::string& name,
unsigned int& dest,
442 const std::string& desc);
447 const std::string& name,
unsigned int& dest,
448 const std::string& desc);
452 const std::string& name,
size_t& dest,
453 const std::string& desc);
457 const std::string& name,
float& dest,
458 const std::string& desc);
462 const std::string& name,
double& dest,
463 const std::string& desc);
468 const std::string& name, std::uint32_t& dest,
469 const std::string& desc);
474 const std::string& name, std::uint64_t& dest,
475 const std::string& desc);
479 const std::string& name, std::string& dest,
480 const std::string& desc);
486 const std::string& name, std::vector<std::string>& dest,
487 const std::string& desc);
504 const Argument* arg, std::ostream& os);
508 const Argument* arg, std::ostream& os);
519 int argc,
const char*
const* argv, std::ostream& os);
525 bool process(
int argc,
const char*
const* argv);
specialization of argument for boolean flags (can only be set to true).
specialization of argument for SI/IEC suffixes byte size options or parameters
specialization of argument for SI/IEC suffixes byte size options or parameters
specialization of argument for double options or parameters
specialization of argument for float options or parameters
specialization of argument for integer options or parameters
specialization of argument for size_t options or parameters
specialization of argument for string options or parameters
specialization of argument for multiple string options or parameters
specialization of argument for unsigned integer options or parameters
base class of all options and parameters
Command line parser which automatically fills variables and prints nice usage messages.
void add_flag(char key, const std::string &longkey, bool &dest, const std::string &desc)
add boolean option flag -key, –longkey with description and store to dest.
void add_opt_param_uint(const std::string &name, unsigned int &dest, const std::string &desc)
add optional unsigned integer parameter [name] with description and store to dest.
void print_param_error(int argc, const char *const *argv, const Argument *arg, std::ostream &os)
print error about parameter.
void add_size_t(char key, const std::string &longkey, size_t &dest, const std::string &desc)
add size_t option -key, –longkey with description and store to dest
void add_param_bytes(const std::string &name, std::uint32_t &dest, const std::string &desc)
add SI/IEC suffixes byte size parameter [name] with description and store to dest
ArgumentList option_list_
list of options available
void set_author(const std::string &author)
Set author of program, will be wrapped.
void add_param_stringlist(const std::string &name, std::vector< std::string > &dest, const std::string &desc)
add string list parameter [name] with description and store to dest.
size_t option_max_width_
formatting width for options, '-s, –switch <#>'
void add_bool(char key, const std::string &longkey, bool &dest, const std::string &desc)
add boolean option flag -key, –longkey with description and store to dest
CmdlineParser & sort()
sort options by key (but not the positional parameters)
void add_opt_param_int(const std::string &name, int &dest, const std::string &desc)
add optional signed integer parameter [name] with description and store to dest
void add_param_size_t(const std::string &name, size_t &dest, const std::string &desc)
add size_t parameter [name] with description and store to dest
void add_param_uint(const std::string &name, unsigned int &dest, const std::string &desc)
add unsigned integer parameter [name] with description and store to dest.
const char * program_name_
argv[0] for usage.
std::vector< Argument * > ArgumentList
option and parameter list type
CmdlineParser()
Constructor.
void add_opt_param_bytes(const std::string &name, std::uint32_t &dest, const std::string &desc)
add optional SI/IEC suffixes byte size parameter [name] with description and store to dest
void set_verbose_process(bool verbose_process)
Set verbose processing of command line arguments.
unsigned int line_wrap_
set line wrap length
void add_bytes(char key, const std::string &longkey, std::uint32_t &dest, const std::string &desc)
add SI/IEC suffixes byte size option -key, –longkey and store to 32-bit dest
void add_double(char key, const std::string &longkey, double &dest, const std::string &desc)
add double option -key, –longkey with description and store to dest
void add_opt_param_float(const std::string &name, float &dest, const std::string &desc)
add optional float parameter [name] with description and store to dest
static void output_wrap(std::ostream &os, const std::string &text, size_t wraplen, size_t indent_first=0, size_t indent_rest=0, size_t current=0, size_t indent_newline=0)
Wrap a long string at spaces into lines.
void print_result()
print nicely formatted result of processing to std::cout
bool verbose_process_
verbose processing of arguments
void add_opt_param_size_t(const std::string &name, size_t &dest, const std::string &desc)
add optional size_t parameter [name] with description and store to dest
ArgumentList param_list_
list of parameters, both required and optional
void calc_param_max(const Argument *arg)
update maximum formatting width for new parameter
void add_opt_param_double(const std::string &name, double &dest, const std::string &desc)
add optional double parameter [name] with description and store to dest
void add_param_double(const std::string &name, double &dest, const std::string &desc)
add double parameter [name] with description and store to dest
std::string author_
user set author of program, will be wrapped
void set_description(const std::string &description)
Set description of program, text will be wrapped.
~CmdlineParser()
Delete all added arguments.
void add_param_unsigned(const std::string &name, unsigned int &dest, const std::string &desc)
add unsigned integer parameter [name] with description and store to dest
void add_int(char key, const std::string &longkey, int &dest, const std::string &desc)
add signed integer option -key, –longkey with description and store to dest
void add_param_string(const std::string &name, std::string &dest, const std::string &desc)
add string parameter [name] with description and store to dest
void add_opt_param_unsigned(const std::string &name, unsigned int &dest, const std::string &desc)
add optional unsigned integer parameter [name] with description and store to dest
void add_param_int(const std::string &name, int &dest, const std::string &desc)
add signed integer parameter [name] with description and store to dest
void add_opt_param_string(const std::string &name, std::string &dest, const std::string &desc)
add optional string parameter [name] with description and store to dest
void add_unsigned(char key, const std::string &longkey, unsigned int &dest, const std::string &desc)
add unsigned integer option -key, –longkey with description and store to dest
void print_option_error(int argc, const char *const *argv, const Argument *arg, std::ostream &os)
print error about option.
void add_string(char key, const std::string &longkey, std::string &dest, const std::string &desc)
add string option -key, –longkey and store to dest
void add_float(char key, const std::string &longkey, float &dest, const std::string &desc)
add float option -key, –longkey with description and store to dest
void add_param_float(const std::string &name, float &dest, const std::string &desc)
add float parameter [name] with description and store to dest
void add_opt_param_stringlist(const std::string &name, std::vector< std::string > &dest, const std::string &desc)
add optional string parameter [name] with description and store to dest
void add_stringlist(char key, const std::string &longkey, std::vector< std::string > &dest, const std::string &desc)
add string list option -key, –longkey and store to dest
static constexpr int max_type_name_
maximum length of a type_name() result
void print_usage()
output to std::cout nicely formatted usage information including description of all parameters and op...
std::string description_
user set description of program, will be wrapped
void add_uint(char key, const std::string &longkey, unsigned int &dest, const std::string &desc)
add unsigned integer option -key, –longkey with description and store to dest.
size_t param_max_width_
formatting width for parameters, 'param <#>'
void calc_option_max(const Argument *arg)
update maximum formatting width for new option
bool process(int argc, const char *const *argv, std::ostream &os)
parse command line options as specified by the options and parameters added.