From 325653641b7bea05eaa6785a4f7d6c596cec633e Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Tue, 26 Sep 2017 14:33:49 +0200 Subject: [PATCH] feat(c-wrapper): add an optional parameter CPP_TYPE on L_GET_PRIVATE_FROM_C_OBJECT --- src/c-wrapper/api/c-chat-room.cpp | 2 +- src/c-wrapper/internal/c-tools.h | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/c-wrapper/api/c-chat-room.cpp b/src/c-wrapper/api/c-chat-room.cpp index 6da8b0c6e..652ccb466 100644 --- a/src/c-wrapper/api/c-chat-room.cpp +++ b/src/c-wrapper/api/c-chat-room.cpp @@ -159,7 +159,7 @@ LinphoneCall *linphone_chat_room_get_call (const LinphoneChatRoom *cr) { void linphone_chat_room_set_call (LinphoneChatRoom *cr, LinphoneCall *call) { if (linphone_core_realtime_text_enabled(linphone_chat_room_get_core(cr))) - static_cast(L_GET_PRIVATE_FROM_C_OBJECT(cr))->setCall(call); + L_GET_PRIVATE_FROM_C_OBJECT(cr, RealTimeTextChatRoom)->setCall(call); } bctbx_list_t *linphone_chat_room_get_transient_messages (const LinphoneChatRoom *cr) { diff --git a/src/c-wrapper/internal/c-tools.h b/src/c-wrapper/internal/c-tools.h index bbaed56d7..3316a93fc 100644 --- a/src/c-wrapper/internal/c-tools.h +++ b/src/c-wrapper/internal/c-tools.h @@ -430,9 +430,12 @@ LINPHONE_END_NAMESPACE // Get/set the cpp-ptr of a wrapped C object. #define L_GET_CPP_PTR_FROM_C_OBJECT_1_ARGS(C_OBJECT) \ - L_GET_CPP_PTR_FROM_C_OBJECT_2_ARGS(C_OBJECT, ) + LINPHONE_NAMESPACE::Wrapper::getCppPtrFromC(C_OBJECT) #define L_GET_CPP_PTR_FROM_C_OBJECT_2_ARGS(C_OBJECT, CPP_TYPE) \ - LINPHONE_NAMESPACE::Wrapper::getCppPtrFromC(C_OBJECT) + LINPHONE_NAMESPACE::Wrapper::getCppPtrFromC< \ + std::remove_pointer::type, \ + LINPHONE_NAMESPACE::CPP_TYPE \ + >(C_OBJECT) #define L_GET_CPP_PTR_FROM_C_OBJECT_MACRO_CHOOSER(...) \ L_GET_ARG_3(__VA_ARGS__, L_GET_CPP_PTR_FROM_C_OBJECT_2_ARGS, L_GET_CPP_PTR_FROM_C_OBJECT_1_ARGS) @@ -449,8 +452,16 @@ LINPHONE_END_NAMESPACE LINPHONE_NAMESPACE::Wrapper::getPrivate(LINPHONE_NAMESPACE::Utils::getPtr(CPP_OBJECT)) // Get the private data of a shared or simple cpp-ptr of a wrapped C object. -#define L_GET_PRIVATE_FROM_C_OBJECT(C_OBJECT) \ +#define L_GET_PRIVATE_FROM_C_OBJECT_1_ARGS(C_OBJECT) \ L_GET_PRIVATE(LINPHONE_NAMESPACE::Utils::getPtr(L_GET_CPP_PTR_FROM_C_OBJECT(C_OBJECT))) +#define L_GET_PRIVATE_FROM_C_OBJECT_2_ARGS(C_OBJECT, CPP_TYPE) \ + L_GET_PRIVATE(LINPHONE_NAMESPACE::Utils::getPtr(L_GET_CPP_PTR_FROM_C_OBJECT(C_OBJECT, CPP_TYPE))) + +#define L_GET_PRIVATE_FROM_C_OBJECT_MACRO_CHOOSER(...) \ + L_GET_ARG_3(__VA_ARGS__, L_GET_PRIVATE_FROM_C_OBJECT_2_ARGS, L_GET_PRIVATE_FROM_C_OBJECT_1_ARGS) + +#define L_GET_PRIVATE_FROM_C_OBJECT(...) \ + L_GET_PRIVATE_FROM_C_OBJECT_MACRO_CHOOSER(__VA_ARGS__)(__VA_ARGS__) // Get the wrapped C object of a C++ object. #define L_GET_C_BACK_PTR(CPP_OBJECT) \