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());
}
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) {
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<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
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);
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<std::string> blacklist = {}) {
std::list<Module*>::iterator App::load(std::string modulePath, std::list<std::string> blacklist = {}) {
Module* m = dynamicLoad(modulePath);
return load(m, blacklist);
}

View File

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

View File

@@ -34,7 +34,8 @@ namespace Archimedes {
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;
};
}