* Format a given number as a number of bytes with the SI prefix. * @param builder the string builder to write to * @param number the number of bytes to write down */
| 535 | * @param number the number of bytes to write down |
| 536 | */ |
| 537 | static void FormatBytes(StringBuilder &builder, int64_t number) |
| 538 | { |
| 539 | assert(number >= 0); |
| 540 | |
| 541 | /* 1 2^10 2^20 2^30 2^40 2^50 2^60 */ |
| 542 | static const std::string_view iec_prefixes[] = {"", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei"}; |
| 543 | uint id = 1; |
| 544 | while (number >= 1024 * 1024) { |
| 545 | number /= 1024; |
| 546 | id++; |
| 547 | } |
| 548 | |
| 549 | if (number < 1024) { |
| 550 | id = 0; |
| 551 | fmt::format_to(builder.back_inserter(), "{}", number); |
| 552 | } else if (number < 1024 * 10) { |
| 553 | fmt::format_to(builder.back_inserter(), "{}{}{:02}", number / 1024, GetDecimalSeparator(), (number % 1024) * 100 / 1024); |
| 554 | } else if (number < 1024 * 100) { |
| 555 | fmt::format_to(builder.back_inserter(), "{}{}{:01}", number / 1024, GetDecimalSeparator(), (number % 1024) * 10 / 1024); |
| 556 | } else { |
| 557 | assert(number < 1024 * 1024); |
| 558 | fmt::format_to(builder.back_inserter(), "{}", number / 1024); |
| 559 | } |
| 560 | |
| 561 | assert(id < lengthof(iec_prefixes)); |
| 562 | fmt::format_to(builder.back_inserter(), NBSP "{}B", iec_prefixes[id]); |
| 563 | } |
| 564 | |
| 565 | static void FormatYmdString(StringBuilder &builder, TimerGameCalendar::Date date, uint case_index) |
| 566 | { |
no test coverage detected