From fb2e0f734e075c7531f1df0b02eb3998bef812fd Mon Sep 17 00:00:00 2001 From: Max Kellermann <mk@cm4all.com> Date: Thu, 23 Feb 2023 18:13:01 +0100 Subject: [PATCH] lib/fmt/ToBuffer: add overload with StringBuffer parameter --- src/lib/fmt/ToBuffer.hxx | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/lib/fmt/ToBuffer.hxx b/src/lib/fmt/ToBuffer.hxx index cba9a4070..563223dda 100644 --- a/src/lib/fmt/ToBuffer.hxx +++ b/src/lib/fmt/ToBuffer.hxx @@ -10,16 +10,39 @@ #include <fmt/format.h> // for the fmt::buffer::flush() implementation #endif +template<std::size_t size> +StringBuffer<size> & +VFmtToBuffer(StringBuffer<size> &buffer, + fmt::string_view format_str, fmt::format_args args) noexcept +{ + auto [p, _] = fmt::vformat_to_n(buffer.begin(), buffer.capacity() - 1, + format_str, args); + *p = 0; + return buffer; +} + template<std::size_t size> [[nodiscard]] [[gnu::pure]] auto VFmtBuffer(fmt::string_view format_str, fmt::format_args args) noexcept { StringBuffer<size> buffer; - auto [p, _] = fmt::vformat_to_n(buffer.begin(), buffer.capacity() - 1, - format_str, args); - *p = 0; - return buffer; + return VFmtToBuffer(buffer, format_str, args); +} + +template<std::size_t size, typename S, typename... Args> +StringBuffer<size> & +FmtToBuffer(StringBuffer<size> &buffer, + const S &format_str, Args&&... args) noexcept +{ +#if FMT_VERSION >= 90000 + return VFmtToBuffer(buffer, format_str, + fmt::make_format_args(args...)); +#else + return VFmtToBuffer(buffer, fmt::to_string_view(format_str), + fmt::make_args_checked<Args...>(format_str, + args...)); +#endif } template<std::size_t size, typename S, typename... Args>