aboutsummaryrefslogtreecommitdiff
path: root/src/backends/BackendRegistry.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/BackendRegistry.hpp')
-rw-r--r--src/backends/BackendRegistry.hpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/backends/BackendRegistry.hpp b/src/backends/BackendRegistry.hpp
new file mode 100644
index 0000000000..ff01d21715
--- /dev/null
+++ b/src/backends/BackendRegistry.hpp
@@ -0,0 +1,52 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/Types.hpp>
+#include <string>
+#include <functional>
+#include <memory>
+#include <unordered_map>
+
+namespace armnn
+{
+
+class IBackend;
+
+class BackendRegistry
+{
+public:
+ using FactoryFunction = std::function<IBackendUniquePtr()>;
+
+ static BackendRegistry& Instance();
+ void Register(const std::string& name, FactoryFunction factory);
+ FactoryFunction GetFactory(const std::string& name) const;
+
+ struct Helper
+ {
+ Helper(const std::string& name, FactoryFunction factory)
+ {
+ BackendRegistry::Instance().Register(name, factory);
+ }
+ };
+
+ size_t Size() const { return m_BackendFactories.size(); }
+
+protected:
+ using FactoryStorage = std::unordered_map<std::string, FactoryFunction>;
+
+ // For testing only
+ static void Swap(FactoryStorage& other);
+ BackendRegistry() {}
+ ~BackendRegistry() {}
+
+private:
+ BackendRegistry(const BackendRegistry&) = delete;
+ BackendRegistry& operator=(const BackendRegistry&) = delete;
+
+ FactoryStorage m_BackendFactories;
+};
+
+} // namespace armnn