From e756bb1d7387433f0b644caafe513c175abce58b Mon Sep 17 00:00:00 2001 From: Samsonium Date: Tue, 29 Sep 2026 13:25:49 +0300 Subject: [PATCH] feat: implement module access in engine API - Add implementation for `getModule` - Add implementation for `getLoadedModules` --- include/engine/core/engine.hpp | 3 ++- include/engine/core/engine_module_api.hpp | 11 +++++++--- src/engine/core/engine.cpp | 25 +++++++++++++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/include/engine/core/engine.hpp b/include/engine/core/engine.hpp index d171899..bba9fae 100644 --- a/include/engine/core/engine.hpp +++ b/include/engine/core/engine.hpp @@ -22,7 +22,8 @@ public: MscEngine(std::vector> modules); MscEventBus &getBus() override; - UNIMPL getLoadedModules() const override; + std::unordered_map getLoadedModules() const override; + MscEngineModule &getModule(const std::string &name) override; }; #endif // __MCS_ENGINE_HPP__ diff --git a/include/engine/core/engine_module_api.hpp b/include/engine/core/engine_module_api.hpp index d75b8ee..f7adc7c 100644 --- a/include/engine/core/engine_module_api.hpp +++ b/include/engine/core/engine_module_api.hpp @@ -2,8 +2,10 @@ #define __MSC_ENGINE_MODULE_API_HPP__ #include - -typedef void UNIMPL; +#include +#include +#include +#include class IMscEngineModuleAPI { @@ -14,7 +16,10 @@ public: virtual MscEventBus &getBus() = 0; /// Get access to loaded module list - virtual UNIMPL getLoadedModules() const = 0; + virtual std::unordered_map getLoadedModules() const = 0; + + /// Access module by its name + virtual MscEngineModule &getModule(const std::string &name) = 0; }; #endif // __MSC_ENGINE_MODULE_API_HPP__ diff --git a/src/engine/core/engine.cpp b/src/engine/core/engine.cpp index ca9b170..011e8b4 100644 --- a/src/engine/core/engine.cpp +++ b/src/engine/core/engine.cpp @@ -59,7 +59,28 @@ MscEventBus &MscEngine::getBus() return _bus; } -UNIMPL MscEngine::getLoadedModules() const +std::unordered_map MscEngine::getLoadedModules() const { - throw std::runtime_error("Unimplemented"); + std::unordered_map result; + for (const auto &module : _modules) + { + if (!module) + continue; + + auto mod = module.get(); + result[mod->getName()] = mod->getRev(); + } + + return result; +} + +MscEngineModule &MscEngine::getModule(const std::string &name) +{ + for (auto &module : _modules) + { + if (module.get()->getName() == name) + return *module.get(); + } + + throw std::runtime_error("Module not found: " + name); }