From c04dcc2e7d834218ef2d4194331e383402495ae1 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 20:07:22 +0200 Subject: Adding upstream version 2:20.4+dfsg. Signed-off-by: Daniel Baumann --- xbmc/addons/binary-addons/BinaryAddonManager.h | 95 ++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 xbmc/addons/binary-addons/BinaryAddonManager.h (limited to 'xbmc/addons/binary-addons/BinaryAddonManager.h') diff --git a/xbmc/addons/binary-addons/BinaryAddonManager.h b/xbmc/addons/binary-addons/BinaryAddonManager.h new file mode 100644 index 0000000..d7f4a9f --- /dev/null +++ b/xbmc/addons/binary-addons/BinaryAddonManager.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2005-2018 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#pragma once + +#include "threads/CriticalSection.h" + +#include +#include + +namespace ADDON +{ + + class IAddonInstanceHandler; + + class IAddon; + using AddonPtr = std::shared_ptr; + + class CAddonInfo; + using AddonInfoPtr = std::shared_ptr; + + class CAddonDll; + typedef std::shared_ptr AddonDllPtr; + + class CBinaryAddonBase; + typedef std::shared_ptr BinaryAddonBasePtr; + + class CBinaryAddonManager + { + public: + CBinaryAddonManager() = default; + CBinaryAddonManager(const CBinaryAddonManager&) = delete; + ~CBinaryAddonManager() = default; + + /*! + * @brief Create or get available addon instance handle base. + * + * On first call the binary addon base class becomes created, on every next + * call of addon id, this becomes given again and a counter about in + * @ref CBinaryAddonBase increased. + * + * @param[in] addonBase related addon base to release + * @param[in] handler related instance handle class + * + * @warning This and @ref ReleaseAddonBase are only be called from + * @ref IAddonInstanceHandler, use nowhere else allowed! + * + */ + BinaryAddonBasePtr GetAddonBase(const AddonInfoPtr& addonInfo, + IAddonInstanceHandler* handler, + AddonDllPtr& addon); + + /*! + * @brief Release a running addon instance handle base. + * + * On last release call the here on map stored entry becomes + * removed and the dll unloaded. + * + * @param[in] addonBase related addon base to release + * @param[in] handler related instance handle class + * + */ + void ReleaseAddonBase(const BinaryAddonBasePtr& addonBase, IAddonInstanceHandler* handler); + + /*! + * @brief Get running addon base class for a given addon id. + * + * @param[in] addonId the addon id + * @return running addon base class if found, nullptr otherwise. + * + */ + BinaryAddonBasePtr GetRunningAddonBase(const std::string& addonId) const; + + /*! + * @brief Used from other addon manager to get active addon over a from him + * created CAddonDll. + * + * @param[in] addonId related addon id string + * @return if present the pointer to active one or nullptr if not present + * + */ + AddonPtr GetRunningAddon(const std::string& addonId) const; + + private: + mutable CCriticalSection m_critSection; + + std::map m_runningAddons; + }; + +} /* namespace ADDON */ -- cgit v1.2.3