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 uint32_t& dest,
const std::string& desc);
206 void add_bytes(
char key,
const std::string& longkey,
207 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 uint32_t& dest,
const std::string& desc);
264 void add_bytes(
const std::string& longkey,
265 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, uint32_t& dest,
344 const std::string& desc);
349 char key,
const std::string& longkey,
350 const std::string& keytype, 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, uint32_t& dest,
406 const std::string& desc);
411 const std::string& name, 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, uint32_t& dest,
469 const std::string& desc);
474 const std::string& name, 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);
base class of all options and parameters
ArgumentBytes32(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, uint32_t &dest)
contructor filling most attributes
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.
ArgumentSizeT(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, size_t &dest)
contructor filling most attributes
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, 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.
ArgumentInt(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, int &dest)
contructor filling most attributes
const char * program_name_
argv[0] for usage.
std::vector< Argument * > ArgumentList
option and parameter list type
CmdlineParser()
Constructor.
void set_verbose_process(bool verbose_process)
Set verbose processing of command line arguments.
void add_opt_param_bytes(const std::string &name, uint32_t &dest, const std::string &desc)
add optional SI/IEC suffixes byte size parameter [name] with description and store to dest
virtual bool process(int &argc, const char *const *&argv)=0
process one item from command line for this argument
unsigned int line_wrap_
set line wrap length
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
ArgumentBytes64(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, uint64_t &dest)
contructor filling most attributes
ArgumentDouble(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, double &dest)
contructor filling most attributes
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.
ArgumentBool(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, bool &dest)
contructor filling most attributes
void add_bytes(char key, const std::string &longkey, uint32_t &dest, const std::string &desc)
add SI/IEC suffixes byte size option -key, –longkey and store to 32-bit dest
~CmdlineParser()
Delete all added arguments.
ArgumentUnsigned(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, unsigned int &dest)
contructor filling most attributes
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
ArgumentStringlist(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, std::vector< std::string > &dest)
contructor filling most attributes
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
Argument(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required)
contructor filling most attributes
void add_param_float(const std::string &name, float &dest, const std::string &desc)
add float parameter [name] with description and store to dest
ArgumentFloat(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, float &dest)
contructor filling most attributes
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 <#>'
ArgumentString(char key, const std::string &longkey, const std::string &keytype, const std::string &desc, bool required, std::string &dest)
contructor filling most attributes
void calc_option_max(const Argument *arg)
update maximum formatting width for new option