// Copyright (c) OpenMMLab. All rights reserved. #include "core/registry.h" namespace mmdeploy { Registry::Registry() = default; Registry::~Registry() = default; bool Registry::AddCreator(Creator &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 *Registry::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