Luna/luna/src/Units.cpp
apio 41b3c8adb2
All checks were successful
continuous-integration/drone/push Build is passing
Convert to_dynamic_unit to OwnedStringView and rename the old variant to to_dynamic_unit_cstr
2022-12-16 18:18:24 +01:00

32 lines
800 B
C++

#include <luna/Alloc.h>
#include <luna/Format.h>
#include <luna/Result.h>
#include <luna/ScopeGuard.h>
#include <luna/Units.h>
Result<usize> to_dynamic_unit_cstr(usize value, char* buffer, usize max)
{
if (value < 1024) { return string_format(buffer, max, "%u bytes", value); }
const char* unit_prefixes = "KMGTPE";
while (value > (1024 * 1024))
{
value /= 1024;
unit_prefixes++;
}
return string_format(buffer, max, "%u.%u %ciB", value / 1024, (value % 1024) / 103, *unit_prefixes);
}
Result<OwnedStringView> to_dynamic_unit(usize value)
{
char* buf = TRY(make_array<char>(64));
auto guard = make_scope_guard([&] { destroy_array(buf); });
TRY(to_dynamic_unit_cstr(value, buf, 64));
guard.deactivate();
return OwnedStringView{buf};
}