diff --git a/src/olympic/keel/include/keel/asset.hpp b/src/olympic/keel/include/keel/asset.hpp index eccdf4b6..3283de77 100644 --- a/src/olympic/keel/include/keel/asset.hpp +++ b/src/olympic/keel/include/keel/asset.hpp @@ -17,14 +17,14 @@ ox::Result readUuidHeader(ox::BufferView const &buff) noexcept; ox::Result regenerateUuidHeader(ox::Buffer &buff) noexcept; -ox::Error writeUuidHeader(ox::Writer_c auto &writer, ox::UUID const &uuid) noexcept { +constexpr ox::Error writeUuidHeader(ox::Writer_c auto &writer, ox::UUID const &uuid) noexcept { OX_RETURN_ERROR(write(writer, "K1;")); OX_RETURN_ERROR(uuid.toString(writer)); return writer.put(';'); } template -ox::Result readAsset(ox::BufferView buff) noexcept { +constexpr ox::Result readAsset(ox::BufferView buff) noexcept { auto const err = readUuidHeader(buff).error; if (!err) { buff += K1HdrSz; // the size of K1 headers diff --git a/src/olympic/keel/include/keel/module.hpp b/src/olympic/keel/include/keel/module.hpp index 28519422..746b643c 100644 --- a/src/olympic/keel/include/keel/module.hpp +++ b/src/olympic/keel/include/keel/module.hpp @@ -37,6 +37,8 @@ class Module { virtual ox::Vector packTransforms() const noexcept; }; +void registerModule(Module const &mod) noexcept; + void registerModule(Module const *mod) noexcept; [[nodiscard]] diff --git a/src/olympic/keel/src/media.cpp b/src/olympic/keel/src/media.cpp index a8f44ef2..c5fd283d 100644 --- a/src/olympic/keel/src/media.cpp +++ b/src/olympic/keel/src/media.cpp @@ -12,7 +12,7 @@ namespace keel { -ox::Result loadRom(ox::StringViewCR path) noexcept { +static ox::Result loadRom(ox::StringViewCR path) noexcept { std::ifstream file(std::string(toStdStringView(path)), std::ios::binary | std::ios::ate); if (!file.good()) { oxErrorf("Could not find ROM file: {}", path); @@ -33,8 +33,8 @@ ox::Result loadRom(ox::StringViewCR path) noexcept { } } -void unloadRom(char *rom) noexcept { - ox::safeDelete(rom); +static void unloadRom(char *rom) noexcept { + ox::safeDeleteArray(rom); } static void clearUuidMap(Context &ctx) noexcept { @@ -212,7 +212,7 @@ static ox::Error buildUuidMap(Context&, DuplicateSet*) noexcept { return {}; } -ox::Result loadRom(ox::StringViewCR) noexcept { +static ox::Result loadRom(ox::StringViewCR) noexcept { // put the header in the wrong order to prevent mistaking this code for the // media section constexpr auto headerP2 = "R_______________"; @@ -229,7 +229,7 @@ ox::Result loadRom(ox::StringViewCR) noexcept { return ox::Error(1); } -void unloadRom(char*) noexcept { +static void unloadRom(char*) noexcept { } ox::Result getPreloadAddr(keel::Context &ctx, ox::StringViewCR path) noexcept { diff --git a/src/olympic/keel/src/module.cpp b/src/olympic/keel/src/module.cpp index d66828a7..4784317c 100644 --- a/src/olympic/keel/src/module.cpp +++ b/src/olympic/keel/src/module.cpp @@ -8,9 +8,13 @@ namespace keel { static ox::Vector mods; +void registerModule(Module const &mod) noexcept { + mods.emplace_back(&mod); +} + void registerModule(Module const *mod) noexcept { if (mod) { - mods.emplace_back(mod); + registerModule(*mod); } } diff --git a/src/olympic/keel/src/pack.cpp b/src/olympic/keel/src/pack.cpp index 0ae68c1c..3bb780da 100644 --- a/src/olympic/keel/src/pack.cpp +++ b/src/olympic/keel/src/pack.cpp @@ -38,8 +38,9 @@ static ox::Error pathToInode( auto const uuid = ox::substr(path, 7); OX_RETURN_ERROR(keel::uuidToPath(ctx, uuid).to().moveTo(path)); } - auto const s = dest.stat(path); - auto const inode = s.ok() ? s.value.inode : 0; + auto const inode = dest.stat(path) + .or_value({.inode = 0}) + .inode; OX_RETURN_ERROR(typeVal->set(static_cast(ox::FileAddressType::Inode))); oxOutf("\tpath to inode: {} => {}\n", path, inode); return data.set(2, inode); @@ -49,6 +50,7 @@ static ox::Error transformFileAddressesObj( Context &ctx, ox::FileSystem const &dest, ox::ModelObject &obj) noexcept; + static ox::Error transformFileAddressesVec( Context &ctx, ox::FileSystem const &dest, @@ -58,14 +60,18 @@ static ox::Error transformFileAddresses( Context &ctx, ox::FileSystem const &dest, ox::ModelValue &v) noexcept { - if (v.type() == ox::ModelValue::Type::Object) { - auto &obj = v.get(); - return transformFileAddressesObj(ctx, dest, obj); - } else if (v.type() == ox::ModelValue::Type::Vector) { - auto &vec = v.get(); - return transformFileAddressesVec(ctx, dest, vec); + switch (v.type()) { + case ox::ModelValue::Type::Object: { + auto &obj = v.get(); + return transformFileAddressesObj(ctx, dest, obj); + } + case ox::ModelValue::Type::Vector: { + auto &vec = v.get(); + return transformFileAddressesVec(ctx, dest, vec); + } + default: + return {}; } - return {}; } static ox::Error transformFileAddressesVec(