diff options
author | Fabian Dellwing <fabian.dellwing@gmail.com> | 2023-04-27 12:58:52 +0200 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2023-04-30 21:12:46 +0330 |
commit | 4ebc7306daece2ece9088e6e027de506ed0d2653 (patch) | |
tree | 2e627104f601b3587f953720bbce798571d60bea /Userland/Libraries | |
parent | f4ed9d5d83fc1a468d67032589fb1b00399eaa22 (diff) | |
download | serenity-4ebc7306daece2ece9088e6e027de506ed0d2653.zip |
LibCore: Implement integral ArgsParser positionals through a template
This matches the behaviour of options.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r-- | Userland/Libraries/LibCore/ArgsParser.cpp | 36 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/ArgsParser.h | 4 |
2 files changed, 19 insertions, 21 deletions
diff --git a/Userland/Libraries/LibCore/ArgsParser.cpp b/Userland/Libraries/LibCore/ArgsParser.cpp index da6d9ead75..aa3d0be53d 100644 --- a/Userland/Libraries/LibCore/ArgsParser.cpp +++ b/Userland/Libraries/LibCore/ArgsParser.cpp @@ -610,37 +610,35 @@ void ArgsParser::add_positional_argument(StringView& value, char const* help_str add_positional_argument(move(arg)); } -void ArgsParser::add_positional_argument(int& value, char const* help_string, char const* name, Required required) +template<Integral I> +void ArgsParser::add_positional_argument(I& value, char const* help_string, char const* name, Required required) { Arg arg { help_string, name, required == Required::Yes ? 1 : 0, 1, - [&value](StringView s) { - auto opt = s.to_int(); + [&value](StringView view) { + Optional<I> opt; + if constexpr (IsSigned<I>) + opt = view.to_int<I>(); + else + opt = view.to_uint<I>(); value = opt.value_or(0); return opt.has_value(); - } + }, }; add_positional_argument(move(arg)); } -void ArgsParser::add_positional_argument(unsigned& value, char const* help_string, char const* name, Required required) -{ - Arg arg { - help_string, - name, - required == Required::Yes ? 1 : 0, - 1, - [&value](StringView s) { - auto opt = s.to_uint(); - value = opt.value_or(0); - return opt.has_value(); - } - }; - add_positional_argument(move(arg)); -} +template void ArgsParser::add_positional_argument(int&, char const*, char const*, Required); +template void ArgsParser::add_positional_argument(long&, char const*, char const*, Required); +template void ArgsParser::add_positional_argument(long long&, char const*, char const*, Required); +template void ArgsParser::add_positional_argument(short&, char const*, char const*, Required); +template void ArgsParser::add_positional_argument(unsigned&, char const*, char const*, Required); +template void ArgsParser::add_positional_argument(unsigned long&, char const*, char const*, Required); +template void ArgsParser::add_positional_argument(unsigned long long&, char const*, char const*, Required); +template void ArgsParser::add_positional_argument(unsigned short&, char const*, char const*, Required); void ArgsParser::add_positional_argument(double& value, char const* help_string, char const* name, Required required) { diff --git a/Userland/Libraries/LibCore/ArgsParser.h b/Userland/Libraries/LibCore/ArgsParser.h index ba31e88847..5c30ff68de 100644 --- a/Userland/Libraries/LibCore/ArgsParser.h +++ b/Userland/Libraries/LibCore/ArgsParser.h @@ -102,8 +102,8 @@ public: void add_positional_argument(Arg&&); void add_positional_argument(DeprecatedString& value, char const* help_string, char const* name, Required required = Required::Yes); void add_positional_argument(StringView& value, char const* help_string, char const* name, Required required = Required::Yes); - void add_positional_argument(int& value, char const* help_string, char const* name, Required required = Required::Yes); - void add_positional_argument(unsigned& value, char const* help_string, char const* name, Required required = Required::Yes); + template<Integral I> + void add_positional_argument(I& value, char const* help_string, char const* name, Required required = Required::Yes); void add_positional_argument(double& value, char const* help_string, char const* name, Required required = Required::Yes); void add_positional_argument(Vector<DeprecatedString>& value, char const* help_string, char const* name, Required required = Required::Yes); void add_positional_argument(Vector<StringView>& value, char const* help_string, char const* name, Required required = Required::Yes); |