Extra2D/src/module/module_registry.cpp

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