diff options
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 |