From bed0cf9d04beb103a689ed1be09dbbd85f6fd2e5 Mon Sep 17 00:00:00 2001 From: Massimiliano Riva Date: Sun, 17 Mar 2024 20:34:14 +0100 Subject: [PATCH] Optimize string creation --- include/spdlog/pattern_formatter-inl.h | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/include/spdlog/pattern_formatter-inl.h b/include/spdlog/pattern_formatter-inl.h index 163e10fa..647ddd35 100644 --- a/include/spdlog/pattern_formatter-inl.h +++ b/include/spdlog/pattern_formatter-inl.h @@ -877,16 +877,24 @@ public: void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override { auto mdc_map = mdc::get_context(); if (!mdc_map.empty()) { - auto last_element = *(--mdc_map.end()); - for (const auto &pair : mdc_map) { - std::string mdc_content_; - if (pair != last_element) { - mdc_content_ = pair.first + ':' + pair.second + ' '; - } else { - mdc_content_ = pair.first + ':' + pair.second; + auto last_element = --mdc_map.end(); + for (auto it = mdc_map.begin(); it != mdc_map.end(); ++it) { + auto &pair = *it; + const auto &key = pair.first; + const auto &value = pair.second; + size_t content_size = key.size() + value.size() + 1; // 1 for ':' + + if (it != last_element) { + content_size++; // 1 for ' ' + } + + ScopedPadder p(content_size, padinfo_, dest); + fmt_helper::append_string_view(key, dest); + fmt_helper::append_string_view(":", dest); + fmt_helper::append_string_view(value, dest); + if (it != last_element) { + fmt_helper::append_string_view(" ", dest); } - ScopedPadder p(mdc_content_.size(), padinfo_, dest); - fmt_helper::append_string_view(mdc_content_, dest); } } }