From b3d195f0188758a14875a5a2f270e4fd190a679f Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 17 Apr 2018 00:15:38 +0200 Subject: sync with upstream --- .../kodi-addon-dev-kit/include/kodi/AddonBase.h | 39 ++++++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h') diff --git a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h index 432a1c3..7abd8e1 100644 --- a/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h +++ b/xbmc/addons/kodi-addon-dev-kit/include/kodi/AddonBase.h @@ -40,13 +40,9 @@ #undef PRAGMA_PACK_END #if defined(__GNUC__) - #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) - #define ATTRIBUTE_PACKED __attribute__ ((packed)) - #define PRAGMA_PACK 0 - #if __GNUC__ >= 4 - #define ATTRIBUTE_HIDDEN __attribute__ ((visibility ("hidden"))) - #endif - #endif + #define ATTRIBUTE_PACKED __attribute__ ((packed)) + #define PRAGMA_PACK 0 + #define ATTRIBUTE_HIDDEN __attribute__ ((visibility ("hidden"))) #endif #if !defined(ATTRIBUTE_PACKED) @@ -180,6 +176,8 @@ typedef struct AddonToKodiFuncTable_Addon AddonToKodiFuncTable_kodi_filesystem* kodi_filesystem; AddonToKodiFuncTable_kodi_gui* kodi_gui; AddonToKodiFuncTable_kodi_network *kodi_network; + + void* (*get_interface)(void* kodiBase, const char *name, const char *version); } AddonToKodiFuncTable_Addon; /* @@ -605,6 +603,33 @@ inline std::string TranslateAddonStatus(ADDON_STATUS status) } /* namespace kodi */ //---------------------------------------------------------------------------- +//============================================================================== +namespace kodi { +/// +/// \ingroup cpp_kodi +/// @brief Returns a function table to a named interface +/// +/// @return pointer to struct containing interface functions +/// +/// +/// ------------------------------------------------------------------------ +/// +/// **Example:** +/// ~~~~~~~~~~~~~{.cpp} +/// #include +/// #include +/// ... +/// FuncTable_foo *table = kodi::GetPlatformInfo(foo_name, foo_version); +/// ... +/// ~~~~~~~~~~~~~ +/// +inline void* GetInterface(const std::string &name, const std::string &version) +{ + AddonToKodiFuncTable_Addon* toKodi = ::kodi::addon::CAddonBase::m_interface->toKodi; + + return toKodi->get_interface(toKodi->kodiBase, name.c_str(), version.c_str()); +} +} /* namespace kodi */ /*! addon creation macro * @todo cleanup this stupid big macro -- cgit v1.2.3