Files
Gleb Mazovetskiy 957bd03b98 Remove FMT_COMPILE in "cold" places
Removes most `FMT_COMPILE` calls.
`FMT_COMPILE` results in better performance but larger code size.

Removes `FMT_COMPILE` calls for places that are called infrequently,
i.e. not on every frame.

RG-99 binary size reduced by ~4 KiB.
2023-03-12 19:29:35 +01:00

47 lines
1003 B
C++

#include "utils/format_int.hpp"
#include "utils/language.h"
#include "utils/stdcompat/string_view.hpp"
#include "utils/str_cat.hpp"
namespace devilution {
std::string FormatInteger(int n)
{
constexpr size_t GroupSize = 3;
char buf[40];
char *begin = buf;
const char *end = BufCopy(buf, n);
const size_t len = end - begin;
std::string out;
const size_t prefixLen = n < 0 ? 1 : 0;
const size_t numLen = len - prefixLen;
if (numLen <= GroupSize) {
out.append(begin, len);
return out;
}
const string_view separator = _(/* TRANSLATORS: Thousands separator */ ",");
out.reserve(len + separator.size() * (numLen - 1) / GroupSize);
if (n < 0) {
out += '-';
++begin;
}
size_t mlen = numLen % GroupSize;
if (mlen == 0)
mlen = GroupSize;
out.append(begin, mlen);
begin += mlen;
for (; begin != end; begin += GroupSize) {
AppendStrView(out, separator);
out.append(begin, GroupSize);
}
return out;
}
} // namespace devilution