9 #include "quill/bundled/fmt/base.h" 10 #include "quill/core/Attributes.h" 11 #include "quill/core/Codec.h" 12 #include "quill/core/DynamicFormatArgStore.h" 13 #include "quill/core/InlinedVector.h" 18 #include <string_view> 19 #include <type_traits> 101 static size_t compute_encoded_size(quill::detail::SizeCacheVector& conditional_arg_size_cache, T
const& arg)
106 if constexpr (fmtquill::detail::is_view<T>::value)
108 return sizeof(uint32_t) +
109 conditional_arg_size_cache.push_back(
110 detail::clamp_encoded_string_length(fmtquill::formatted_size(
"{}", T{arg})));
114 return sizeof(uint32_t) +
115 conditional_arg_size_cache.push_back(
116 detail::clamp_encoded_string_length(fmtquill::formatted_size(
"{}", arg)));
120 static void encode(std::byte*& buffer, quill::detail::SizeCacheVector
const& conditional_arg_size_cache,
121 uint32_t& conditional_arg_size_cache_index, T
const& arg)
123 uint32_t
const len = conditional_arg_size_cache[conditional_arg_size_cache_index++];
124 std::memcpy(buffer, &len,
sizeof(len));
125 buffer +=
sizeof(len);
127 if constexpr (fmtquill::detail::is_view<T>::value)
131 QUILL_MAYBE_UNUSED
auto const result =
132 fmtquill::format_to_n(reinterpret_cast<char*>(buffer), len,
"{}", T{arg});
133 assert_formatted_size_matches_encoded_size(result.size, len);
137 QUILL_MAYBE_UNUSED
auto const result =
138 fmtquill::format_to_n(reinterpret_cast<char*>(buffer), len,
"{}", arg);
139 assert_formatted_size_matches_encoded_size(result.size, len);
145 static std::string_view decode_arg(std::byte*& buffer)
147 return quill::Codec<std::string>::decode_arg(buffer);
150 static void decode_and_store_arg(std::byte*& buffer, quill::DynamicFormatArgStore* args_store)
152 args_store->push_back(decode_arg(buffer));
156 static void assert_formatted_size_matches_encoded_size(QUILL_MAYBE_UNUSED
size_t formatted_size,
157 QUILL_MAYBE_UNUSED uint32_t len) noexcept
163 QUILL_ASSERT(static_cast<uint32_t>(formatted_size) == len,
164 "DirectFormatCodec: fmtquill::formatter<T> produced a different byte count " 165 "between formatted_size() and format_to_n(). The formatter must be a pure " 166 "function of its argument");
172 template <
typename T>
Definition: UserDefinedDirectFormatFuzzer.cpp:81
Codec contract notes (apply to this primary template and every specialization, including those in the...
Definition: Codec.h:168