47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
#include <module/module_registry.h>
|
|
#include <algorithm>
|
|
|
|
namespace extra2d {
|
|
|
|
ModuleRegistry& ModuleRegistry::instance() {
|
|
static ModuleRegistry instance;
|
|
return instance;
|
|
}
|
|
|
|
std::vector<std::unique_ptr<Module>> ModuleRegistry::createModules() {
|
|
// 按优先级排序(值小的先初始化)
|
|
std::vector<ModuleInfo> sorted = registrations_;
|
|
std::sort(sorted.begin(), sorted.end(),
|
|
[](const ModuleInfo& a, const ModuleInfo& b) {
|
|
return a.priority < b.priority;
|
|
});
|
|
|
|
std::vector<std::unique_ptr<Module>> modules;
|
|
modules.reserve(sorted.size());
|
|
|
|
for (const auto& info : sorted) {
|
|
modules.push_back(info.factory());
|
|
}
|
|
|
|
return modules;
|
|
}
|
|
|
|
void ModuleRegistry::storeModuleInstance(Module* module) {
|
|
if (!module) return;
|
|
|
|
// 通过模块名称查找对应的注册信息
|
|
for (const auto& info : registrations_) {
|
|
if (info.name == module->getName()) {
|
|
// 使用注册时存储的 type 作为键
|
|
instances_[info.type] = module;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
void ModuleRegistry::clearInstances() {
|
|
instances_.clear();
|
|
}
|
|
|
|
} // namespace extra2d
|