Skip to content

Commit 23a87a4

Browse files
kennethmyhratrflynn89
authored andcommitted
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 ','.
1 parent 269f9c6 commit 23a87a4

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

Userland/Libraries/LibCore/ArgsParser.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,32 @@ void ArgsParser::add_option(Optional<size_t>& value, const char* help_string, co
520520
add_option(move(option));
521521
}
522522

523+
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)
524+
{
525+
Option option {
526+
true,
527+
help_string,
528+
long_name,
529+
short_name,
530+
value_name,
531+
[&values, separator](char const* s) {
532+
bool parsed_all_values = true;
533+
534+
StringView { s }.for_each_split_view(separator, false, [&](auto value) {
535+
if (auto maybe_value = AK::StringUtils::convert_to_uint<size_t>(value); maybe_value.has_value())
536+
values.append(*maybe_value);
537+
else
538+
parsed_all_values = false;
539+
});
540+
541+
return parsed_all_values;
542+
},
543+
hidden
544+
};
545+
546+
add_option(move(option));
547+
}
548+
523549
void ArgsParser::add_positional_argument(Arg&& arg)
524550
{
525551
m_positional_args.append(move(arg));

Userland/Libraries/LibCore/ArgsParser.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class ArgsParser {
8080
void add_option(double& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
8181
void add_option(Optional<double>& value, char const* help_string, char const* long_name, char short_name, char const* value_name, bool hidden = false);
8282
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);
83+
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);
8384

8485
void add_positional_argument(Arg&&);
8586
void add_positional_argument(char const*& value, char const* help_string, char const* name, Required required = Required::Yes);

0 commit comments

Comments
 (0)