diff options
author | David Beck <david.beck@arm.com> | 2018-10-09 15:46:08 +0100 |
---|---|---|
committer | Matthew Bentham <matthew.bentham@arm.com> | 2018-10-22 16:57:53 +0100 |
commit | 32cbb0c7cd99786191c080f5a619b3dab23b4cd0 (patch) | |
tree | 0e7db143cdf3faa6430a1ffa5e948165ff60c045 /src/backends/BackendRegistry.hpp | |
parent | 43095f31edf103d71a8e2420b549d21fd349b49e (diff) | |
download | armnn-32cbb0c7cd99786191c080f5a619b3dab23b4cd0.tar.gz |
IVGCVSW-1987 : registry for backend creation functions (factories)
Change-Id: I13d2d3dc763e1d05dffddb34472bd4f9e632c776
Diffstat (limited to 'src/backends/BackendRegistry.hpp')
-rw-r--r-- | src/backends/BackendRegistry.hpp | 52 |
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 |