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)