add dependency iterators for modules

This commit is contained in:
2025-03-30 16:24:26 -05:00
parent d2d5712d20
commit 7841f04a35
3 changed files with 15 additions and 11 deletions

View File

@@ -47,10 +47,10 @@ namespace Archimedes {
return create(h, Get()); return create(h, Get());
} }
bool App::load(Module* m, std::list<std::string> blacklist = {}) { std::list<Module*>::iterator App::load(Module* m, std::list<std::string> blacklist = {}) {
if(!m) { if(!m) {
return false; return modules.end();
} }
void* h = m->getHandle(); void* h = m->getHandle();
@@ -60,7 +60,7 @@ namespace Archimedes {
delete m; delete m;
if(h) if(h)
dlclose(h); dlclose(h);
return false; return modules.end();
} }
} }
@@ -77,9 +77,9 @@ namespace Archimedes {
continue; continue;
} else { } else {
if(std::holds_alternative<std::string>(it->second)) if(std::holds_alternative<std::string>(it->second))
load(std::get<std::string>(it->second), blacklist); m->depsInstances[it->first] = load(std::get<std::string>(it->second), blacklist);
else else
load(std::get<Module*>(it->second), blacklist); m->depsInstances[it->first] = load(std::get<Module*>(it->second), blacklist);
} }
} }
@@ -87,11 +87,14 @@ namespace Archimedes {
modules.push_back(m); modules.push_back(m);
m->setSelf(--modules.end()); m->setSelf(--modules.end());
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<std::string> blacklist = {}) { std::list<Module*>::iterator App::load(std::string modulePath, std::list<std::string> blacklist = {}) {
Module* m = dynamicLoad(modulePath); Module* m = dynamicLoad(modulePath);
return load(m, blacklist); return load(m, blacklist);
} }

View File

@@ -18,8 +18,8 @@ namespace Archimedes {
std::list<std::string> toOpen; std::list<std::string> toOpen;
Module* dynamicLoad(std::string); Module* dynamicLoad(std::string);
virtual bool load(std::string, std::list<std::string>); virtual std::list<Module*>::iterator load(std::string, std::list<std::string>);
virtual bool load(Module*, std::list<std::string>); virtual std::list<Module*>::iterator load(Module*, std::list<std::string>);
virtual void unload(std::list<Module*>::iterator); virtual void unload(std::list<Module*>::iterator);

View File

@@ -34,7 +34,8 @@ namespace Archimedes {
App* app; App* app;
std::unordered_map<std::string, std::variant<std::string, Archimedes::Module*>> deps; std::unordered_map<std::string, std::variant<std::string, Module*>> deps;
std::unordered_map<std::string, std::list<Module*>::iterator> depsInstances;
}; };
} }