From 8cd99594c7837e5aec2b3d21a15654dd555269da Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Thu, 14 Sep 2017 16:43:29 +0200 Subject: [PATCH] Add macros to handle user data in c-tools. --- src/c-wrapper/api/c-chat-room.cpp | 9 +++----- src/c-wrapper/c-tools.h | 36 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/c-wrapper/api/c-chat-room.cpp b/src/c-wrapper/api/c-chat-room.cpp index f48c6b473..5540611ce 100644 --- a/src/c-wrapper/api/c-chat-room.cpp +++ b/src/c-wrapper/api/c-chat-room.cpp @@ -201,15 +201,12 @@ void linphone_chat_room_unref(LinphoneChatRoom *cr) { belle_sip_object_unref(cr); } -void *linphone_chat_room_get_user_data(const LinphoneChatRoom *cr) { - // TODO - return nullptr; - //return cr->userData; +void * linphone_chat_room_get_user_data(const LinphoneChatRoom *cr) { + return L_GET_USER_DATA_FROM_C_STRUCT(cr, ChatRoom, ChatRoom); } void linphone_chat_room_set_user_data(LinphoneChatRoom *cr, void *ud) { - // TODO - //cr->userData = ud; + L_SET_USER_DATA_FROM_C_STRUCT(cr, ud, ChatRoom, ChatRoom); } diff --git a/src/c-wrapper/c-tools.h b/src/c-wrapper/c-tools.h index dc70e57d3..df312fc34 100644 --- a/src/c-wrapper/c-tools.h +++ b/src/c-wrapper/c-tools.h @@ -160,6 +160,32 @@ public: // --------------------------------------------------------------------------- + template + static void * getUserData (const std::shared_ptr &cppPtr) { + Variant v = cppPtr->getProperty("LinphonePrivate::Wrapper::userData"); + return v.getValue(); + } + + template + static void * getUserData (T *cppPtr) { + Variant v = cppPtr->getProperty("LinphonePrivate::Wrapper::userData"); + return v.getValue(); + } + + template + static inline void setUserData (std::shared_ptr object, void *value) { + L_ASSERT(object); + object->setProperty("LinphonePrivate::Wrapper::userData", value); + } + + template + static inline void setUserData (T *object, void *value) { + L_ASSERT(object); + object->setProperty("LinphonePrivate::Wrapper::userData", value); + } + + // --------------------------------------------------------------------------- + template static inline bctbx_list_t * getCListFromCppList (std::list cppList) { bctbx_list_t *result = nullptr; @@ -295,6 +321,16 @@ LINPHONE_END_NAMESPACE #define L_GET_C_BACK_PTR(OBJECT, C_TYPE, C_NAME) \ LINPHONE_NAMESPACE::Wrapper::getCBackPtr(OBJECT, _linphone_ ## C_NAME ## _init) +#define L_GET_USER_DATA_FROM_C_STRUCT(OBJECT, CPP_TYPE, C_TYPE) \ + LINPHONE_NAMESPACE::Wrapper::getUserData( \ + L_GET_CPP_PTR_FROM_C_STRUCT(OBJECT, CPP_TYPE, C_TYPE) \ + ) +#define L_SET_USER_DATA_FROM_C_STRUCT(OBJECT, VALUE, CPP_TYPE, C_TYPE) \ + LINPHONE_NAMESPACE::Wrapper::setUserData( \ + L_GET_CPP_PTR_FROM_C_STRUCT(OBJECT, CPP_TYPE, C_TYPE), \ + VALUE \ + ) + #define L_GET_C_LIST_FROM_CPP_LIST(LIST, TYPE) \ LINPHONE_NAMESPACE::Wrapper::getCListFromCppList(LIST) #define L_GET_CPP_LIST_FROM_C_LIST(LIST, TYPE) \