add dependency iterators for modules
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user