diff options
Diffstat (limited to 'Lib/java/std_auto_ptr.i')
-rw-r--r-- | Lib/java/std_auto_ptr.i | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/Lib/java/std_auto_ptr.i b/Lib/java/std_auto_ptr.i index 9b3cd7315..aee9b4828 100644 --- a/Lib/java/std_auto_ptr.i +++ b/Lib/java/std_auto_ptr.i @@ -1,27 +1,41 @@ -/* - The typemaps here allow to handle functions returning std::auto_ptr<>, - which is the most common use of this type. If you have functions taking it - as parameter, these typemaps can't be used for them and you need to do - something else (e.g. use shared_ptr<> which SWIG supports fully). - */ +/* ----------------------------------------------------------------------------- + * std_auto_ptr.i + * + * SWIG library file for handling std::auto_ptr. + * Memory ownership is passed from the std::auto_ptr C++ layer to the proxy + * class when returning a std::auto_ptr from a function. + * Memory ownership is passed from the proxy class to the std::auto_ptr in the + * C++ layer when passed as a parameter to a wrapped function. + * ----------------------------------------------------------------------------- */ %define %auto_ptr(TYPE) -%typemap (jni) std::auto_ptr<TYPE > "jlong" -%typemap (jtype) std::auto_ptr<TYPE > "long" -%typemap (jstype) std::auto_ptr<TYPE > "$typemap(jstype, TYPE)" - -%typemap (out) std::auto_ptr<TYPE > %{ - jlong lpp = 0; - *(TYPE**) &lpp = $1.release(); - $result = lpp; + +%typemap (jni) std::auto_ptr< TYPE > "jlong" +%typemap (jtype) std::auto_ptr< TYPE > "long" +%typemap (jstype) std::auto_ptr< TYPE > "$typemap(jstype, TYPE)" + +%typemap(in) std::auto_ptr< TYPE > (TYPE *auto_temp) +%{ auto_temp = *(TYPE **)&$input; + $1.reset(auto_temp); %} + +%typemap(javain) std::auto_ptr< TYPE > "$typemap(jstype, TYPE).swigRelease($javainput)" + +%typemap (out) std::auto_ptr< TYPE > %{ + jlong lpp = 0; + *(TYPE **) &lpp = $1.release(); + $result = lpp; %} -%typemap(javaout) std::auto_ptr<TYPE > { - long cPtr = $jnicall; - return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true); - } -%template() std::auto_ptr<TYPE >; + +%typemap(javaout) std::auto_ptr< TYPE > { + long cPtr = $jnicall; + return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true); + } + +%typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER, equivalent="TYPE *") std::auto_ptr< TYPE > "" + +%template() std::auto_ptr< TYPE >; %enddef namespace std { - template <class T> class auto_ptr {}; -} + template <class T> class auto_ptr {}; +} |