From c84b85102c2d6ddc27429f6a374180d4169cafc2 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Tue, 15 Apr 2025 22:05:46 -0500 Subject: [PATCH 01/10] [nostalgia/gfx/studio] Cleanup --- .../gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp index de2e5984..6524b47c 100644 --- a/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp +++ b/src/nostalgia/modules/gfx/src/studio/tilesheeteditor/tilesheeteditor-imgui.cpp @@ -414,7 +414,7 @@ ox::Error TileSheetEditorImGui::exportSubsheetToPng(int const scale) const noexc static_cast(width * scale), static_cast(height * scale)); if (err) { - oxErrorf("Tilesheet export failed: {}", toStr(err)); + oxErrorf("TileSheet export failed: {}", toStr(err)); } return err; } From 849aceb86d69109fc8a6aee115c301edd3e59bb3 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Wed, 16 Apr 2025 23:11:47 -0500 Subject: [PATCH 02/10] [keel] Add cleaner way to write type converters --- src/olympic/keel/include/keel/typeconv.hpp | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/olympic/keel/include/keel/typeconv.hpp b/src/olympic/keel/include/keel/typeconv.hpp index 07a238f0..494e4c1e 100644 --- a/src/olympic/keel/include/keel/typeconv.hpp +++ b/src/olympic/keel/include/keel/typeconv.hpp @@ -174,6 +174,73 @@ class Converter: public BaseConverter { }; + +template +class ConverterFunc: public BaseConverter { + private: + template + struct ParamExtractor { + using Src = SrcType; + using Dst = DstType; + }; + + template + static auto makeParamExtractor(ox::Error (*)(keel::Context&, S&, D&)) { + return ParamExtractor{}; + } + + public: + using SrcType = decltype(makeParamExtractor(Func))::Src; + using DstType = decltype(makeParamExtractor(Func))::Dst; + + [[nodiscard]] + constexpr ox::StringView srcTypeName() const noexcept final { + return ox::ModelTypeName_v; + } + + [[nodiscard]] + constexpr int srcTypeVersion() const noexcept final { + return ox::ModelTypeVersion_v; + } + + [[nodiscard]] + constexpr bool srcMatches(ox::StringViewCR pSrcTypeName, int pSrcTypeVersion) const noexcept final { + constexpr auto SrcTypeName = ox::requireModelTypeName(); + constexpr auto SrcTypeVersion = ox::requireModelTypeVersion(); + return pSrcTypeName == SrcTypeName + && pSrcTypeVersion == SrcTypeVersion; + } + + [[nodiscard]] + constexpr bool dstMatches(ox::StringViewCR dstTypeName, int dstTypeVersion) const noexcept final { + constexpr auto DstTypeName = ox::StringView{ox::requireModelTypeName()}; + constexpr auto DstTypeVersion = ox::requireModelTypeVersion(); + return dstTypeName == DstTypeName + && dstTypeVersion == DstTypeVersion; + } + + ox::Result> convertPtrToPtr( + keel::Context &ctx, Wrap &src) const noexcept final { + ox::Result> dst{makeWrap()}; + OX_RETURN_ERROR(convert(ctx, wrapCast(src), wrapCast(*dst.value))); + return dst; + } + + ox::Result> convertBuffToPtr( + keel::Context &ctx, ox::BufferView const&srcBuff) const noexcept final { + OX_REQUIRE_M(src, readAsset(srcBuff)); + ox::Result> dst{makeWrap()}; + OX_RETURN_ERROR(convert(ctx, src, wrapCast(*dst.value))); + return dst; + } + + protected: + ox::Error convert(keel::Context &ctx, SrcType &src, DstType &dst) const noexcept { + return Func(ctx, src, dst); + } + +}; + ox::Result> convert( keel::Context &ctx, ox::BufferView const&srcBuffer, From 844656d5570cb5b753fc913bb7eedd1c3c15b6e4 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Wed, 16 Apr 2025 23:12:24 -0500 Subject: [PATCH 03/10] [nostalgia/gfx/keel] Update type converter style --- .../modules/gfx/src/keel/keelmodule.cpp | 22 +++---- .../modules/gfx/src/keel/typeconv.cpp | 50 ++++++++-------- .../modules/gfx/src/keel/typeconv.hpp | 59 +++++-------------- 3 files changed, 50 insertions(+), 81 deletions(-) diff --git a/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp b/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp index 63f1fd89..4fa04d2d 100644 --- a/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp +++ b/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp @@ -15,17 +15,17 @@ namespace nostalgia::gfx { static class: public keel::Module { private: - NostalgiaPaletteToPaletteV1Converter m_nostalgiaPaletteToPaletteV1Converter; - PaletteV1ToPaletteV2Converter m_paletteV1ToPaletteV2Converter; - PaletteV2ToPaletteV3Converter m_paletteV2ToPaletteV3Converter; - PaletteV3ToPaletteV4Converter m_paletteV3ToPaletteV4Converter; - PaletteV4ToPaletteV5Converter m_paletteV4ToPaletteV5Converter; - PaletteToCompactPaletteConverter m_paletteToCompactPaletteConverter; - TileSheetV1ToTileSheetV2Converter m_tileSheetV1ToTileSheetV2Converter; - TileSheetV2ToTileSheetV3Converter m_tileSheetV2ToTileSheetV3Converter; - TileSheetV3ToTileSheetV4Converter m_tileSheetV3ToTileSheetV4Converter; - TileSheetV4ToTileSheetV5Converter m_tileSheetV4ToTileSheetV5Converter; - TileSheetToCompactTileSheetConverter m_tileSheetToCompactTileSheetConverter; + keel::ConverterFunc m_nostalgiaPaletteToPaletteV1Converter; + keel::ConverterFunc m_paletteV1ToPaletteV2Converter; + keel::ConverterFunc m_paletteV2ToPaletteV3Converter; + keel::ConverterFunc m_paletteV3ToPaletteV4Converter; + keel::ConverterFunc m_paletteV4ToPaletteV5Converter; + keel::ConverterFunc m_paletteToCompactPaletteConverter; + keel::ConverterFunc m_tileSheetV1ToTileSheetV2Converter; + keel::ConverterFunc m_tileSheetV2ToTileSheetV3Converter; + keel::ConverterFunc m_tileSheetV3ToTileSheetV4Converter; + keel::ConverterFunc m_tileSheetV4ToTileSheetV5Converter; + keel::ConverterFuncm_tileSheetToCompactTileSheetConverter; public: [[nodiscard]] diff --git a/src/nostalgia/modules/gfx/src/keel/typeconv.cpp b/src/nostalgia/modules/gfx/src/keel/typeconv.cpp index 927c1671..b299e151 100644 --- a/src/nostalgia/modules/gfx/src/keel/typeconv.cpp +++ b/src/nostalgia/modules/gfx/src/keel/typeconv.cpp @@ -6,26 +6,26 @@ namespace nostalgia::gfx { -ox::Error NostalgiaPaletteToPaletteV1Converter::convert( +ox::Error ConvertNostalgiaPaletteToPaletteV1( keel::Context&, NostalgiaPalette &src, - PaletteV1 &dst) const noexcept { + PaletteV1 &dst) noexcept { dst.colors = std::move(src.colors); return {}; } -ox::Error PaletteV1ToPaletteV2Converter::convert( +ox::Error ConvertPaletteV1ToPaletteV2( keel::Context&, PaletteV1 &src, - PaletteV2 &dst) const noexcept { + PaletteV2 &dst) noexcept { dst.pages.emplace_back(std::move(src.colors)); return {}; } -ox::Error PaletteV2ToPaletteV3Converter::convert( +ox::Error ConvertPaletteV2ToPaletteV3( keel::Context&, PaletteV2 &src, - PaletteV3 &dst) const noexcept { + PaletteV3 &dst) noexcept { dst.pages = std::move(src.pages); if (!dst.pages.empty()) { dst.colorInfo.reserve(dst.pages[0].size()); @@ -36,10 +36,10 @@ ox::Error PaletteV2ToPaletteV3Converter::convert( return {}; } -ox::Error PaletteV3ToPaletteV4Converter::convert( +ox::Error ConvertPaletteV3ToPaletteV4( keel::Context&, PaletteV3 &src, - PaletteV4 &dst) const noexcept { + PaletteV4 &dst) noexcept { dst.pages.reserve(src.pages.size()); for (auto i = 1; auto &page : src.pages) { dst.pages.emplace_back(ox::sfmt("Page {}", i), std::move(page)); @@ -52,10 +52,10 @@ ox::Error PaletteV3ToPaletteV4Converter::convert( return {}; } -ox::Error PaletteV4ToPaletteV5Converter::convert( +ox::Error ConvertPaletteV4ToPaletteV5( keel::Context&, PaletteV4 &src, - PaletteV5 &dst) const noexcept { + PaletteV5 &dst) noexcept { dst.colorNames = std::move(src.colorNames); dst.pages.reserve(src.pages.size()); for (auto &s : src.pages) { @@ -72,10 +72,10 @@ ox::Error PaletteV4ToPaletteV5Converter::convert( return {}; } -ox::Error PaletteToCompactPaletteConverter::convert( +ox::Error ConvertPaletteToCompactPalette( keel::Context&, Palette &src, - CompactPalette &dst) const noexcept { + CompactPalette &dst) noexcept { dst.pages.reserve(src.pages.size()); for (auto &page : src.pages) { auto &p = dst.pages.emplace_back(); @@ -86,10 +86,10 @@ ox::Error PaletteToCompactPaletteConverter::convert( return {}; } -ox::Error TileSheetV1ToTileSheetV2Converter::convert( +ox::Error ConvertTileSheetV1ToTileSheetV2( keel::Context&, TileSheetV1 &src, - TileSheetV2 &dst) const noexcept { + TileSheetV2 &dst) noexcept { dst.bpp = src.bpp; dst.defaultPalette = std::move(src.defaultPalette); dst.subsheet.name = "Root"; @@ -99,7 +99,7 @@ ox::Error TileSheetV1ToTileSheetV2Converter::convert( return {}; } -void TileSheetV2ToTileSheetV3Converter::convertSubsheet( +static void convertSubsheet( TileSheetV2::SubSheet &src, TileSheetV3::SubSheet &dst, SubSheetId &idIt) noexcept { @@ -115,10 +115,10 @@ void TileSheetV2ToTileSheetV3Converter::convertSubsheet( } } -ox::Error TileSheetV2ToTileSheetV3Converter::convert( +ox::Error ConvertTileSheetV2ToTileSheetV3( keel::Context&, TileSheetV2 &src, - TileSheetV3 &dst) const noexcept { + TileSheetV3 &dst) noexcept { dst.bpp = src.bpp; dst.defaultPalette = std::move(src.defaultPalette); convertSubsheet(src.subsheet, dst.subsheet, dst.idIt); @@ -126,7 +126,7 @@ ox::Error TileSheetV2ToTileSheetV3Converter::convert( } -void TileSheetV3ToTileSheetV4Converter::convertSubsheet( +static void convertSubsheet( TileSheetV3::SubSheet &src, TileSheetV4::SubSheet &dst, SubSheetId &idIt) noexcept { @@ -142,10 +142,10 @@ void TileSheetV3ToTileSheetV4Converter::convertSubsheet( } } -ox::Error TileSheetV3ToTileSheetV4Converter::convert( +ox::Error ConvertTileSheetV3ToTileSheetV4( keel::Context&, TileSheetV3 &src, - TileSheetV4 &dst) const noexcept { + TileSheetV4 &dst) noexcept { dst.bpp = src.bpp; dst.idIt = src.idIt; dst.defaultPalette = std::move(src.defaultPalette); @@ -154,7 +154,7 @@ ox::Error TileSheetV3ToTileSheetV4Converter::convert( } -void TileSheetV4ToTileSheetV5Converter::convertSubsheet( +static void convertSubsheet( int const bpp, TileSheetV4::SubSheet &src, TileSheetV5::SubSheet &dst) noexcept { @@ -179,10 +179,10 @@ void TileSheetV4ToTileSheetV5Converter::convertSubsheet( } } -ox::Error TileSheetV4ToTileSheetV5Converter::convert( +ox::Error ConvertTileSheetV4ToTileSheetV5( keel::Context&, TileSheetV4 &src, - TileSheetV5 &dst) const noexcept { + TileSheetV5 &dst) noexcept { dst.bpp = src.bpp; dst.idIt = src.idIt; OX_RETURN_ERROR(src.defaultPalette.getPath().moveTo(dst.defaultPalette)); @@ -191,10 +191,10 @@ ox::Error TileSheetV4ToTileSheetV5Converter::convert( } -ox::Error TileSheetToCompactTileSheetConverter::convert( +ox::Error ConvertTileSheetToCompactTileSheet( keel::Context&, TileSheet &src, - CompactTileSheet &dst) const noexcept { + CompactTileSheet &dst) noexcept { dst.bpp = src.bpp; dst.defaultPalette = ox::FileAddress{src.defaultPalette}; dst.pixels = pixels(src); diff --git a/src/nostalgia/modules/gfx/src/keel/typeconv.hpp b/src/nostalgia/modules/gfx/src/keel/typeconv.hpp index 101eafa0..c5b05819 100644 --- a/src/nostalgia/modules/gfx/src/keel/typeconv.hpp +++ b/src/nostalgia/modules/gfx/src/keel/typeconv.hpp @@ -16,60 +16,29 @@ namespace nostalgia::gfx { // Type converters -class NostalgiaPaletteToPaletteV1Converter: public keel::Converter { - ox::Error convert(keel::Context&, NostalgiaPalette &src, PaletteV1 &dst) const noexcept final; -}; +ox::Error ConvertNostalgiaPaletteToPaletteV1( + keel::Context&, + NostalgiaPalette &src, + PaletteV1 &dst) noexcept; -class PaletteV1ToPaletteV2Converter: public keel::Converter { - ox::Error convert(keel::Context&, PaletteV1 &src, PaletteV2 &dst) const noexcept final; -}; +ox::Error ConvertPaletteV1ToPaletteV2(keel::Context&, PaletteV1 &src, PaletteV2 &dst) noexcept; -class PaletteV2ToPaletteV3Converter: public keel::Converter { - ox::Error convert(keel::Context&, PaletteV2 &src, PaletteV3 &dst) const noexcept final; -}; +ox::Error ConvertPaletteV2ToPaletteV3(keel::Context&, PaletteV2 &src, PaletteV3 &dst) noexcept; -class PaletteV3ToPaletteV4Converter: public keel::Converter { - ox::Error convert(keel::Context&, PaletteV3 &src, PaletteV4 &dst) const noexcept final; -}; +ox::Error ConvertPaletteV3ToPaletteV4(keel::Context&, PaletteV3 &src, PaletteV4 &dst) noexcept; -class PaletteV4ToPaletteV5Converter: public keel::Converter { - ox::Error convert(keel::Context&, PaletteV4 &src, PaletteV5 &dst) const noexcept final; -}; +ox::Error ConvertPaletteV4ToPaletteV5(keel::Context&, PaletteV4 &src, PaletteV5 &dst) noexcept; -class PaletteToCompactPaletteConverter: public keel::Converter { - ox::Error convert(keel::Context&, Palette &src, CompactPalette &dst) const noexcept final; -}; +ox::Error ConvertPaletteToCompactPalette(keel::Context&, Palette &src, CompactPalette &dst) noexcept; -class TileSheetV1ToTileSheetV2Converter: public keel::Converter { - ox::Error convert(keel::Context&, TileSheetV1 &src, TileSheetV2 &dst) const noexcept final; -}; +ox::Error ConvertTileSheetV1ToTileSheetV2(keel::Context&, TileSheetV1 &src, TileSheetV2 &dst) noexcept; -class TileSheetV2ToTileSheetV3Converter: public keel::Converter { - static void convertSubsheet( - TileSheetV2::SubSheet &src, - TileSheetV3::SubSheet &dst, - SubSheetId &idIt) noexcept; - ox::Error convert(keel::Context&, TileSheetV2 &src, TileSheetV3 &dst) const noexcept final; -}; +ox::Error ConvertTileSheetV2ToTileSheetV3(keel::Context&, TileSheetV2 &src, TileSheetV3 &dst) noexcept; -class TileSheetV3ToTileSheetV4Converter: public keel::Converter { - static void convertSubsheet( - TileSheetV3::SubSheet &src, - TileSheetV4::SubSheet &dst, - SubSheetId &idIt) noexcept; - ox::Error convert(keel::Context&, TileSheetV3 &src, TileSheetV4 &dst) const noexcept final; -}; +ox::Error ConvertTileSheetV3ToTileSheetV4(keel::Context&, TileSheetV3 &src, TileSheetV4 &dst) noexcept; -class TileSheetV4ToTileSheetV5Converter final: public keel::Converter { - static void convertSubsheet( - int bpp, - TileSheetV4::SubSheet &src, - TileSheetV5::SubSheet &dst) noexcept; - ox::Error convert(keel::Context&, TileSheetV4 &src, TileSheetV5 &dst) const noexcept override; -}; +ox::Error ConvertTileSheetV4ToTileSheetV5(keel::Context&, TileSheetV4 &src, TileSheetV5 &dst) noexcept; -class TileSheetToCompactTileSheetConverter: public keel::Converter { - ox::Error convert(keel::Context&, TileSheet &src, CompactTileSheet &dst) const noexcept final; -}; +ox::Error ConvertTileSheetToCompactTileSheet(keel::Context&, TileSheet &src, CompactTileSheet &dst) noexcept; } From 56b79f414d724675d93a6a40204e53ba60a4ded9 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 17 Apr 2025 00:22:47 -0500 Subject: [PATCH 04/10] [keel,nostalgia] Further simplify writing type converters --- .../modules/gfx/src/keel/keelmodule.cpp | 37 +++----- .../modules/gfx/src/keel/typeconv.hpp | 5 +- .../modules/sound/src/keel/keelmodule.cpp | 2 +- src/olympic/keel/include/keel/context.hpp | 6 +- src/olympic/keel/include/keel/module.hpp | 2 +- src/olympic/keel/include/keel/typeconv.hpp | 88 +++++++------------ src/olympic/keel/src/module.cpp | 2 +- src/olympic/keel/src/typeconv.cpp | 15 ++-- 8 files changed, 59 insertions(+), 98 deletions(-) diff --git a/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp b/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp index 4fa04d2d..a5236348 100644 --- a/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp +++ b/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp @@ -14,19 +14,6 @@ namespace nostalgia::gfx { static class: public keel::Module { - private: - keel::ConverterFunc m_nostalgiaPaletteToPaletteV1Converter; - keel::ConverterFunc m_paletteV1ToPaletteV2Converter; - keel::ConverterFunc m_paletteV2ToPaletteV3Converter; - keel::ConverterFunc m_paletteV3ToPaletteV4Converter; - keel::ConverterFunc m_paletteV4ToPaletteV5Converter; - keel::ConverterFunc m_paletteToCompactPaletteConverter; - keel::ConverterFunc m_tileSheetV1ToTileSheetV2Converter; - keel::ConverterFunc m_tileSheetV2ToTileSheetV3Converter; - keel::ConverterFunc m_tileSheetV3ToTileSheetV4Converter; - keel::ConverterFunc m_tileSheetV4ToTileSheetV5Converter; - keel::ConverterFuncm_tileSheetToCompactTileSheetConverter; - public: [[nodiscard]] ox::String id() const noexcept override { @@ -52,19 +39,19 @@ static class: public keel::Module { } [[nodiscard]] - ox::Vector converters() const noexcept final { + ox::Vector converters() const noexcept final { return { - &m_nostalgiaPaletteToPaletteV1Converter, - &m_paletteV1ToPaletteV2Converter, - &m_paletteV2ToPaletteV3Converter, - &m_paletteV3ToPaletteV4Converter, - &m_paletteV4ToPaletteV5Converter, - &m_paletteToCompactPaletteConverter, - &m_tileSheetV1ToTileSheetV2Converter, - &m_tileSheetV2ToTileSheetV3Converter, - &m_tileSheetV3ToTileSheetV4Converter, - &m_tileSheetV4ToTileSheetV5Converter, - &m_tileSheetToCompactTileSheetConverter, + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), + keel::ConverterWrap::make(), }; } diff --git a/src/nostalgia/modules/gfx/src/keel/typeconv.hpp b/src/nostalgia/modules/gfx/src/keel/typeconv.hpp index c5b05819..64bb5c42 100644 --- a/src/nostalgia/modules/gfx/src/keel/typeconv.hpp +++ b/src/nostalgia/modules/gfx/src/keel/typeconv.hpp @@ -16,10 +16,7 @@ namespace nostalgia::gfx { // Type converters -ox::Error ConvertNostalgiaPaletteToPaletteV1( - keel::Context&, - NostalgiaPalette &src, - PaletteV1 &dst) noexcept; +ox::Error ConvertNostalgiaPaletteToPaletteV1(keel::Context&, NostalgiaPalette &src, PaletteV1 &dst) noexcept; ox::Error ConvertPaletteV1ToPaletteV2(keel::Context&, PaletteV1 &src, PaletteV2 &dst) noexcept; diff --git a/src/nostalgia/modules/sound/src/keel/keelmodule.cpp b/src/nostalgia/modules/sound/src/keel/keelmodule.cpp index c1cb6f6e..780862e9 100644 --- a/src/nostalgia/modules/sound/src/keel/keelmodule.cpp +++ b/src/nostalgia/modules/sound/src/keel/keelmodule.cpp @@ -26,7 +26,7 @@ static class: public keel::Module { } [[nodiscard]] - ox::Vector converters() const noexcept final { + ox::Vector converters() const noexcept final { return { }; } diff --git a/src/olympic/keel/include/keel/context.hpp b/src/olympic/keel/include/keel/context.hpp index b128bbf0..0325c74e 100644 --- a/src/olympic/keel/include/keel/context.hpp +++ b/src/olympic/keel/include/keel/context.hpp @@ -8,11 +8,11 @@ #include #include "assetmanager.hpp" +#include "typeconv.hpp" namespace keel { class Context; -using PackTransform = ox::Result(*)(Context&, ox::Buffer &clawData, ox::StringViewCR); class Context { public: @@ -22,7 +22,7 @@ class Context { AssetManager assetManager; ox::HashMap pathToUuid; ox::HashMap uuidToPath; - ox::Vector converters; + ox::Vector converters; ox::Vector packTransforms; #else std::size_t preloadSectionOffset = 0; @@ -45,7 +45,7 @@ constexpr ox::SpanView packTransforms( #endif } -constexpr ox::SpanView converters( +constexpr ox::SpanView converters( [[maybe_unused]] Context const&ctx) noexcept { #ifndef OX_BARE_METAL return ctx.converters; diff --git a/src/olympic/keel/include/keel/module.hpp b/src/olympic/keel/include/keel/module.hpp index 4dab0b28..ed5b55b6 100644 --- a/src/olympic/keel/include/keel/module.hpp +++ b/src/olympic/keel/include/keel/module.hpp @@ -32,7 +32,7 @@ class Module { [[nodiscard]] virtual ox::Vector types() const noexcept; [[nodiscard]] - virtual ox::Vector converters() const noexcept; + virtual ox::Vector converters() const noexcept; [[nodiscard]] virtual ox::Vector packTransforms() const noexcept; }; diff --git a/src/olympic/keel/include/keel/typeconv.hpp b/src/olympic/keel/include/keel/typeconv.hpp index 494e4c1e..59c32184 100644 --- a/src/olympic/keel/include/keel/typeconv.hpp +++ b/src/olympic/keel/include/keel/typeconv.hpp @@ -9,10 +9,11 @@ #include #include "asset.hpp" -#include "context.hpp" namespace keel { +class Context; + class Wrap { public: virtual ~Wrap() = default; @@ -125,58 +126,9 @@ class BaseConverter { }; -template -class Converter: public BaseConverter { - public: - [[nodiscard]] - constexpr ox::StringView srcTypeName() const noexcept final { - return ox::ModelTypeName_v; - } - - [[nodiscard]] - constexpr int srcTypeVersion() const noexcept final { - return ox::ModelTypeVersion_v; - } - - [[nodiscard]] - constexpr bool srcMatches(ox::StringViewCR pSrcTypeName, int pSrcTypeVersion) const noexcept final { - constexpr auto SrcTypeName = ox::requireModelTypeName(); - constexpr auto SrcTypeVersion = ox::requireModelTypeVersion(); - return pSrcTypeName == SrcTypeName - && pSrcTypeVersion == SrcTypeVersion; - } - - [[nodiscard]] - constexpr bool dstMatches(ox::StringViewCR dstTypeName, int dstTypeVersion) const noexcept final { - constexpr auto DstTypeName = ox::StringView{ox::requireModelTypeName()}; - constexpr auto DstTypeVersion = ox::requireModelTypeVersion(); - return dstTypeName == DstTypeName - && dstTypeVersion == DstTypeVersion; - } - - ox::Result> convertPtrToPtr( - keel::Context &ctx, Wrap &src) const noexcept final { - ox::Result> dst{makeWrap()}; - OX_RETURN_ERROR(convert(ctx, wrapCast(src), wrapCast(*dst.value))); - return dst; - } - - ox::Result> convertBuffToPtr( - keel::Context &ctx, ox::BufferView const&srcBuff) const noexcept final { - OX_REQUIRE_M(src, readAsset(srcBuff)); - ox::Result> dst{makeWrap()}; - OX_RETURN_ERROR(convert(ctx, src, wrapCast(*dst.value))); - return dst; - } - - protected: - virtual ox::Error convert(keel::Context &ctx, SrcType&, DstType&) const noexcept = 0; - -}; - template -class ConverterFunc: public BaseConverter { +class Converter: public BaseConverter { private: template struct ParamExtractor { @@ -241,20 +193,42 @@ class ConverterFunc: public BaseConverter { }; +class ConverterWrap { + private: + ox::AllocAlias m_buff{}; + BaseConverter *m_conv{}; + public: + template + static ConverterWrap make() { + ConverterWrap out; + static_assert(sizeof(Converter) <= sizeof(out.m_buff)); + out.m_conv = new (out.m_buff.data()) Converter{}; + return out; + } + constexpr ConverterWrap() {} + ConverterWrap(ConverterWrap const &other): + m_buff{other.m_buff}, + m_conv{m_buff.data()} {} + [[nodiscard]] + BaseConverter const *converter() const noexcept { + return m_conv; + } +}; + ox::Result> convert( - keel::Context &ctx, + Context &ctx, ox::BufferView const&srcBuffer, ox::StringViewCR dstTypeName, int dstTypeVersion) noexcept; ox::Result> convert( - keel::Context &ctx, + Context &ctx, Wrap &src, ox::StringViewCR dstTypeName, int dstTypeVersion) noexcept; ox::Result> convert( - keel::Context &ctx, + Context &ctx, auto &src, ox::StringViewCR dstTypeName, int const dstTypeVersion) noexcept { @@ -263,7 +237,7 @@ ox::Result> convert( } ox::Result> convert( - keel::Context &ctx, + Context &ctx, auto const&src, ox::StringViewCR dstTypeName, int const dstTypeVersion) noexcept { @@ -274,7 +248,7 @@ ox::Result> convert( template ox::Result convertObjToObj( - keel::Context &ctx, + Context &ctx, auto &src) noexcept { OX_REQUIRE_M(out, convert(ctx, WrapRef{src}, ox::ModelTypeName_v, ox::ModelTypeVersion_v)); return std::move(wrapCast(*out)); @@ -316,4 +290,6 @@ ox::Result transformRule(keel::Context &ctx, ox::Buffer &buff, ox::StringV return false; }; +using PackTransform = ox::Result(*)(Context&, ox::Buffer &clawData, ox::StringViewCR); + } diff --git a/src/olympic/keel/src/module.cpp b/src/olympic/keel/src/module.cpp index 7a0357ae..c6ca0381 100644 --- a/src/olympic/keel/src/module.cpp +++ b/src/olympic/keel/src/module.cpp @@ -24,7 +24,7 @@ ox::Vector Module::types() const noexcept { return {}; } -ox::Vector Module::converters() const noexcept { +ox::Vector Module::converters() const noexcept { return {}; } diff --git a/src/olympic/keel/src/typeconv.cpp b/src/olympic/keel/src/typeconv.cpp index 531e7370..505b1679 100644 --- a/src/olympic/keel/src/typeconv.cpp +++ b/src/olympic/keel/src/typeconv.cpp @@ -2,20 +2,21 @@ * Copyright 2016 - 2025 Gary Talent (gary@drinkingtea.net). All rights reserved. */ +#include #include #include namespace keel { static ox::Result findConverter( - ox::SpanView const&converters, + ox::SpanView const&converters, ox::StringViewCR srcTypeName, int const srcTypeVersion, ox::StringViewCR dstTypeName, int const dstTypeVersion) noexcept { for (auto const&c : converters) { - if (c->matches(srcTypeName, srcTypeVersion, dstTypeName, dstTypeVersion)) { - return c; + if (c.converter()->matches(srcTypeName, srcTypeVersion, dstTypeName, dstTypeVersion)) { + return c.converter(); } } return ox::Error{1, "Could not find converter"}; @@ -31,7 +32,7 @@ static ox::Result> convert(BaseConverter const&c, Context &ctx, W static ox::Result> convert( Context &ctx, - ox::SpanView const&converters, + ox::SpanView const&converters, auto &src, ox::StringViewCR srcTypeName, int const srcTypeVersion, @@ -45,14 +46,14 @@ static ox::Result> convert( } // try to chain multiple converters for (auto const&subConverter : converters) { - if (!subConverter->dstMatches(dstTypeName, dstTypeVersion)) { + if (!subConverter.converter()->dstMatches(dstTypeName, dstTypeVersion)) { continue; } const auto [intermediate, chainErr] = convert(ctx, converters, src, srcTypeName, srcTypeVersion, - subConverter->srcTypeName(), subConverter->srcTypeVersion()); + subConverter.converter()->srcTypeName(), subConverter.converter()->srcTypeVersion()); if (!chainErr) { - return subConverter->convertPtrToPtr(ctx, *intermediate); + return subConverter.converter()->convertPtrToPtr(ctx, *intermediate); } } return ox::Error{1, "Could not convert between types"}; From f1c2113dd37eddee42c37e356c2133ef2ac8185c Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 17 Apr 2025 00:32:38 -0500 Subject: [PATCH 05/10] [keel] Fix some completely incomprehensible build break in GCC12... --- src/olympic/keel/include/keel/asset.hpp | 2 +- src/olympic/keel/include/keel/typeconv.hpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/olympic/keel/include/keel/asset.hpp b/src/olympic/keel/include/keel/asset.hpp index 5b25a2af..dc9f3f57 100644 --- a/src/olympic/keel/include/keel/asset.hpp +++ b/src/olympic/keel/include/keel/asset.hpp @@ -4,7 +4,7 @@ #pragma once -#include +#include #include #include "validation.hpp" diff --git a/src/olympic/keel/include/keel/typeconv.hpp b/src/olympic/keel/include/keel/typeconv.hpp index 59c32184..777b0378 100644 --- a/src/olympic/keel/include/keel/typeconv.hpp +++ b/src/olympic/keel/include/keel/typeconv.hpp @@ -4,6 +4,7 @@ #pragma once +#include #include #include #include From 035ba8810fabcaae9cf961ff5706781f7dbf7d5f Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 17 Apr 2025 00:37:05 -0500 Subject: [PATCH 06/10] [keel,nostalgia] Fix converter type names --- .../modules/gfx/src/keel/keelmodule.cpp | 24 +++++++++---------- .../modules/sound/src/keel/keelmodule.cpp | 2 +- src/olympic/keel/include/keel/context.hpp | 4 ++-- src/olympic/keel/include/keel/module.hpp | 2 +- src/olympic/keel/include/keel/typeconv.hpp | 16 ++++++------- src/olympic/keel/src/module.cpp | 2 +- src/olympic/keel/src/typeconv.cpp | 4 ++-- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp b/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp index a5236348..a4493c6e 100644 --- a/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp +++ b/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp @@ -39,19 +39,19 @@ static class: public keel::Module { } [[nodiscard]] - ox::Vector converters() const noexcept final { + ox::Vector converters() const noexcept final { return { - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), - keel::ConverterWrap::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), }; } diff --git a/src/nostalgia/modules/sound/src/keel/keelmodule.cpp b/src/nostalgia/modules/sound/src/keel/keelmodule.cpp index 780862e9..c703ec67 100644 --- a/src/nostalgia/modules/sound/src/keel/keelmodule.cpp +++ b/src/nostalgia/modules/sound/src/keel/keelmodule.cpp @@ -26,7 +26,7 @@ static class: public keel::Module { } [[nodiscard]] - ox::Vector converters() const noexcept final { + ox::Vector converters() const noexcept final { return { }; } diff --git a/src/olympic/keel/include/keel/context.hpp b/src/olympic/keel/include/keel/context.hpp index 0325c74e..73e80876 100644 --- a/src/olympic/keel/include/keel/context.hpp +++ b/src/olympic/keel/include/keel/context.hpp @@ -22,7 +22,7 @@ class Context { AssetManager assetManager; ox::HashMap pathToUuid; ox::HashMap uuidToPath; - ox::Vector converters; + ox::Vector converters; ox::Vector packTransforms; #else std::size_t preloadSectionOffset = 0; @@ -45,7 +45,7 @@ constexpr ox::SpanView packTransforms( #endif } -constexpr ox::SpanView converters( +constexpr ox::SpanView converters( [[maybe_unused]] Context const&ctx) noexcept { #ifndef OX_BARE_METAL return ctx.converters; diff --git a/src/olympic/keel/include/keel/module.hpp b/src/olympic/keel/include/keel/module.hpp index ed5b55b6..f0ce8bf6 100644 --- a/src/olympic/keel/include/keel/module.hpp +++ b/src/olympic/keel/include/keel/module.hpp @@ -32,7 +32,7 @@ class Module { [[nodiscard]] virtual ox::Vector types() const noexcept; [[nodiscard]] - virtual ox::Vector converters() const noexcept; + virtual ox::Vector converters() const noexcept; [[nodiscard]] virtual ox::Vector packTransforms() const noexcept; }; diff --git a/src/olympic/keel/include/keel/typeconv.hpp b/src/olympic/keel/include/keel/typeconv.hpp index 777b0378..0dfa2614 100644 --- a/src/olympic/keel/include/keel/typeconv.hpp +++ b/src/olympic/keel/include/keel/typeconv.hpp @@ -129,7 +129,7 @@ class BaseConverter { template -class Converter: public BaseConverter { +class ConverterFunc: public BaseConverter { private: template struct ParamExtractor { @@ -194,20 +194,20 @@ class Converter: public BaseConverter { }; -class ConverterWrap { +class Converter { private: ox::AllocAlias m_buff{}; BaseConverter *m_conv{}; public: template - static ConverterWrap make() { - ConverterWrap out; - static_assert(sizeof(Converter) <= sizeof(out.m_buff)); - out.m_conv = new (out.m_buff.data()) Converter{}; + static Converter make() { + Converter out; + static_assert(sizeof(ConverterFunc) <= sizeof(out.m_buff)); + out.m_conv = new (out.m_buff.data()) ConverterFunc{}; return out; } - constexpr ConverterWrap() {} - ConverterWrap(ConverterWrap const &other): + constexpr Converter() {} + Converter(Converter const &other): m_buff{other.m_buff}, m_conv{m_buff.data()} {} [[nodiscard]] diff --git a/src/olympic/keel/src/module.cpp b/src/olympic/keel/src/module.cpp index c6ca0381..38ba4ec7 100644 --- a/src/olympic/keel/src/module.cpp +++ b/src/olympic/keel/src/module.cpp @@ -24,7 +24,7 @@ ox::Vector Module::types() const noexcept { return {}; } -ox::Vector Module::converters() const noexcept { +ox::Vector Module::converters() const noexcept { return {}; } diff --git a/src/olympic/keel/src/typeconv.cpp b/src/olympic/keel/src/typeconv.cpp index 505b1679..cb96f957 100644 --- a/src/olympic/keel/src/typeconv.cpp +++ b/src/olympic/keel/src/typeconv.cpp @@ -9,7 +9,7 @@ namespace keel { static ox::Result findConverter( - ox::SpanView const&converters, + ox::SpanView const&converters, ox::StringViewCR srcTypeName, int const srcTypeVersion, ox::StringViewCR dstTypeName, @@ -32,7 +32,7 @@ static ox::Result> convert(BaseConverter const&c, Context &ctx, W static ox::Result> convert( Context &ctx, - ox::SpanView const&converters, + ox::SpanView const&converters, auto &src, ox::StringViewCR srcTypeName, int const srcTypeVersion, From e86180e842fb3ac746ab3528e7d3fe8b56bfd24d Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 17 Apr 2025 00:39:34 -0500 Subject: [PATCH 07/10] [nostalgia/core/keel] Consistency cleanup --- .../modules/gfx/src/keel/keelmodule.cpp | 22 +++++++++---------- .../modules/gfx/src/keel/typeconv.cpp | 22 +++++++++---------- .../modules/gfx/src/keel/typeconv.hpp | 22 +++++++++---------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp b/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp index a4493c6e..fbef02ed 100644 --- a/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp +++ b/src/nostalgia/modules/gfx/src/keel/keelmodule.cpp @@ -41,17 +41,17 @@ static class: public keel::Module { [[nodiscard]] ox::Vector converters() const noexcept final { return { - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), - keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), + keel::Converter::make(), }; } diff --git a/src/nostalgia/modules/gfx/src/keel/typeconv.cpp b/src/nostalgia/modules/gfx/src/keel/typeconv.cpp index b299e151..31d48029 100644 --- a/src/nostalgia/modules/gfx/src/keel/typeconv.cpp +++ b/src/nostalgia/modules/gfx/src/keel/typeconv.cpp @@ -6,7 +6,7 @@ namespace nostalgia::gfx { -ox::Error ConvertNostalgiaPaletteToPaletteV1( +ox::Error convertNostalgiaPaletteToPaletteV1( keel::Context&, NostalgiaPalette &src, PaletteV1 &dst) noexcept { @@ -14,7 +14,7 @@ ox::Error ConvertNostalgiaPaletteToPaletteV1( return {}; } -ox::Error ConvertPaletteV1ToPaletteV2( +ox::Error convertPaletteV1ToPaletteV2( keel::Context&, PaletteV1 &src, PaletteV2 &dst) noexcept { @@ -22,7 +22,7 @@ ox::Error ConvertPaletteV1ToPaletteV2( return {}; } -ox::Error ConvertPaletteV2ToPaletteV3( +ox::Error convertPaletteV2ToPaletteV3( keel::Context&, PaletteV2 &src, PaletteV3 &dst) noexcept { @@ -36,7 +36,7 @@ ox::Error ConvertPaletteV2ToPaletteV3( return {}; } -ox::Error ConvertPaletteV3ToPaletteV4( +ox::Error convertPaletteV3ToPaletteV4( keel::Context&, PaletteV3 &src, PaletteV4 &dst) noexcept { @@ -52,7 +52,7 @@ ox::Error ConvertPaletteV3ToPaletteV4( return {}; } -ox::Error ConvertPaletteV4ToPaletteV5( +ox::Error convertPaletteV4ToPaletteV5( keel::Context&, PaletteV4 &src, PaletteV5 &dst) noexcept { @@ -72,7 +72,7 @@ ox::Error ConvertPaletteV4ToPaletteV5( return {}; } -ox::Error ConvertPaletteToCompactPalette( +ox::Error convertPaletteToCompactPalette( keel::Context&, Palette &src, CompactPalette &dst) noexcept { @@ -86,7 +86,7 @@ ox::Error ConvertPaletteToCompactPalette( return {}; } -ox::Error ConvertTileSheetV1ToTileSheetV2( +ox::Error convertTileSheetV1ToTileSheetV2( keel::Context&, TileSheetV1 &src, TileSheetV2 &dst) noexcept { @@ -115,7 +115,7 @@ static void convertSubsheet( } } -ox::Error ConvertTileSheetV2ToTileSheetV3( +ox::Error convertTileSheetV2ToTileSheetV3( keel::Context&, TileSheetV2 &src, TileSheetV3 &dst) noexcept { @@ -142,7 +142,7 @@ static void convertSubsheet( } } -ox::Error ConvertTileSheetV3ToTileSheetV4( +ox::Error convertTileSheetV3ToTileSheetV4( keel::Context&, TileSheetV3 &src, TileSheetV4 &dst) noexcept { @@ -179,7 +179,7 @@ static void convertSubsheet( } } -ox::Error ConvertTileSheetV4ToTileSheetV5( +ox::Error convertTileSheetV4ToTileSheetV5( keel::Context&, TileSheetV4 &src, TileSheetV5 &dst) noexcept { @@ -191,7 +191,7 @@ ox::Error ConvertTileSheetV4ToTileSheetV5( } -ox::Error ConvertTileSheetToCompactTileSheet( +ox::Error convertTileSheetToCompactTileSheet( keel::Context&, TileSheet &src, CompactTileSheet &dst) noexcept { diff --git a/src/nostalgia/modules/gfx/src/keel/typeconv.hpp b/src/nostalgia/modules/gfx/src/keel/typeconv.hpp index 64bb5c42..bc55aa9f 100644 --- a/src/nostalgia/modules/gfx/src/keel/typeconv.hpp +++ b/src/nostalgia/modules/gfx/src/keel/typeconv.hpp @@ -16,26 +16,26 @@ namespace nostalgia::gfx { // Type converters -ox::Error ConvertNostalgiaPaletteToPaletteV1(keel::Context&, NostalgiaPalette &src, PaletteV1 &dst) noexcept; +ox::Error convertNostalgiaPaletteToPaletteV1(keel::Context&, NostalgiaPalette &src, PaletteV1 &dst) noexcept; -ox::Error ConvertPaletteV1ToPaletteV2(keel::Context&, PaletteV1 &src, PaletteV2 &dst) noexcept; +ox::Error convertPaletteV1ToPaletteV2(keel::Context&, PaletteV1 &src, PaletteV2 &dst) noexcept; -ox::Error ConvertPaletteV2ToPaletteV3(keel::Context&, PaletteV2 &src, PaletteV3 &dst) noexcept; +ox::Error convertPaletteV2ToPaletteV3(keel::Context&, PaletteV2 &src, PaletteV3 &dst) noexcept; -ox::Error ConvertPaletteV3ToPaletteV4(keel::Context&, PaletteV3 &src, PaletteV4 &dst) noexcept; +ox::Error convertPaletteV3ToPaletteV4(keel::Context&, PaletteV3 &src, PaletteV4 &dst) noexcept; -ox::Error ConvertPaletteV4ToPaletteV5(keel::Context&, PaletteV4 &src, PaletteV5 &dst) noexcept; +ox::Error convertPaletteV4ToPaletteV5(keel::Context&, PaletteV4 &src, PaletteV5 &dst) noexcept; -ox::Error ConvertPaletteToCompactPalette(keel::Context&, Palette &src, CompactPalette &dst) noexcept; +ox::Error convertPaletteToCompactPalette(keel::Context&, Palette &src, CompactPalette &dst) noexcept; -ox::Error ConvertTileSheetV1ToTileSheetV2(keel::Context&, TileSheetV1 &src, TileSheetV2 &dst) noexcept; +ox::Error convertTileSheetV1ToTileSheetV2(keel::Context&, TileSheetV1 &src, TileSheetV2 &dst) noexcept; -ox::Error ConvertTileSheetV2ToTileSheetV3(keel::Context&, TileSheetV2 &src, TileSheetV3 &dst) noexcept; +ox::Error convertTileSheetV2ToTileSheetV3(keel::Context&, TileSheetV2 &src, TileSheetV3 &dst) noexcept; -ox::Error ConvertTileSheetV3ToTileSheetV4(keel::Context&, TileSheetV3 &src, TileSheetV4 &dst) noexcept; +ox::Error convertTileSheetV3ToTileSheetV4(keel::Context&, TileSheetV3 &src, TileSheetV4 &dst) noexcept; -ox::Error ConvertTileSheetV4ToTileSheetV5(keel::Context&, TileSheetV4 &src, TileSheetV5 &dst) noexcept; +ox::Error convertTileSheetV4ToTileSheetV5(keel::Context&, TileSheetV4 &src, TileSheetV5 &dst) noexcept; -ox::Error ConvertTileSheetToCompactTileSheet(keel::Context&, TileSheet &src, CompactTileSheet &dst) noexcept; +ox::Error convertTileSheetToCompactTileSheet(keel::Context&, TileSheet &src, CompactTileSheet &dst) noexcept; } From 97b707b61c60947d50251af224dc0ff4ede7a676 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 17 Apr 2025 01:01:22 -0500 Subject: [PATCH 08/10] [keel] Fix MSVC build --- src/olympic/keel/include/keel/typeconv.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/olympic/keel/include/keel/typeconv.hpp b/src/olympic/keel/include/keel/typeconv.hpp index 0dfa2614..0ac46791 100644 --- a/src/olympic/keel/include/keel/typeconv.hpp +++ b/src/olympic/keel/include/keel/typeconv.hpp @@ -143,8 +143,8 @@ class ConverterFunc: public BaseConverter { } public: - using SrcType = decltype(makeParamExtractor(Func))::Src; - using DstType = decltype(makeParamExtractor(Func))::Dst; + using SrcType = typename decltype(makeParamExtractor(Func))::Src; + using DstType = typename decltype(makeParamExtractor(Func))::Dst; [[nodiscard]] constexpr ox::StringView srcTypeName() const noexcept final { From 477834ac049addbfdf07d859eccdde7e89e53b6e Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 17 Apr 2025 01:06:08 -0500 Subject: [PATCH 09/10] [keel] Cleanup --- src/olympic/keel/include/keel/typeconv.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/olympic/keel/include/keel/typeconv.hpp b/src/olympic/keel/include/keel/typeconv.hpp index 0ac46791..e9f2c2cc 100644 --- a/src/olympic/keel/include/keel/typeconv.hpp +++ b/src/olympic/keel/include/keel/typeconv.hpp @@ -132,19 +132,19 @@ template class ConverterFunc: public BaseConverter { private: template - struct ParamExtractor { + struct ParamPack { using Src = SrcType; using Dst = DstType; }; template - static auto makeParamExtractor(ox::Error (*)(keel::Context&, S&, D&)) { - return ParamExtractor{}; + static ParamPack extractParams(ox::Error (*)(Context&, S&, D&)) { + return {}; } public: - using SrcType = typename decltype(makeParamExtractor(Func))::Src; - using DstType = typename decltype(makeParamExtractor(Func))::Dst; + using SrcType = typename decltype(extractParams(Func))::Src; + using DstType = typename decltype(extractParams(Func))::Dst; [[nodiscard]] constexpr ox::StringView srcTypeName() const noexcept final { From 89ae226b1d1eb514bad146ebfc5e0a12818ec808 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Thu, 17 Apr 2025 01:12:05 -0500 Subject: [PATCH 10/10] [keel] Improve correctness --- src/olympic/keel/include/keel/typeconv.hpp | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/olympic/keel/include/keel/typeconv.hpp b/src/olympic/keel/include/keel/typeconv.hpp index e9f2c2cc..44511143 100644 --- a/src/olympic/keel/include/keel/typeconv.hpp +++ b/src/olympic/keel/include/keel/typeconv.hpp @@ -115,7 +115,7 @@ class BaseConverter { virtual ox::Result> convertPtrToPtr(keel::Context &ctx, Wrap &src) const noexcept = 0; virtual ox::Result> convertBuffToPtr( - keel::Context &ctx, ox::BufferView const&srcBuff) const noexcept = 0; + Context &ctx, ox::BufferView const&srcBuff) const noexcept = 0; [[nodiscard]] constexpr bool matches( @@ -129,7 +129,7 @@ class BaseConverter { template -class ConverterFunc: public BaseConverter { +class ConverterFunc final: public BaseConverter { private: template struct ParamPack { @@ -137,8 +137,8 @@ class ConverterFunc: public BaseConverter { using Dst = DstType; }; - template - static ParamPack extractParams(ox::Error (*)(Context&, S&, D&)) { + template + static ParamPack extractParams(ox::Error (*)(Context&, Src&, Dst&)) { return {}; } @@ -147,17 +147,17 @@ class ConverterFunc: public BaseConverter { using DstType = typename decltype(extractParams(Func))::Dst; [[nodiscard]] - constexpr ox::StringView srcTypeName() const noexcept final { + constexpr ox::StringView srcTypeName() const noexcept override { return ox::ModelTypeName_v; } [[nodiscard]] - constexpr int srcTypeVersion() const noexcept final { + constexpr int srcTypeVersion() const noexcept override { return ox::ModelTypeVersion_v; } [[nodiscard]] - constexpr bool srcMatches(ox::StringViewCR pSrcTypeName, int pSrcTypeVersion) const noexcept final { + constexpr bool srcMatches(ox::StringViewCR pSrcTypeName, int pSrcTypeVersion) const noexcept override { constexpr auto SrcTypeName = ox::requireModelTypeName(); constexpr auto SrcTypeVersion = ox::requireModelTypeVersion(); return pSrcTypeName == SrcTypeName @@ -165,7 +165,7 @@ class ConverterFunc: public BaseConverter { } [[nodiscard]] - constexpr bool dstMatches(ox::StringViewCR dstTypeName, int dstTypeVersion) const noexcept final { + constexpr bool dstMatches(ox::StringViewCR dstTypeName, int dstTypeVersion) const noexcept override { constexpr auto DstTypeName = ox::StringView{ox::requireModelTypeName()}; constexpr auto DstTypeVersion = ox::requireModelTypeVersion(); return dstTypeName == DstTypeName @@ -173,14 +173,14 @@ class ConverterFunc: public BaseConverter { } ox::Result> convertPtrToPtr( - keel::Context &ctx, Wrap &src) const noexcept final { + Context &ctx, Wrap &src) const noexcept override { ox::Result> dst{makeWrap()}; OX_RETURN_ERROR(convert(ctx, wrapCast(src), wrapCast(*dst.value))); return dst; } ox::Result> convertBuffToPtr( - keel::Context &ctx, ox::BufferView const&srcBuff) const noexcept final { + Context &ctx, ox::BufferView const&srcBuff) const noexcept override { OX_REQUIRE_M(src, readAsset(srcBuff)); ox::Result> dst{makeWrap()}; OX_RETURN_ERROR(convert(ctx, src, wrapCast(*dst.value))); @@ -188,7 +188,7 @@ class ConverterFunc: public BaseConverter { } protected: - ox::Error convert(keel::Context &ctx, SrcType &src, DstType &dst) const noexcept { + static ox::Error convert(Context &ctx, SrcType &src, DstType &dst) noexcept { return Func(ctx, src, dst); } @@ -200,14 +200,14 @@ class Converter { BaseConverter *m_conv{}; public: template - static Converter make() { + static Converter make() noexcept { Converter out; static_assert(sizeof(ConverterFunc) <= sizeof(out.m_buff)); out.m_conv = new (out.m_buff.data()) ConverterFunc{}; return out; } constexpr Converter() {} - Converter(Converter const &other): + Converter(Converter const &other) noexcept: m_buff{other.m_buff}, m_conv{m_buff.data()} {} [[nodiscard]] @@ -256,20 +256,20 @@ ox::Result convertObjToObj( } template -ox::Result convert(keel::Context &ctx, ox::BufferView const&src) noexcept { +ox::Result convert(Context &ctx, ox::BufferView const&src) noexcept { OX_REQUIRE(out, convert(ctx, src, ox::ModelTypeName_v, ox::ModelTypeVersion_v)); return std::move(wrapCast(out)); } template -ox::Error convert(keel::Context &ctx, ox::BufferView const&buff, DstType &outObj) noexcept { +ox::Error convert(Context &ctx, ox::BufferView const&buff, DstType &outObj) noexcept { OX_REQUIRE(out, convert(ctx, buff, ox::ModelTypeName_v, ox::ModelTypeVersion_v)); outObj = std::move(wrapCast(*out)); return {}; } template -ox::Error convertObjToObj(keel::Context &ctx, auto &src, DstType &outObj) noexcept { +ox::Error convertObjToObj(Context &ctx, auto &src, DstType &outObj) noexcept { OX_REQUIRE(outPtr, convert(ctx, src, ox::ModelTypeName_v, ox::ModelTypeVersion_v)); outObj = std::move(wrapCast(*outPtr)); return {}; @@ -277,13 +277,13 @@ ox::Error convertObjToObj(keel::Context &ctx, auto &src, DstType &outObj) noexce template ox::Result convertBuffToBuff( - keel::Context &ctx, ox::BufferView const&src, ox::ClawFormat const fmt) noexcept { + Context &ctx, ox::BufferView const&src, ox::ClawFormat const fmt) noexcept { OX_REQUIRE(out, convert(ctx, src, ox::ModelTypeName_v, ox::ModelTypeVersion_v)); return ox::writeClaw(wrapCast(*out), fmt); } template -ox::Result transformRule(keel::Context &ctx, ox::Buffer &buff, ox::StringViewCR typeId) noexcept { +ox::Result transformRule(Context &ctx, ox::Buffer &buff, ox::StringViewCR typeId) noexcept { if (typeId == ox::ModelTypeId_v) { OX_RETURN_ERROR(keel::convertBuffToBuff(ctx, buff, fmt).moveTo(buff)); return true;