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

Everywhere: Use to_number<T> instead of to_{int,uint,float,double}

In a bunch of cases, this actually ends up simplifying the code as
to_number will handle something such as:

```
Optional<I> opt;
if constexpr (IsSigned<I>)
    opt = view.to_int<I>();
else
    opt = view.to_uint<I>();
```

For us.

The main goal here however is to have a single generic number conversion
API between all of the String classes.
This commit is contained in:
Shannon Booth 2023-12-23 15:59:14 +13:00 committed by Andreas Kling
parent a4ecc65398
commit e2e7c4d574
155 changed files with 397 additions and 412 deletions

View file

@ -172,7 +172,7 @@ static Optional<DateTime> parse_date_time(ReadonlySpan<StringView> segments)
return {};
DateTime date_time {};
date_time.year = segments[0].to_uint().value();
date_time.year = segments[0].to_number<unsigned>().value();
if (segments.size() > 1)
date_time.month = find_index(short_month_names.begin(), short_month_names.end(), segments[1]) + 1;
@ -186,15 +186,15 @@ static Optional<DateTime> parse_date_time(ReadonlySpan<StringView> segments)
date_time.after_weekday = find_index(short_day_names.begin(), short_day_names.end(), weekday);
auto day = segments[2].substring_view(*index + ">="sv.length());
date_time.day = day.to_uint().value();
date_time.day = day.to_number<unsigned>().value();
} else if (auto index = segments[2].find("<="sv); index.has_value()) {
auto weekday = segments[2].substring_view(0, *index);
date_time.before_weekday = find_index(short_day_names.begin(), short_day_names.end(), weekday);
auto day = segments[2].substring_view(*index + "<="sv.length());
date_time.day = day.to_uint().value();
date_time.day = day.to_number<unsigned>().value();
} else {
date_time.day = segments[2].to_uint().value();
date_time.day = segments[2].to_number<unsigned>().value();
}
}
@ -202,9 +202,9 @@ static Optional<DateTime> parse_date_time(ReadonlySpan<StringView> segments)
// FIXME: Some times end with a letter, e.g. "2:00u" and "2:00s". Figure out what this means and handle it.
auto time_segments = segments[3].split_view(':');
date_time.hour = time_segments[0].to_int().value();
date_time.minute = time_segments.size() > 1 ? time_segments[1].substring_view(0, 2).to_uint().value() : 0;
date_time.second = time_segments.size() > 2 ? time_segments[2].substring_view(0, 2).to_uint().value() : 0;
date_time.hour = time_segments[0].to_number<int>().value();
date_time.minute = time_segments.size() > 1 ? time_segments[1].substring_view(0, 2).to_number<unsigned>().value() : 0;
date_time.second = time_segments.size() > 2 ? time_segments[2].substring_view(0, 2).to_number<unsigned>().value() : 0;
}
return date_time;
@ -214,9 +214,9 @@ static i64 parse_time_offset(StringView segment)
{
auto segments = segment.split_view(':');
i64 hours = segments[0].to_int().value();
i64 minutes = segments.size() > 1 ? segments[1].to_uint().value() : 0;
i64 seconds = segments.size() > 2 ? segments[2].to_uint().value() : 0;
i64 hours = segments[0].to_number<int>().value();
i64 minutes = segments.size() > 1 ? segments[1].to_number<unsigned>().value() : 0;
i64 seconds = segments.size() > 2 ? segments[2].to_number<unsigned>().value() : 0;
i64 sign = ((hours < 0) || (segments[0] == "-0"sv)) ? -1 : 1;
return (hours * 3600) + sign * ((minutes * 60) + seconds);
@ -309,12 +309,12 @@ static void parse_rule(StringView rule_line, TimeZoneData& time_zone_data)
DaylightSavingsOffset dst_offset {};
dst_offset.offset = parse_time_offset(segments[8]);
dst_offset.year_from = segments[2].to_uint().value();
dst_offset.year_from = segments[2].to_number<unsigned>().value();
if (segments[3] == "only")
dst_offset.year_to = dst_offset.year_from;
else if (segments[3] != "max"sv)
dst_offset.year_to = segments[3].to_uint().value();
dst_offset.year_to = segments[3].to_number<unsigned>().value();
auto in_effect = Array { "0"sv, segments[5], segments[6], segments[7] };
dst_offset.in_effect = parse_date_time(in_effect).release_value();
@ -369,22 +369,22 @@ static ErrorOr<void> parse_time_zone_coordinates(Core::InputBufferedFile& file,
if (coordinate.length() == 5) {
// ±DDMM
parsed.degrees = coordinate.substring_view(0, 3).to_int().value();
parsed.minutes = coordinate.substring_view(3).to_int().value();
parsed.degrees = coordinate.substring_view(0, 3).template to_number<int>().value();
parsed.minutes = coordinate.substring_view(3).template to_number<int>().value();
} else if (coordinate.length() == 6) {
// ±DDDMM
parsed.degrees = coordinate.substring_view(0, 4).to_int().value();
parsed.minutes = coordinate.substring_view(4).to_int().value();
parsed.degrees = coordinate.substring_view(0, 4).template to_number<int>().value();
parsed.minutes = coordinate.substring_view(4).template to_number<int>().value();
} else if (coordinate.length() == 7) {
// ±DDMMSS
parsed.degrees = coordinate.substring_view(0, 3).to_int().value();
parsed.minutes = coordinate.substring_view(3, 2).to_int().value();
parsed.seconds = coordinate.substring_view(5).to_int().value();
parsed.degrees = coordinate.substring_view(0, 3).template to_number<int>().value();
parsed.minutes = coordinate.substring_view(3, 2).template to_number<int>().value();
parsed.seconds = coordinate.substring_view(5).template to_number<int>().value();
} else if (coordinate.length() == 8) {
// ±DDDDMMSS
parsed.degrees = coordinate.substring_view(0, 4).to_int().value();
parsed.minutes = coordinate.substring_view(4, 2).to_int().value();
parsed.seconds = coordinate.substring_view(6).to_int().value();
parsed.degrees = coordinate.substring_view(0, 4).template to_number<int>().value();
parsed.minutes = coordinate.substring_view(4, 2).template to_number<int>().value();
parsed.seconds = coordinate.substring_view(6).template to_number<int>().value();
} else {
VERIFY_NOT_REACHED();
}