diff options
author | David Beck <david.beck@arm.com> | 2018-11-12 14:59:37 +0000 |
---|---|---|
committer | Aron Virginas-Tar <aron.virginas-tar@arm.com> | 2018-11-12 16:02:51 +0000 |
commit | 111b5d94d7e854c21377f8d2c0b4234317a903f6 (patch) | |
tree | 68111e5d89b605c898b2327cb59b915e3ff64ce9 /src/backends/backendsCommon/BackendRegistry.hpp | |
parent | 4e1e136cce3fca73ba49b570cfcb620f4ec574da (diff) | |
download | armnn-111b5d94d7e854c21377f8d2c0b4234317a903f6.tar.gz |
IVGCVSW-2125 : Consolidate backend registries into one
Change-Id: I56da4780f8f5fcef7ff01d232d5d61bf299364bf
Diffstat (limited to 'src/backends/backendsCommon/BackendRegistry.hpp')
-rw-r--r-- | src/backends/backendsCommon/BackendRegistry.hpp | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/src/backends/backendsCommon/BackendRegistry.hpp b/src/backends/backendsCommon/BackendRegistry.hpp index 4b20cacbe0..2a52e24238 100644 --- a/src/backends/backendsCommon/BackendRegistry.hpp +++ b/src/backends/backendsCommon/BackendRegistry.hpp @@ -4,21 +4,57 @@ // #pragma once -#include "RegistryCommon.hpp" #include <armnn/Types.hpp> +#include <armnn/BackendId.hpp> + +#include <memory> +#include <unordered_map> namespace armnn { + class IBackendInternal; using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>; -using BackendRegistry = RegistryCommon<IBackendInternal, IBackendInternalUniquePtr>; - -BackendRegistry& BackendRegistryInstance(); -template <> -struct RegisteredTypeName<IBackend> +class BackendRegistry { - static const char * Name() { return "IBackend"; } +public: + using PointerType = IBackendInternalUniquePtr; + using FactoryFunction = std::function<PointerType()>; + + void Register(const BackendId& id, FactoryFunction factory); + bool IsBackendRegistered(const BackendId& id) const; + FactoryFunction GetFactory(const BackendId& id) const; + size_t Size() const; + BackendIdSet GetBackendIds() const; + std::string GetBackendIdsAsString() const; + + BackendRegistry() {} + virtual ~BackendRegistry() {} + + struct StaticRegistryInitializer + { + StaticRegistryInitializer(BackendRegistry& instance, + const BackendId& id, + FactoryFunction factory) + { + instance.Register(id, factory); + } + }; + +protected: + using FactoryStorage = std::unordered_map<BackendId, FactoryFunction>; + + // For testing only + static void Swap(BackendRegistry& instance, FactoryStorage& other); + +private: + BackendRegistry(const BackendRegistry&) = delete; + BackendRegistry& operator=(const BackendRegistry&) = delete; + + FactoryStorage m_Factories; }; +BackendRegistry& BackendRegistryInstance(); + } // namespace armnn
\ No newline at end of file |