// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include "IBackendInternal.hpp" #include #include #include namespace armnn { class DynamicBackend final { public: using HandleCloser = std::function; using HandlePtr = std::unique_ptr; explicit DynamicBackend(const void* sharedObjectHandle); /// Public dynamic backend functions BackendId GetBackendId(); BackendVersion GetBackendVersion(); IBackendInternalUniquePtr GetBackend(); BackendRegistry::FactoryFunction GetFactoryFunction(); private: /// Private utility functions template BackendFunctionType SetFunctionPointer(const std::string& backendFunctionName); IBackendInternalUniquePtr CreateBackend(); /// Backend function pointer types using IdFunctionType = const char*(*)(); using VersionFunctionType = void(*)(uint32_t*, uint32_t*); using FactoryFunctionType = void*(*)(); /// Backend function pointers IdFunctionType m_BackendIdFunction; VersionFunctionType m_BackendVersionFunction; FactoryFunctionType m_BackendFactoryFunction; /// Shared object handle HandlePtr m_Handle; }; using DynamicBackendPtr = std::unique_ptr; } // namespace armnn