47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
// Copyright (c) OpenMMLab. All rights reserved.
|
|
|
|
#include "core/registry.h"
|
|
|
|
namespace mmdeploy {
|
|
|
|
Registry<void>::Registry() = default;
|
|
|
|
Registry<void>::~Registry() = default;
|
|
|
|
bool Registry<void>::AddCreator(Creator<void> &creator) {
|
|
MMDEPLOY_DEBUG("Adding creator: {}", creator.GetName());
|
|
auto key = creator.GetName();
|
|
if (entries_.find(key) == entries_.end()) {
|
|
entries_.insert(std::make_pair(key, &creator));
|
|
return true;
|
|
}
|
|
|
|
for (auto iter = entries_.lower_bound(key); iter != entries_.upper_bound(key); ++iter) {
|
|
if (iter->second->GetVersion() == creator.GetVersion()) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
entries_.insert(std::make_pair(key, &creator));
|
|
return true;
|
|
}
|
|
|
|
Creator<void> *Registry<void>::GetCreator(const std::string &type, int version) {
|
|
auto iter = entries_.find(type);
|
|
if (iter == entries_.end()) {
|
|
return nullptr;
|
|
}
|
|
if (0 == version) {
|
|
return iter->second;
|
|
}
|
|
|
|
for (auto iter = entries_.lower_bound(type); iter != entries_.upper_bound(type); ++iter) {
|
|
if (iter->second->GetVersion() == version) {
|
|
return iter->second;
|
|
}
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
} // namespace mmdeploy
|