From 7841f04a352cbbeec09083a7b2262137847efb6f Mon Sep 17 00:00:00 2001 From: Nathan Date: Sun, 30 Mar 2025 16:24:26 -0500 Subject: [PATCH] add dependency iterators for modules --- include/utils/App/App.cpp | 19 +++++++++++-------- include/utils/App/App.h | 4 ++-- include/utils/Module/Module.h | 3 ++- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/include/utils/App/App.cpp b/include/utils/App/App.cpp index b756cef..def6ec9 100644 --- a/include/utils/App/App.cpp +++ b/include/utils/App/App.cpp @@ -47,10 +47,10 @@ namespace Archimedes { return create(h, Get()); } - bool App::load(Module* m, std::list blacklist = {}) { + std::list::iterator App::load(Module* m, std::list blacklist = {}) { if(!m) { - return false; + return modules.end(); } void* h = m->getHandle(); @@ -60,7 +60,7 @@ namespace Archimedes { delete m; if(h) dlclose(h); - return false; + return modules.end(); } } @@ -77,9 +77,9 @@ namespace Archimedes { continue; } else { if(std::holds_alternative(it->second)) - load(std::get(it->second), blacklist); + m->depsInstances[it->first] = load(std::get(it->second), blacklist); else - load(std::get(it->second), blacklist); + m->depsInstances[it->first] = load(std::get(it->second), blacklist); } } @@ -87,11 +87,14 @@ namespace Archimedes { modules.push_back(m); m->setSelf(--modules.end()); modules.end()++; - - return true; +/* + m->setSelf(modules.end()); + modules.push_back(m); +*/ + return m->self; } - bool App::load(std::string modulePath, std::list blacklist = {}) { + std::list::iterator App::load(std::string modulePath, std::list blacklist = {}) { Module* m = dynamicLoad(modulePath); return load(m, blacklist); } diff --git a/include/utils/App/App.h b/include/utils/App/App.h index 6bbc5ac..3dbacc6 100644 --- a/include/utils/App/App.h +++ b/include/utils/App/App.h @@ -18,8 +18,8 @@ namespace Archimedes { std::list toOpen; Module* dynamicLoad(std::string); - virtual bool load(std::string, std::list); - virtual bool load(Module*, std::list); + virtual std::list::iterator load(std::string, std::list); + virtual std::list::iterator load(Module*, std::list); virtual void unload(std::list::iterator); diff --git a/include/utils/Module/Module.h b/include/utils/Module/Module.h index 184433c..5360f50 100644 --- a/include/utils/Module/Module.h +++ b/include/utils/Module/Module.h @@ -34,7 +34,8 @@ namespace Archimedes { App* app; - std::unordered_map> deps; + std::unordered_map> deps; + std::unordered_map::iterator> depsInstances; }; }