Skip to content

Commit

Permalink
dynamic store arg patch
Browse files Browse the repository at this point in the history
  • Loading branch information
odygrd committed May 17, 2024
1 parent b9c320c commit aaa7fcb
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 32 deletions.
52 changes: 26 additions & 26 deletions quill/include/quill/core/Codec.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ void inline wide_string_to_narrow(void* dest, size_t required_bytes, std::wstrin

/** typename = void for specializations with enable_if **/
template <typename Arg, typename = void>
struct CalculateArgSize
struct ArgSizeCalculator
{
QUILL_ATTRIBUTE_HOT static inline size_t calculate(std::vector<size_t>&, Arg const&) noexcept
{
Expand All @@ -95,7 +95,7 @@ struct CalculateArgSize

/***/
template <typename Arg>
struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_arithmetic<Arg>, std::is_enum<Arg>>>>
struct ArgSizeCalculator<Arg, std::enable_if_t<std::disjunction_v<std::is_arithmetic<Arg>, std::is_enum<Arg>>>>
{
QUILL_ATTRIBUTE_HOT static constexpr size_t calculate(std::vector<size_t>&, Arg) noexcept
{
Expand All @@ -105,7 +105,7 @@ struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_arithme

/***/
template <typename Arg>
struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, char*>, std::is_same<Arg, char const*>>>>
struct ArgSizeCalculator<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, char*>, std::is_same<Arg, char const*>>>>
{
QUILL_ATTRIBUTE_HOT static inline size_t calculate(std::vector<size_t>& c_style_string_length_cache,
char const* arg) noexcept
Expand All @@ -118,7 +118,7 @@ struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Ar

/***/
template <std::size_t N>
struct CalculateArgSize<char[N]>
struct ArgSizeCalculator<char[N]>
{
QUILL_ATTRIBUTE_HOT static inline size_t calculate(std::vector<size_t>& c_style_string_length_cache,
char const (&arg)[N]) noexcept
Expand All @@ -130,7 +130,7 @@ struct CalculateArgSize<char[N]>

/***/
template <typename Arg>
struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::string>, std::is_same<Arg, std::string_view>>>>
struct ArgSizeCalculator<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::string>, std::is_same<Arg, std::string_view>>>>
{
QUILL_ATTRIBUTE_HOT static inline size_t calculate(std::vector<size_t>&, Arg const& arg) noexcept
{
Expand All @@ -145,7 +145,7 @@ struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Ar
#if defined(_WIN32)
/***/
template <typename Arg>
struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, wchar_t*>, std::is_same<Arg, wchar_t const*>>>>
struct ArgSizeCalculator<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, wchar_t*>, std::is_same<Arg, wchar_t const*>>>>
{
QUILL_ATTRIBUTE_HOT static inline size_t calculate(std::vector<size_t>& c_style_string_length_cache,
wchar_t const* arg) noexcept
Expand All @@ -160,7 +160,7 @@ struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Ar

/***/
template <typename Arg>
struct CalculateArgSize<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::wstring>, std::is_same<Arg, std::wstring_view>>>>
struct ArgSizeCalculator<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::wstring>, std::is_same<Arg, std::wstring_view>>>>
{
QUILL_ATTRIBUTE_HOT static inline size_t calculate(std::vector<size_t>& c_style_string_length_cache,
Arg const& arg) noexcept
Expand All @@ -184,13 +184,13 @@ QUILL_NODISCARD QUILL_ATTRIBUTE_HOT inline size_t calculate_args_size_and_popula
{
// Do not use fold expression with '+ ...' as we need a guaranteed sequence for the args here
size_t total_sum{0};
((total_sum += CalculateArgSize<remove_cvref_t<Args>>::calculate(c_style_string_length_cache, args)), ...);
((total_sum += ArgSizeCalculator<remove_cvref_t<Args>>::calculate(c_style_string_length_cache, args)), ...);
return total_sum;
}

/** typename = void for specializations with enable_if **/
template <typename Arg, typename = void>
struct Encode
struct Encoder
{
QUILL_ATTRIBUTE_HOT static inline void encode(std::byte*&, std::vector<size_t> const&, uint32_t&, Arg const&) noexcept
{
Expand All @@ -200,7 +200,7 @@ struct Encode

/***/
template <typename Arg>
struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_arithmetic<Arg>, std::is_enum<Arg>>>>
struct Encoder<Arg, std::enable_if_t<std::disjunction_v<std::is_arithmetic<Arg>, std::is_enum<Arg>>>>
{
QUILL_ATTRIBUTE_HOT static inline void encode(std::byte*& buffer, std::vector<size_t> const&,
uint32_t&, Arg arg) noexcept
Expand All @@ -212,7 +212,7 @@ struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_arithmetic<Arg>,

/***/
template <typename Arg>
struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, char*>, std::is_same<Arg, char const*>>>>
struct Encoder<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, char*>, std::is_same<Arg, char const*>>>>
{
QUILL_ATTRIBUTE_HOT static inline void encode(std::byte*& buffer, std::vector<size_t> const& c_style_string_lengths_cache,
uint32_t& c_style_string_lengths_cache_index,
Expand All @@ -227,7 +227,7 @@ struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, char*>,

/***/
template <typename Arg>
struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::string>, std::is_same<Arg, std::string_view>>>>
struct Encoder<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::string>, std::is_same<Arg, std::string_view>>>>
{
QUILL_ATTRIBUTE_HOT static inline void encode(std::byte*& buffer, std::vector<size_t> const&,
uint32_t&, Arg const& arg) noexcept
Expand All @@ -249,7 +249,7 @@ struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::st

/***/
template <std::size_t N>
struct Encode<char[N]>
struct Encoder<char[N]>
{
QUILL_ATTRIBUTE_HOT static inline void encode(std::byte*& buffer, std::vector<size_t> const& c_style_string_lengths_cache,
uint32_t& c_style_string_lengths_cache_index,
Expand All @@ -276,7 +276,7 @@ struct Encode<char[N]>
#if defined(_WIN32)
/***/
template <typename Arg>
struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, wchar_t*>, std::is_same<Arg, wchar_t const*>>>>
struct Encoder<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, wchar_t*>, std::is_same<Arg, wchar_t const*>>>>
{
QUILL_ATTRIBUTE_HOT static inline void encode(std::byte*& buffer, std::vector<size_t> const& c_style_string_lengths_cache,
uint32_t& c_style_string_lengths_cache_index,
Expand All @@ -299,7 +299,7 @@ struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, wchar_t

/***/
template <typename Arg>
struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::wstring>, std::is_same<Arg, std::wstring_view>>>>
struct Encoder<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::wstring>, std::is_same<Arg, std::wstring_view>>>>
{
QUILL_ATTRIBUTE_HOT static inline void encode(std::byte*& buffer, std::vector<size_t> const& c_style_string_lengths_cache,
uint32_t& c_style_string_lengths_cache_index,
Expand All @@ -320,7 +320,7 @@ struct Encode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::ws
#endif

/**
* @brief Encodes multiple arguments into a buffer.
* @brief Encoders multiple arguments into a buffer.
* @param buffer Pointer to the buffer for encoding.
* @param c_style_string_lengths Array storing the c_style_string_lengths of C-style strings and char arrays.
* @param args The arguments to be encoded.
Expand All @@ -330,12 +330,12 @@ QUILL_ATTRIBUTE_HOT inline void encode(std::byte*& buffer, std::vector<size_t> c
Args const&... args) noexcept
{
QUILL_MAYBE_UNUSED uint32_t c_style_string_lengths_cache_index{0};
(Encode<Args>::encode(buffer, c_style_string_length_cache, c_style_string_lengths_cache_index, args), ...);
(Encoder<Args>::encode(buffer, c_style_string_length_cache, c_style_string_lengths_cache_index, args), ...);
}

/** typename = void for specializations with enable_if **/
template <typename Arg, typename = void>
struct Decode
struct Decoder
{
QUILL_ATTRIBUTE_HOT static inline void decode(std::byte*&,
fmtquill::dynamic_format_arg_store<fmtquill::format_context>*)
Expand All @@ -346,7 +346,7 @@ struct Decode

/***/
template <typename Arg>
struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_arithmetic<Arg>, std::is_enum<Arg>>>>
struct Decoder<Arg, std::enable_if_t<std::disjunction_v<std::is_arithmetic<Arg>, std::is_enum<Arg>>>>
{
QUILL_ATTRIBUTE_HOT static inline Arg decode(std::byte*& buffer,
fmtquill::dynamic_format_arg_store<fmtquill::format_context>* args_store)
Expand All @@ -366,7 +366,7 @@ struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_arithmetic<Arg>,

/***/
template <typename Arg>
struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, char*>, std::is_same<Arg, char const*>>>>
struct Decoder<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, char*>, std::is_same<Arg, char const*>>>>
{
QUILL_ATTRIBUTE_HOT static inline char const* decode(
std::byte*& buffer, fmtquill::dynamic_format_arg_store<fmtquill::format_context>* args_store)
Expand All @@ -385,7 +385,7 @@ struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, char*>,

/***/
template <typename Arg>
struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::string>, std::is_same<Arg, std::string_view>>>>
struct Decoder<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::string>, std::is_same<Arg, std::string_view>>>>
{
QUILL_ATTRIBUTE_HOT static inline std::string_view decode(
std::byte*& buffer, fmtquill::dynamic_format_arg_store<fmtquill::format_context>* args_store)
Expand All @@ -411,7 +411,7 @@ struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::st

/***/
template <std::size_t N>
struct Decode<char[N]>
struct Decoder<char[N]>
{
QUILL_ATTRIBUTE_HOT static inline char const* decode(
std::byte*& buffer, fmtquill::dynamic_format_arg_store<fmtquill::format_context>* args_store)
Expand All @@ -431,7 +431,7 @@ struct Decode<char[N]>
#if defined(_WIN32)
/***/
template <typename Arg>
struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, wchar_t*>, std::is_same<Arg, wchar_t const*>>>>
struct Decoder<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, wchar_t*>, std::is_same<Arg, wchar_t const*>>>>
{
QUILL_ATTRIBUTE_HOT static inline char const* decode(
std::byte*& buffer, fmtquill::dynamic_format_arg_store<fmtquill::format_context>* args_store)
Expand All @@ -450,7 +450,7 @@ struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, wchar_t

/***/
template <typename Arg>
struct Decode<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::wstring>, std::is_same<Arg, std::wstring_view>>>>
struct Decoder<Arg, std::enable_if_t<std::disjunction_v<std::is_same<Arg, std::wstring>, std::is_same<Arg, std::wstring_view>>>>
{
QUILL_ATTRIBUTE_HOT static inline std::string_view decode(
std::byte*& buffer, fmtquill::dynamic_format_arg_store<fmtquill::format_context>* args_store)
Expand All @@ -477,11 +477,11 @@ template <typename... Args>
QUILL_ATTRIBUTE_HOT inline void decode(
std::byte*& buffer, QUILL_MAYBE_UNUSED fmtquill::dynamic_format_arg_store<fmtquill::format_context>* args_store) noexcept
{
(Decode<Args>::decode(buffer, args_store), ...);
(Decoder<Args>::decode(buffer, args_store), ...);
}

/**
* Decode functions
* Decoder functions
*/
using FormatArgsDecoder = void (*)(std::byte*& data,
fmtquill::dynamic_format_arg_store<fmtquill::format_context>& args_store);
Expand Down
12 changes: 6 additions & 6 deletions quill/include/quill/std/Array.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ namespace quill::detail
{
/***/
template <typename Arg, size_t N>
struct CalculateArgSize<std::array<Arg, N>>
struct ArgSizeCalculator<std::array<Arg, N>>
{
QUILL_ATTRIBUTE_HOT static constexpr size_t calculate(std::vector<size_t>& c_style_string_lengths_cache,
std::array<Arg, N> const& arg) noexcept
Expand All @@ -31,7 +31,7 @@ struct CalculateArgSize<std::array<Arg, N>>

for (auto const& elem : arg)
{
total_size += CalculateArgSize<Arg>::calculate(c_style_string_lengths_cache, elem);
total_size += ArgSizeCalculator<Arg>::calculate(c_style_string_lengths_cache, elem);
}

return total_size;
Expand All @@ -40,22 +40,22 @@ struct CalculateArgSize<std::array<Arg, N>>

/***/
template <typename Arg, size_t N>
struct Encode<std::array<Arg, N>>
struct Encoder<std::array<Arg, N>>
{
QUILL_ATTRIBUTE_HOT static inline void encode(std::byte*& buffer, std::vector<size_t> const& c_style_string_lengths_cache,
uint32_t& c_style_string_lengths_cache_index,
std::array<Arg, N> const& arg) noexcept
{
for (auto const& elem : arg)
{
Encode<Arg>::encode(buffer, c_style_string_lengths_cache, c_style_string_lengths_cache_index, elem);
Encoder<Arg>::encode(buffer, c_style_string_lengths_cache, c_style_string_lengths_cache_index, elem);
}
}
};

/***/
template <typename Arg, size_t N>
struct Decode<std::array<Arg, N>>
struct Decoder<std::array<Arg, N>>
{
QUILL_ATTRIBUTE_HOT static inline std::array<Arg, N> decode(
std::byte*& buffer, fmtquill::dynamic_format_arg_store<fmtquill::format_context>* args_store)
Expand All @@ -64,7 +64,7 @@ struct Decode<std::array<Arg, N>>

for (size_t i = 0; i < N; ++i)
{
arg[i] = Decode<Arg>::decode(buffer, nullptr);
arg[i] = Decoder<Arg>::decode(buffer, nullptr);
}

if (args_store)
Expand Down

0 comments on commit aaa7fcb

Please sign in to comment.