diff --git a/openVulkanoCpp/Base/Version.cpp b/openVulkanoCpp/Base/Version.cpp index f9f39cc..5d2c6e5 100644 --- a/openVulkanoCpp/Base/Version.cpp +++ b/openVulkanoCpp/Base/Version.cpp @@ -5,6 +5,7 @@ */ #include "Version.hpp" +#include #include #include #include @@ -82,12 +83,20 @@ namespace OpenVulkano iss >> p.first >> p.second; return p; } + + constexpr std::string ToString(uint32_t major, uint32_t minor, uint32_t patch, const uint32_t build) + { + if (build) + return fmt::format("v{}.{}.{}.{}", major, minor, patch, build); + else + return fmt::format("v{}.{}.{}", major, minor, patch); + } } Version::Version(uint32_t major, uint32_t minor, uint32_t patch, const uint32_t build) : m_versionComponents(build ? std::initializer_list{major, minor, patch, build} : std::initializer_list{major, minor, patch}) , m_buildNumber(build) - , m_versionString("v" + std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(patch) + (build ? "." + std::to_string(build) : "")) + , m_versionString(ToString(major, minor, patch, build)) {} Version::Version(std::string_view versionString, bool ignoreTags) diff --git a/openVulkanoCpp/Base/Version.hpp b/openVulkanoCpp/Base/Version.hpp index 2788a3d..461d813 100644 --- a/openVulkanoCpp/Base/Version.hpp +++ b/openVulkanoCpp/Base/Version.hpp @@ -50,6 +50,8 @@ namespace OpenVulkano [[nodiscard]] explicit operator uint32_t() const { return (Major() << 20) | ((Minor() & 0x3FF) << 10) | (Patch() & 0x3FF); } [[nodiscard]] operator const std::string&() const { return m_versionString; } + + [[nodiscard]] const std::string& String() const { return m_versionString; } //endregion //region Comparison operators diff --git a/openVulkanoCpp/Extensions/FmtFormatter.hpp b/openVulkanoCpp/Extensions/FmtFormatter.hpp index ac6ca4b..0931716 100644 --- a/openVulkanoCpp/Extensions/FmtFormatter.hpp +++ b/openVulkanoCpp/Extensions/FmtFormatter.hpp @@ -25,6 +25,7 @@ #include "Math/Timestamp.hpp" #include "Math/UInt24.hpp" #include "Base/UUID.hpp" +#include "Base/Version.hpp" #include #include @@ -41,6 +42,19 @@ template<> struct fmt::formatter } }; +template<> struct fmt::formatter +{ + template constexpr auto parse(ParseContext& ctx) + { + return ctx.begin(); + } + + template auto format(const OpenVulkano::Version& version, FormatContext& ctx) const + { + return fmt::format_to(ctx.out(), "{}", static_cast(version)); + } +}; + template<> struct fmt::formatter : fmt::formatter { template diff --git a/openVulkanoCpp/Extensions/RymlConverters.hpp b/openVulkanoCpp/Extensions/RymlConverters.hpp index e5a5154..48328f8 100644 --- a/openVulkanoCpp/Extensions/RymlConverters.hpp +++ b/openVulkanoCpp/Extensions/RymlConverters.hpp @@ -17,6 +17,7 @@ #include "Math/RGB565.hpp" #include "Math/RGBA5551.hpp" #include "Math/Timestamp.hpp" +#include "Base/Version.hpp" #include #include #include @@ -150,6 +151,17 @@ namespace c4 return true; } + inline size_t to_chars(ryml::substr buf, const OpenVulkano::Version& version) + { + return ryml::format(buf, "{}", static_cast(version)); + } + + inline bool from_chars(ryml::csubstr buf, OpenVulkano::Version* version) + { + *version = OpenVulkano::Version(buf.str); + return true; + } + template inline size_t to_chars( ryml::substr buf, diff --git a/openVulkanoCpp/Extensions/YamlCppConverters.hpp b/openVulkanoCpp/Extensions/YamlCppConverters.hpp index 6f44676..232cfcc 100644 --- a/openVulkanoCpp/Extensions/YamlCppConverters.hpp +++ b/openVulkanoCpp/Extensions/YamlCppConverters.hpp @@ -17,6 +17,7 @@ #include "Math/RGBA5551.hpp" #include "Math/Timestamp.hpp" #include "Data/Containers/String.hpp" +#include "Base/Version.hpp" #include #include #include @@ -61,6 +62,25 @@ namespace YAML } }; + template<> + struct convert + { + static Node encode(const OpenVulkano::Version& version) + { + return Node(static_cast(version)); + } + + static bool decode(const Node& node, OpenVulkano::Version& version) + { + if (node.IsScalar()) + { + version = OpenVulkano::Version(node.Scalar()); + return true; + } + return false; + } + }; + template<> struct convert {