#pragma once #include "app_framework.hpp" #include #include #include class AppSystem { public: explicit AppSystem(AppContext context); void registerApp(std::unique_ptr factory); bool startApp(const std::string& name); bool startAppByIndex(std::size_t index); void run(); [[nodiscard]] std::size_t appCount() const { return factories.size(); } [[nodiscard]] const IAppFactory* factoryAt(std::size_t index) const; [[nodiscard]] std::size_t indexOfFactory(const IAppFactory* factory) const; [[nodiscard]] std::size_t currentFactoryIndex() const { return activeIndex; } [[nodiscard]] const IApp* currentApp() const { return current.get(); } [[nodiscard]] const IAppFactory* currentFactory() const { return activeFactory; } private: AppContext context; std::vector> factories; std::unique_ptr current; IAppFactory* activeFactory = nullptr; std::size_t activeIndex = static_cast(-1); };