Fix shared_ptr typemaps for use with %pythonnondynamic

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10344 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2008-04-04 23:29:59 +00:00
commit 69d6ce4f33
5 changed files with 48 additions and 1 deletions

View file

@ -1,6 +1,10 @@
Version 1.3.35 (in progress)
============================
04/05/2008: wsfulton
[Python] Fix shared_ptr typemaps so that %pythonnondynamic can be used. Also corrects
display of the proxy class type. Reported by Robert Lupton.
04/04/2008: olly
[Python] Add %newobject reference to python memory management subsection of manual
(patch from mdbeachy in SF#1894610).
@ -70,3 +74,7 @@ Version 1.3.35 (in progress)
02/29/2008: wsfulton
[Python] Add shared_ptr varin/varout typemaps for wrapping global variables.
02/25/2008: wsfulton
Fix $wrapname to work in %exception (fixes some wrap:name assertions)

View file

@ -178,6 +178,7 @@ CPP_TEST_CASES += \
langobj \
li_attribute \
li_boost_shared_ptr \
li_boost_shared_ptr_bits \
li_carrays \
li_cdata \
li_cpointer \

View file

@ -0,0 +1,18 @@
%module li_boost_shared_ptr_bits
%include <boost_shared_ptr.i>
#if defined(SWIGPYTHON)
%pythonnondynamic NonDynamic;
#endif
SWIG_SHARED_PTR(NonDynamic, NonDynamic)
%inline %{
#include <boost/shared_ptr.hpp>
struct NonDynamic {
int i;
};
boost::shared_ptr<NonDynamic> boing(boost::shared_ptr<NonDynamic> b) { return b; }
%}

View file

@ -0,0 +1,20 @@
from li_boost_shared_ptr_bits import *
def check(nd):
nd.i = 200
i = nd.i
try:
nd.notexist = 100
passed = 0
except:
passed = 1
if not passed:
raise "Test failed"
nd = NonDynamic()
check(nd)
b = boing(nd)
check(b)

View file

@ -69,7 +69,7 @@
}
%typemap(out, fragment="SWIG_null_deleter") CONST TYPE * {
SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner) : 0;
%set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), SWIG_POINTER_OWN));
%set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > *), $owner | SWIG_POINTER_OWN));
}
%typemap(varin) CONST TYPE * {