diff --git a/bench/formatter-bench.cpp b/bench/formatter-bench.cpp index 0dbf6d82..11ec2a31 100644 --- a/bench/formatter-bench.cpp +++ b/bench/formatter-bench.cpp @@ -50,8 +50,7 @@ void bench_formatters() for(auto &flag:all_flags) { auto pattern = std::string("%") + flag; - benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern); - + benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern)->Iterations(2500000); } // complex patterns @@ -62,7 +61,7 @@ void bench_formatters() }; for(auto &pattern:patterns) { - benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern); + benchmark::RegisterBenchmark(pattern.c_str(), bench_formatter, pattern)->Iterations(2500000); } } diff --git a/include/spdlog/details/fmt_helper.h b/include/spdlog/details/fmt_helper.h index 1f716ac5..de6f998f 100644 --- a/include/spdlog/details/fmt_helper.h +++ b/include/spdlog/details/fmt_helper.h @@ -110,6 +110,19 @@ inline void pad6(size_t n, fmt::basic_memory_buffer &dest) pad3(static_cast(n % 1000), dest); } + +template +inline void pad9(size_t n, fmt::basic_memory_buffer &dest) +{ + if (n > 99999999) + { + append_int(n, dest); + return; + } + pad6(static_cast(n / 1000), dest); + pad3(static_cast(n % 1000), dest); +} + // return fraction of a second of the given time_point. // e.g. // fraction(tp) -> will return the millis part of the second diff --git a/include/spdlog/details/pattern_formatter.h b/include/spdlog/details/pattern_formatter.h index 9d018fb8..a9b1a49c 100644 --- a/include/spdlog/details/pattern_formatter.h +++ b/include/spdlog/details/pattern_formatter.h @@ -486,7 +486,8 @@ public: scoped_pad p(field_size, padinfo_, dest); auto ns = fmt_helper::time_fraction(msg.time); - fmt::format_to(dest, "{:09}", ns.count()); + fmt_helper::pad9(static_cast(ns.count()), dest); + } }; diff --git a/tests/test_fmt_helper.cpp b/tests/test_fmt_helper.cpp index 415638ae..9ebbcf73 100644 --- a/tests/test_fmt_helper.cpp +++ b/tests/test_fmt_helper.cpp @@ -22,6 +22,13 @@ void test_pad6(std::size_t n, const char *expected) REQUIRE(fmt::to_string(buf) == expected); } +void test_pad9(std::size_t n, const char *expected) +{ + fmt::memory_buffer buf; + spdlog::details::fmt_helper::pad9(n, buf); + REQUIRE(fmt::to_string(buf) == expected); +} + TEST_CASE("pad2", "[fmt_helper]") { test_pad2(0, "00"); @@ -52,3 +59,19 @@ TEST_CASE("pad6", "[fmt_helper]") test_pad6(12345, "012345"); test_pad6(123456, "123456"); } + + +TEST_CASE("pad9", "[fmt_helper]") +{ + test_pad9(0,"000000000"); + test_pad9(3, "000000003"); + test_pad9(23, "000000023"); + test_pad9(123, "000000123"); + test_pad9(1234, "000001234"); + test_pad9(12345, "000012345"); + test_pad9(123456, "000123456"); + test_pad9(1234567, "001234567"); + test_pad9(12345678, "012345678"); + test_pad9(123456789, "123456789"); + test_pad9(1234567891, "1234567891"); +}