#ifndef MODULE_H #define MODULE_H #include "pch.hpp" namespace Archimedes { class App; class Module { friend class App; public: typedef Module* create_t(void*, App*); static std::list modules; static std::list& GetModules() { return modules; } Module(void* h, App* a) : handle(h), app(a) { modules.push_back(&name); } virtual ~Module() { modules.remove_if([this](std::string* s) -> bool { return s ? *s == name : false; }); } virtual void run() = 0; virtual void onLoad() = 0; std::string getName() const { return name; } void* getHandle() { return handle; } void setSelf(std::list::iterator s) { self = s; } protected: std::string name; void* handle; std::list::iterator self; App* app; std::unordered_map deps; }; } auto Archimedes::Module::modules = std::list(); #endif