diff options
-rw-r--r-- | deimos/core/format.h | 29 | ||||
-rw-r--r-- | deimos/core/log.h | 6 | ||||
-rw-r--r-- | deimos/core/status.cpp | 3 | ||||
-rw-r--r-- | deimos/core/status.h | 7 | ||||
-rw-r--r-- | deimos/vulkan/vulkan_entry_functions.inc | 2 | ||||
-rw-r--r-- | main/main.cpp | 10 |
6 files changed, 28 insertions, 29 deletions
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<typename T>
+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<typename T>
- constexpr explicit FormatArg(const T& payload, CustomFormatter::Callback callback) :
+ template<CustomFormattable T>
+ 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<typename T>
-deimos::FormatArg DeimosMakeFormatArg(T&& value)
- requires std::is_constructible_v<deimos::FormatArg, T>
-{
- return deimos::FormatArg(value);
-}
-
-template<typename T>
-concept Formattable = std::same_as<deimos::FormatArg, decltype(DeimosMakeFormatArg(std::declval<T>()))>;
+concept Formattable = std::is_constructible_v<FormatArg, T>;
void FormatVa(IWriter*, gsl::czstring fmt, Span<const FormatArg>);
template<Formattable... Args>
void Format(IWriter* writer, gsl::czstring fmt, Args&&... args)
{
- FormatVa(writer, fmt, { DeimosMakeFormatArg(std::forward<Args>(args))... });
+ FormatVa(writer, fmt, { FormatArg(std::forward<Args>(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<Formattable... Args>
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>(args))... });
+ LogVa(LogSeverity::kInfo, fmt_source_location.source_location, fmt_source_location.fmt, { FormatArg(std::forward<Args>(args))... });
}
template<Formattable... Args>
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>(args))... });
+ LogVa(LogSeverity::kDebug, fmt_source_location.source_location, fmt_source_location.fmt, { FormatArg(std::forward<Args>(args))... });
}
template<Formattable... Args>
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>(args))... });
+ LogVa(LogSeverity::kError, fmt_source_location.source_location, fmt_source_location.fmt, { FormatArg(std::forward<Args>(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
diff --git a/main/main.cpp b/main/main.cpp index 00e7d71..4fa058c 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -11,7 +11,7 @@ static LogApi* log_api; [[nodiscard]]
Status CreateInstance(VulkanApi* vk, VkInstance* instance)
{
- VkApplicationInfo application_info{
+ const VkApplicationInfo application_info{
.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,
.pNext = nullptr,
.pApplicationName = "Deimos game",
@@ -23,7 +23,7 @@ Status CreateInstance(VulkanApi* vk, VkInstance* instance) const char* extensions[]{
"VK_KHR_surface",
- "VK_KHR_win32_surfaceu",
+ "VK_KHR_win32_surface",
};
const char* layers[]{
@@ -31,7 +31,7 @@ Status CreateInstance(VulkanApi* vk, VkInstance* instance) "VK_LAYER_LUNARG_monitor",
};
- VkInstanceCreateInfo create_info{
+ const VkInstanceCreateInfo create_info{
.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,
.pNext = nullptr,
.flags = 0,
@@ -42,7 +42,7 @@ Status CreateInstance(VulkanApi* vk, VkInstance* instance) .ppEnabledExtensionNames = extensions,
};
- VkResult res = vk->CreateInstance(&create_info, nullptr, instance);
+ const VkResult res = vk->CreateInstance(&create_info, nullptr, instance);
if (res != VK_SUCCESS)
{
return UnknownError();
@@ -62,7 +62,7 @@ int main(int /* argc */, char* /* argv */[]) auto* vk = vulkan_loader_api->LoadEntry();
VkInstance instance{};
- Status s = CreateInstance(vk, &instance);
+ const Status s = CreateInstance(vk, &instance);
if (!s.ok())
{
log_api->LogError("Couldn't create Vulkan instance: $", s);
|