diff --git a/r5dev/public/tier0/utility.h b/r5dev/public/tier0/utility.h index db25e910..8c983f12 100644 --- a/r5dev/public/tier0/utility.h +++ b/r5dev/public/tier0/utility.h @@ -82,6 +82,7 @@ void PrintM128i64(__m128i in); void AppendPrintf(char* pBuffer, size_t nBufSize, char const* pFormat, ...); string PrintPercentageEscape(const string& svInput); +string FormatBytes(size_t nBytes); string FormatV(const char* szFormat, va_list args); string Format(const char* szFormat, ...); diff --git a/r5dev/tier0/utility.cpp b/r5dev/tier0/utility.cpp index cf7b5698..63aa39ac 100644 --- a/r5dev/tier0/utility.cpp +++ b/r5dev/tier0/utility.cpp @@ -987,6 +987,18 @@ string PrintPercentageEscape(const string& svInput) return result; } +/////////////////////////////////////////////////////////////////////////////// +// For formatting a STL string to a prettified representation of input bytes. +string FormatBytes(size_t nBytes) +{ + char szBuf[128] = ""; + const char* szPrefix[] = { "B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB" }; + const int iBase = 1024; + size_t c = (std::min)((size_t)(log((double)nBytes) / log((double)iBase)), (size_t)sizeof(szPrefix) - 1); + sprintf(szBuf, "%1.2lf %s", nBytes / pow((double)iBase, c), szPrefix[c]); + return string(szBuf); +} + /////////////////////////////////////////////////////////////////////////////// // For formatting a STL string using C-style format specifiers (va_list version). string FormatV(const char* szFormat, va_list args)