aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMatteo Martincigh <matteo.martincigh@arm.com>2019-10-29 15:03:22 +0000
committerÁron Virginás-Tar <aron.virginas-tar@arm.com>2019-10-31 12:52:00 +0000
commitc601aa626dac78e1482a258e493a6c186e6bf514 (patch)
treedac6879d548571527fdd6dee9a7400f331583fdf /include
parentd90530719f6ab16417eb95d885317f50c662725f (diff)
downloadarmnn-c601aa626dac78e1482a258e493a6c186e6bf514.tar.gz
GitHub #292 Move BackendRegistry.hpp to the public API
* Moved to BackendRegistry.hpp include/armnn * Updated makefiles and sources accordingly Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com> Change-Id: I4d83abb581d523218a880c879fcf30c9611f7fd7
Diffstat (limited to 'include')
-rw-r--r--include/armnn/BackendRegistry.hpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/include/armnn/BackendRegistry.hpp b/include/armnn/BackendRegistry.hpp
new file mode 100644
index 0000000000..82e59d970b
--- /dev/null
+++ b/include/armnn/BackendRegistry.hpp
@@ -0,0 +1,61 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/Types.hpp>
+#include <armnn/BackendId.hpp>
+
+#include <memory>
+#include <unordered_map>
+#include <functional>
+
+namespace armnn
+{
+
+class IBackendInternal;
+using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
+
+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();
+
+} // namespace armnn