DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

commit e3341cb4225dbd0c8d974b0defa1ab6c5339c7f3
parent dba284c267c74b12338a576c609885553c19552e
Author: falkTX <falktx@falktx.com>
Date:   Sat, 21 May 2022 20:09:02 +0100

Tweak travesty headers as needed by hosts for plugin scanning

Signed-off-by: falkTX <falktx@falktx.com>

Diffstat:
Mdistrho/src/travesty/base.h | 14++++++++++++++
Mdistrho/src/travesty/events.h | 12++++++++++++
Mdistrho/src/travesty/factory.h | 22++++++++++++++++++++++
3 files changed, 48 insertions(+), 0 deletions(-)

diff --git a/distrho/src/travesty/base.h b/distrho/src/travesty/base.h @@ -207,4 +207,18 @@ uint32_t v3_cpp_obj_unref(T** obj) return static_cast<v3_funknown*>(static_cast<void*>(*obj))->unref(obj); } +template<class T> static inline +v3_result v3_cpp_obj_initialize(T** obj, v3_funknown** context) +{ + return static_cast<v3_plugin_base*>( + static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(*obj)) + sizeof(void*)*3))->initialize(obj, context); +} + +template<class T> static inline +v3_result v3_cpp_obj_terminate(T** obj) +{ + return static_cast<v3_plugin_base*>( + static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(*obj)) + sizeof(void*)*3))->terminate(obj); +} + #endif diff --git a/distrho/src/travesty/events.h b/distrho/src/travesty/events.h @@ -143,4 +143,16 @@ struct v3_event_list { static constexpr const v3_tuid v3_event_list_iid = V3_ID(0x3A2C4214, 0x346349FE, 0xB2C4F397, 0xB9695A44); +#ifdef __cplusplus + +/** + * C++ variants + */ + +struct v3_event_list_cpp : v3_funknown { + v3_event_list list; +}; + +#endif + #include "align_pop.h" diff --git a/distrho/src/travesty/factory.h b/distrho/src/travesty/factory.h @@ -122,4 +122,26 @@ struct v3_plugin_factory_cpp : v3_funknown { v3_plugin_factory_3 v3; }; +template<> inline +constexpr v3_plugin_factory_2* v3_cpp_obj(v3_plugin_factory_2** obj) +{ + /** + * this ugly piece of code is required due to C++ assuming `reinterpret_cast` by default, + * but we need everything to be `static_cast` for it to be `constexpr` compatible. + */ + return static_cast<v3_plugin_factory_2*>( + static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(*obj)) + sizeof(void*)*7)); +} + +template<> inline +constexpr v3_plugin_factory_3* v3_cpp_obj(v3_plugin_factory_3** obj) +{ + /** + * this ugly piece of code is required due to C++ assuming `reinterpret_cast` by default, + * but we need everything to be `static_cast` for it to be `constexpr` compatible. + */ + return static_cast<v3_plugin_factory_3*>( + static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(*obj)) + sizeof(void*)*8)); +} + #endif