1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 06:47:35 +00:00

LibCore: Implement integral ArgsParser positionals through a template

This matches the behaviour of options.
This commit is contained in:
Fabian Dellwing 2023-04-27 12:58:52 +02:00 committed by Ali Mohammad Pur
parent f4ed9d5d83
commit 4ebc7306da
2 changed files with 19 additions and 21 deletions

View file

@ -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)
{