diff options
author | Matteo 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 |
commit | c601aa626dac78e1482a258e493a6c186e6bf514 (patch) | |
tree | dac6879d548571527fdd6dee9a7400f331583fdf /include | |
parent | d90530719f6ab16417eb95d885317f50c662725f (diff) | |
download | armnn-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.hpp | 61 |
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 |