From 31c220c7178f3a8ae7a803e46d3d568d7ff56848 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Wed, 24 Apr 2024 20:47:57 +0200 Subject: Reword custom formatter to be simpler --- deimos/core/format.h | 29 ++++++++++++++++------------- deimos/core/log.h | 6 +++--- deimos/core/status.cpp | 3 +-- deimos/core/status.h | 7 +------ deimos/vulkan/vulkan_entry_functions.inc | 2 ++ 5 files changed, 23 insertions(+), 24 deletions(-) (limited to 'deimos') diff --git a/deimos/core/format.h b/deimos/core/format.h index ba1a3e2..8a2c850 100644 --- a/deimos/core/format.h +++ b/deimos/core/format.h @@ -15,6 +15,12 @@ struct CustomFormatter Callback callback; }; +template +concept CustomFormattable = requires(IWriter* writer, const T& value) +{ + DeimosFormat(writer, value); +}; + struct FormatArg { enum Type : uint8_t @@ -50,29 +56,26 @@ struct FormatArg string{value} {} - template - constexpr explicit FormatArg(const T& payload, CustomFormatter::Callback callback) : + template + constexpr explicit FormatArg(const T& payload) : type{kCustom}, - custom{CustomFormatter{&payload, callback}} - {} + custom{CustomFormatter{&payload, [](IWriter* writer, const void* raw) + { + DeimosFormat(writer, *(const T*)raw); + }}} + { + } }; template -deimos::FormatArg DeimosMakeFormatArg(T&& value) - requires std::is_constructible_v -{ - return deimos::FormatArg(value); -} - -template -concept Formattable = std::same_as()))>; +concept Formattable = std::is_constructible_v; void FormatVa(IWriter*, gsl::czstring fmt, Span); template void Format(IWriter* writer, gsl::czstring fmt, Args&&... args) { - FormatVa(writer, fmt, { DeimosMakeFormatArg(std::forward(args))... }); + FormatVa(writer, fmt, { FormatArg(std::forward(args))... }); } } // namespace deimos diff --git a/deimos/core/log.h b/deimos/core/log.h index 260d9a4..9bb4dbb 100644 --- a/deimos/core/log.h +++ b/deimos/core/log.h @@ -50,19 +50,19 @@ public: template void LogInfo(const LogSourceLocation& fmt_source_location, Args&&... args) { - LogVa(LogSeverity::kInfo, fmt_source_location.source_location, fmt_source_location.fmt, { DeimosMakeFormatArg(std::forward(args))... }); + LogVa(LogSeverity::kInfo, fmt_source_location.source_location, fmt_source_location.fmt, { FormatArg(std::forward(args))... }); } template void LogDebug(const LogSourceLocation& fmt_source_location, Args&&... args) { - LogVa(LogSeverity::kDebug, fmt_source_location.source_location, fmt_source_location.fmt, { DeimosMakeFormatArg(std::forward(args))... }); + LogVa(LogSeverity::kDebug, fmt_source_location.source_location, fmt_source_location.fmt, { FormatArg(std::forward(args))... }); } template void LogError(const LogSourceLocation& fmt_source_location, Args&&... args) { - LogVa(LogSeverity::kError, fmt_source_location.source_location, fmt_source_location.fmt, { DeimosMakeFormatArg(std::forward(args))... }); + LogVa(LogSeverity::kError, fmt_source_location.source_location, fmt_source_location.fmt, { FormatArg(std::forward(args))... }); } }; diff --git a/deimos/core/status.cpp b/deimos/core/status.cpp index efdd6df..10965bc 100644 --- a/deimos/core/status.cpp +++ b/deimos/core/status.cpp @@ -86,9 +86,8 @@ void Status::Unref() const } } -void Status::FormatStatus(IWriter* writer, const void* payload) +void DeimosFormat(IWriter* writer, const Status& status) { - const auto& status = *(const Status*)payload; // NOLINT if (status.IsInline()) { Format(writer, "[$]", StatusCodeToString(status.code())); diff --git a/deimos/core/status.h b/deimos/core/status.h index 7350cc5..6601ad7 100644 --- a/deimos/core/status.h +++ b/deimos/core/status.h @@ -83,12 +83,7 @@ public: return RepCode(); } - static void FormatStatus(IWriter* writer, const void* payload); - - friend constexpr deimos::FormatArg DeimosMakeFormatArg(const Status& status) - { - return deimos::FormatArg(status, FormatStatus); - } + friend void DeimosFormat(IWriter*, const Status&); }; inline Status UnknownError(StringView message = {}) diff --git a/deimos/vulkan/vulkan_entry_functions.inc b/deimos/vulkan/vulkan_entry_functions.inc index 97584c4..fe5f9ea 100644 --- a/deimos/vulkan/vulkan_entry_functions.inc +++ b/deimos/vulkan/vulkan_entry_functions.inc @@ -1,2 +1,4 @@ +// NOLINTBEGIN FN(GetInstanceProcAddr) FN(CreateInstance) +// NOLINTEND -- cgit