From ba36cdc96184b6f4c916e05eac4a5c3773bfe320 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Senior=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Wed, 30 May 2018 16:39:22 +0900 Subject: [PATCH] [nnkit] Introduce 'nnkit_registry_backend' (#258) * [nnkit] Introduce 'nnkit_registry_backend' This commit introduces 'nnkit_registry_backend' library which servers as a global registry on various backends. Signed-off-by: Jonghyun Park * Leave a comment on thread safety * Update comment --- contrib/nnkit/libs/registry/CMakeLists.txt | 1 + contrib/nnkit/libs/registry/backend/CMakeLists.txt | 6 ++++ .../include/nnkit/registry/BackendRegistry.h | 36 ++++++++++++++++++++++ .../libs/registry/backend/src/BackendRegistry.cpp | 30 ++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 contrib/nnkit/libs/registry/CMakeLists.txt create mode 100644 contrib/nnkit/libs/registry/backend/CMakeLists.txt create mode 100644 contrib/nnkit/libs/registry/backend/include/nnkit/registry/BackendRegistry.h create mode 100644 contrib/nnkit/libs/registry/backend/src/BackendRegistry.cpp diff --git a/contrib/nnkit/libs/registry/CMakeLists.txt b/contrib/nnkit/libs/registry/CMakeLists.txt new file mode 100644 index 0000000..9d88b8a --- /dev/null +++ b/contrib/nnkit/libs/registry/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(backend) diff --git a/contrib/nnkit/libs/registry/backend/CMakeLists.txt b/contrib/nnkit/libs/registry/backend/CMakeLists.txt new file mode 100644 index 0000000..db2966d --- /dev/null +++ b/contrib/nnkit/libs/registry/backend/CMakeLists.txt @@ -0,0 +1,6 @@ +list(APPEND SOURCES "src/BackendRegistry.cpp") + +add_library(nnkit_registry_backend ${SOURCES}) +target_include_directories(nnkit_registry_backend PUBLIC include) +target_link_libraries(nnkit_registry_backend nnkit_intf_backend) +target_link_libraries(nnkit_registry_backend nncc_foundation) diff --git a/contrib/nnkit/libs/registry/backend/include/nnkit/registry/BackendRegistry.h b/contrib/nnkit/libs/registry/backend/include/nnkit/registry/BackendRegistry.h new file mode 100644 index 0000000..5bf1472 --- /dev/null +++ b/contrib/nnkit/libs/registry/backend/include/nnkit/registry/BackendRegistry.h @@ -0,0 +1,36 @@ +#ifndef __NNKIT_REGISTRY_BACKEND_H__ +#define __NNKIT_REGISTRY_BACKEND_H__ + +#include + +#include +#include + +#include + +namespace nnkit +{ +namespace registry +{ + +// NOTE This class is not thread-safe +class BackendRegistry +{ +public: + BackendRegistry &insert(const std::string &name, std::unique_ptr &&factory); + +public: + bool has(const std::string &name) const; + const BackendFactory &at(const std::string &name) const; + +private: + std::map> _factories; + +public: + static BackendRegistry &instance(void); +}; + +} // namespace registry +} // namespace nnkit + +#endif // __NNKIT_REGISTRY_BACKEND_H__ diff --git a/contrib/nnkit/libs/registry/backend/src/BackendRegistry.cpp b/contrib/nnkit/libs/registry/backend/src/BackendRegistry.cpp new file mode 100644 index 0000000..ffe7533 --- /dev/null +++ b/contrib/nnkit/libs/registry/backend/src/BackendRegistry.cpp @@ -0,0 +1,30 @@ +#include "nnkit/registry/BackendRegistry.h" + +namespace nnkit +{ +namespace registry +{ + +BackendRegistry &BackendRegistry::insert(const std::string &name, std::unique_ptr &&factory) +{ + _factories[name] = std::move(factory); + return (*this); +} + +bool BackendRegistry::has(const std::string &name) const { return _factories.find(name) != _factories.end(); } +const nnkit::BackendFactory &BackendRegistry::at(const std::string &name) const { return *_factories.at(name); } + +BackendRegistry &BackendRegistry::instance(void) +{ + static BackendRegistry *r = nullptr; + + if (r == nullptr) + { + r = new BackendRegistry{}; + } + + return *r; +} + +} // namespace registry +} // namespace nnkit -- 2.7.4