add extended support for smart pointers
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8708 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
4f4e31460f
commit
336844d502
3 changed files with 60 additions and 1 deletions
|
|
@ -91,6 +91,26 @@
|
|||
%typemap(constcode) SWIGTYPE ((*)(ANY)) "";
|
||||
|
||||
|
||||
/* Smart Pointers */
|
||||
%typemap(out,noblock=1) const SWIGTYPE & SMARTPOINTER {
|
||||
$result = SWIG_NewPointerObj(%new_copy(*$1, $*ltype), $descriptor, SWIG_POINTER_OWN | %newpointer_flags);
|
||||
}
|
||||
|
||||
%typemap(ret,noblock=1) const SWIGTYPE & SMARTPOINTER, SWIGTYPE SMARTPOINTER {
|
||||
if ($result) {
|
||||
PyObject *robj = PyObject_CallMethod($result, "__deref__", NULL);
|
||||
if (robj && !PyErr_Occurred()) {
|
||||
PySwigObject_append((PyObject *) SWIG_Python_GetSwigThis($result),
|
||||
(PyObject *) SWIG_Python_GetSwigThis(robj));
|
||||
Py_DECREF(robj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Use this macro to extend the smart pointer support */
|
||||
%define %extend_smart_pointer(Type...)
|
||||
%implicitconv Type;
|
||||
%apply const SWIGTYPE& SMARTPOINTER { const Type& };
|
||||
%apply SWIGTYPE SMARTPOINTER { Type };
|
||||
%enddef
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue