From d5869255e92787338676f03cd48e1067218899d1 Mon Sep 17 00:00:00 2001 From: Lee *!* Clagett Date: Sun, 5 Nov 2023 11:30:42 -0500 Subject: [PATCH] Fix lifetime bug in wire::as_array (debug_database) (#82) --- src/wire/write.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/wire/write.h b/src/wire/write.h index bc3c291..e968296 100644 --- a/src/wire/write.h +++ b/src/wire/write.h @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -206,8 +205,8 @@ namespace wire_write inline constexpr std::size_t array_size(const W& dest, const T& source) noexcept { return array_size_(dest.need_array_size(), source); } - template - inline void array(W& dest, const T& source) + template + inline void array(W& dest, const T& source, F f = {}) { using value_type = typename T::value_type; static_assert(!std::is_same::value, "write array of chars as binary"); @@ -215,7 +214,7 @@ namespace wire_write dest.start_array(array_size(dest, source)); for (const auto& elem : source) - bytes(dest, elem); + bytes(dest, f(elem)); dest.end_array(); } @@ -268,7 +267,7 @@ namespace wire template inline void write_bytes(W& dest, const as_array_ source) { - wire_write::array(dest, boost::adaptors::transform(source.get_value(), source.filter)); + wire_write::array(dest, source.get_value(), std::move(source.filter)); } template inline std::enable_if_t::value> write_bytes(W& dest, const T& source)