IVGCVSW-2125 : Consolidate backend registries into one
Change-Id: I56da4780f8f5fcef7ff01d232d5d61bf299364bf
diff --git a/src/backends/backendsCommon/BackendRegistry.hpp b/src/backends/backendsCommon/BackendRegistry.hpp
index 4b20cac..2a52e24 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>;
+
+class BackendRegistry
+{
+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();
-template <>
-struct RegisteredTypeName<IBackend>
-{
- static const char * Name() { return "IBackend"; }
-};
-
} // namespace armnn
\ No newline at end of file