From d410536b2d9a57f4c9332be8cfcdc90d2ef5bc19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Tue, 28 Mar 2017 16:41:52 +0200 Subject: [PATCH] =?UTF-8?q?C++=20wrapper:=C2=A0public=20structure=20suppor?= =?UTF-8?q?t=20improvement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wrappers/cpp/abstractapi.py | 1 + wrappers/cpp/genwrapper.py | 8 +++++++- wrappers/cpp/tools.hh | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/wrappers/cpp/abstractapi.py b/wrappers/cpp/abstractapi.py index c5fcc8066..01489ba41 100644 --- a/wrappers/cpp/abstractapi.py +++ b/wrappers/cpp/abstractapi.py @@ -726,6 +726,7 @@ class CParser(object): elif cType.ctype in self.classesIndex or cType.ctype in self.interfacesIndex: absType = ClassType(cType.ctype) absType.isconst = cType.completeType.startswith('const ') + absType.isref = cType.completeType.endswith('*') elif cType.ctype == self.cListType: absType = ListType(cType.containedType) else: diff --git a/wrappers/cpp/genwrapper.py b/wrappers/cpp/genwrapper.py index 8948432e8..d8e5d5fde 100755 --- a/wrappers/cpp/genwrapper.py +++ b/wrappers/cpp/genwrapper.py @@ -334,7 +334,13 @@ class CppTranslator(object): else: return 'Object::cPtrToSharedPtr<{0}>({1})'.format(cppReturnType, cExpr) else: - return '{0}({1})'.format(exprtype.desc.name.to_camel_case(), cExpr); + if exprtype.isref: + return '{0}({1})'.format(exprtype.desc.name.to_camel_case(), cExpr) + else: + return '{0}(StructWrapper<::{1}>({2}).ptr())'.format( + exprtype.desc.name.to_camel_case(), + exprtype.desc.name.to_c(), + cExpr) elif type(exprtype) is AbsApi.ListType: if type(exprtype.containedTypeDesc) is AbsApi.BaseType and exprtype.containedTypeDesc.name == 'string': return 'StringBctbxListWrapper::bctbxListToCppList({0})'.format(cExpr) diff --git a/wrappers/cpp/tools.hh b/wrappers/cpp/tools.hh index 5d2fae0da..4ef512992 100644 --- a/wrappers/cpp/tools.hh +++ b/wrappers/cpp/tools.hh @@ -119,6 +119,20 @@ namespace linphone { static std::list cStringArrayToCppList(const char **cArray); }; + template + class StructWrapper { + public: + StructWrapper(const T &s) { + mStruct = s; + } + const void *ptr() const { + return &mStruct; + } + + private: + T mStruct; + }; + }; #endif // _TOOLS_HH