1#ifndef joedb_Arguments_declared
2#define joedb_Arguments_declared
22 const char *
const *
const argv;
27 std::string_view option;
30 Argument(
const char *argv);
33 std::vector<Argument> args;
35 bool missing_arg =
false;
39 std::string_view name;
40 std::string_view parameter;
41 const std::vector<const char *> *labels =
nullptr;
42 const size_t default_index = 0;
44 Option(std::string_view parameter):
49 Option(std::string_view name, std::string_view parameter):
57 std::string_view name,
58 const std::vector<const char *> &labels,
63 default_index(default_index)
68 std::vector<Option> options;
71 std::string_view use_index();
74 Arguments(
int argc,
const char *
const *argv);
81 const char * description,
82 const char * default_string
88 const std::vector<const char *> &labels,
95 const char * description,
99 options.emplace_back(name, description);
101 for (
size_t i = 0; i < args.size() - 1; i++)
103 if (args[i].option == name)
106 args[i + 1].used =
true;
109 std::istringstream(args[i + 1].s.data()) >> result;
113 return default_value;
119 const char * description,
123 if (index < argc && args[index].option == name)
129 std::istringstream(args[index].s.data()) >> result;
135 return default_value;
139 std::string_view
get_next(
const char * parameter);
140 bool peek(
const char *s);
142 std::ostream &
print_help(std::ostream &out)
const;
147 size_t size()
const {
return args.size();}
148 std::string_view
operator[](
size_t i)
const {
return args[i].s;}
Class for conveniently parsing command-line arguments.
std::string_view operator[](size_t i) const
size_t get_enum_option(const char *name, const std::vector< const char * > &labels, size_t default_index)
std::string_view get_next()
std::string_view get_string_option(const char *name, const char *description, const char *default_string)
T next_option(const char *name, const char *description, T default_value)
int get_remaining_count() const
bool has_flag(const char *name)
T get_option(const char *name, const char *description, T default_value)
std::ostream & print_help(std::ostream &out) const
void add_parameter(const char *parameter)