6 Arguments::Argument::Argument(
const char *argv): s(argv), used(false)
8 if (s[0] ==
'-' && s[1] ==
'-')
9 option = std::string_view(s.data() + 2, s.size() - 2);
12 void Arguments::update_index()
14 while (index < argc && args[index].used)
18 std::string_view Arguments::use_index()
21 args[index].used =
true;
22 const auto result = args[index].s;
27 Arguments::Arguments(
int argc,
const char *
const *argv):
32 for (
int i = 0; i < argc; i++)
33 args.emplace_back(argv[i]);
38 options.emplace_back(name, std::string_view{});
42 if (arg.option == name)
56 const char * description,
57 const char * default_string
60 options.emplace_back(name, description);
62 for (
size_t i = 0; i < args.size() - 1; i++)
64 if (args[i].option == name)
67 args[i + 1].used =
true;
73 return default_string;
79 const std::vector<const char *> &labels,
83 options.emplace_back(name, labels, default_index);
85 for (
size_t i = 0; i < args.size() - 1; i++)
87 if (args[i].option == name)
90 args[i + 1].used =
true;
93 for (
int j =
int(labels.size()); --j >= 0;)
94 if (labels[j] == args[i + 1].s)
99 std::string(
"invalid value for option ") + std::string(args[i].s) +
100 ": " + std::string(args[i + 1].s)
105 return default_index;
116 options.emplace_back(parameter);
123 return std::string_view{};
129 if (index < argc && args[index].s == s)
140 options.emplace_back(parameter);
145 out <<
"usage: " << args[0].s;
147 for (
const auto &option: options)
149 if (option.name.data())
153 if (option.parameter.data())
154 out <<
" <" << option.parameter <<
'>';
155 else if (option.labels)
157 for (
size_t i = 0; i < option.labels->size(); i++)
159 out << (i > 0 ?
'|' :
' ');
160 out << option.labels->at(i);
161 if (
size_t(option.default_index) == i)
167 else if (option.parameter.data())
168 out <<
' ' << option.parameter;
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)
bool has_flag(const char *name)
std::ostream & print_help(std::ostream &out) const
void add_parameter(const char *parameter)
#define JOEDB_DEBUG_ASSERT(x)
assertion tested in debug mode