aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/BackendRegistry.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/backendsCommon/BackendRegistry.hpp')
-rw-r--r--src/backends/backendsCommon/BackendRegistry.hpp50
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