summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorFabian Dellwing <fabian.dellwing@gmail.com>2023-04-27 12:58:52 +0200
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2023-04-30 21:12:46 +0330
commit4ebc7306daece2ece9088e6e027de506ed0d2653 (patch)
tree2e627104f601b3587f953720bbce798571d60bea /Userland/Libraries
parentf4ed9d5d83fc1a468d67032589fb1b00399eaa22 (diff)
downloadserenity-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.cpp36
-rw-r--r--Userland/Libraries/LibCore/ArgsParser.h4
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);