1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 20:18:12 +00:00

LibCore: Add Vector<size_t> variant of add_option()

This adds a Vector<size_t> variant of add_option(). The signature
includes a separator parameter which defaults to ','.
This commit is contained in:
Kenneth Myhra 2022-03-25 22:11:05 +01:00 committed by Tim Flynn
parent 269f9c6863
commit 23a87a41ff
2 changed files with 27 additions and 0 deletions

View file

@ -520,6 +520,32 @@ void ArgsParser::add_option(Optional<size_t>& value, const char* help_string, co
add_option(move(option));
}
void ArgsParser::add_option(Vector<size_t>& values, char const* help_string, char const* long_name, char short_name, char const* value_name, char separator, bool hidden)
{
Option option {
true,
help_string,
long_name,
short_name,
value_name,
[&values, separator](char const* s) {
bool parsed_all_values = true;
StringView { s }.for_each_split_view(separator, false, [&](auto value) {
if (auto maybe_value = AK::StringUtils::convert_to_uint<size_t>(value); maybe_value.has_value())
values.append(*maybe_value);
else
parsed_all_values = false;
});
return parsed_all_values;
},
hidden
};
add_option(move(option));
}
void ArgsParser::add_positional_argument(Arg&& arg)
{
m_positional_args.append(move(arg));

View file

@ -80,6 +80,7 @@ public:
void add_option(double& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
void add_option(Optional<double>& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
void add_option(Optional<size_t>& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
void add_option(Vector<size_t>& values, char const* help_string, char const* long_name, char short_name, char const* value_name, char separator = ',', bool hidden = false);
void add_positional_argument(Arg&&);
void add_positional_argument(char const*& value, char const* help_string, char const* name, Required required = Required::Yes);