19 const char *
const *
const argv;
23 beman::cstring_view s;
24 beman::cstring_view option;
27 Argument(
const char *argv);
30 std::vector<Argument> args;
32 bool missing_arg =
false;
36 beman::cstring_view name;
37 beman::cstring_view parameter;
38 const std::vector<const char *> *labels =
nullptr;
39 const size_t default_index = 0;
41 Option(beman::cstring_view parameter):
46 Option(beman::cstring_view name, beman::cstring_view parameter):
54 beman::cstring_view name,
55 const std::vector<const char *> &labels,
60 default_index(default_index)
65 std::vector<Option> options;
68 beman::cstring_view use_index();
71 Arguments(
int argc,
const char *
const *argv);
79 const char * description,
80 const char * default_string
86 const std::vector<const char *> &labels,
93 const char * description,
97 options.emplace_back(name, description);
99 for (
size_t i = 0; i < args.size() - 1; i++)
101 if (args[i].option == name)
104 args[i + 1].used =
true;
108 if constexpr (std::is_same<T, std::string>::value || std::is_same<T, beman::cstring_view>::value)
109 result = args[i + 1].s;
111 std::istringstream(args[i + 1].s.c_str()) >> result;
116 return default_value;
122 const char * description,
126 options.emplace_back(name, description);
128 if (index < argc && args[index].option == name)
135 if constexpr (std::is_same<T, std::string>::value || std::is_same<T, beman::cstring_view>::value)
136 result = args[index].s;
138 std::istringstream(args[index].s.c_str()) >> result;
145 return default_value;
149 beman::cstring_view
get_next(
const char * parameter);
150 bool peek(beman::cstring_view s);
152 std::ostream &
print_help(std::ostream &out)
const;
158 size_t size()
const {
return args.size();}
159 beman::cstring_view
operator[](
size_t i)
const {
return args[i].s;}