diff options
author | robot-piglet <[email protected]> | 2025-08-28 14:27:58 +0300 |
---|---|---|
committer | robot-piglet <[email protected]> | 2025-08-28 14:57:06 +0300 |
commit | 81d828c32c8d5477cb2f0ce5da06a1a8d9392ca3 (patch) | |
tree | 3081d566f0d5158d76e9093261344f6406fd09f7 /contrib/tools/swig/Lib/java/std_unique_ptr.i | |
parent | 77ea11423f959e51795cc3ef36a48d808b4ffb98 (diff) |
Intermediate changes
commit_hash:d5b1af16dbe9030537a04c27eb410c88c2f496cd
Diffstat (limited to 'contrib/tools/swig/Lib/java/std_unique_ptr.i')
-rw-r--r-- | contrib/tools/swig/Lib/java/std_unique_ptr.i | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/contrib/tools/swig/Lib/java/std_unique_ptr.i b/contrib/tools/swig/Lib/java/std_unique_ptr.i new file mode 100644 index 00000000000..ded7b80bbc0 --- /dev/null +++ b/contrib/tools/swig/Lib/java/std_unique_ptr.i @@ -0,0 +1,63 @@ +/* ----------------------------------------------------------------------------- + * std_unique_ptr.i + * + * SWIG library file for handling std::unique_ptr. + * + * Returning a std::unique_ptr from a wrapped function: + * Memory ownership is passed (moved) from the std::unique_ptr in the C++ layer + * to the proxy class when returning a std::unique_ptr by value from a function. + * Memory ownership is not moved when returning by any sort of reference. + * + * Passing a std::unique_ptr as a parameter to a wrapped function: + * Memory ownership is passed from the proxy class to the std::unique_ptr in the + * C++ layer when passed as a parameter by value, rvalue reference or non-const + * lvalue reference. Memory ownership is not transferred when passing by const + * lvalue reference. + * ----------------------------------------------------------------------------- */ + +%include <unique_ptr.swg> + +%define %unique_ptr(TYPE) + +%typemap (jni) std::unique_ptr< TYPE >, std::unique_ptr< TYPE > &, std::unique_ptr< TYPE > && "jlong" +%typemap (jtype) std::unique_ptr< TYPE >, std::unique_ptr< TYPE > &, std::unique_ptr< TYPE > && "long" +%typemap (jstype) std::unique_ptr< TYPE >, std::unique_ptr< TYPE > &, std::unique_ptr< TYPE > && "$typemap(jstype, TYPE)" + +%typemap(in) std::unique_ptr< TYPE > (TYPE *unique_temp) +%{ unique_temp = *(TYPE **)&$input; + $1.reset(unique_temp); %} +%typemap(in) std::unique_ptr< TYPE > &, std::unique_ptr< TYPE > && +%{ $*1_ltype $1_uptr((TYPE *)$input); + $1 = &$1_uptr; %} +%typemap(in, fragment="SwigNoDeleteUniquePtr") const std::unique_ptr< TYPE > & +%{ swig::NoDeleteUniquePtr< TYPE > $1_ndup((TYPE *)$input); +$1 = &$1_ndup.uptr; %} + +%typemap(javain) std::unique_ptr< TYPE >, std::unique_ptr< TYPE > &, std::unique_ptr< TYPE > && "$typemap(jstype, TYPE).swigRelease($javainput)" +%typemap(javain) const std::unique_ptr< TYPE > & "$typemap(jstype, TYPE).getCPtr($javainput)" + +%typemap (out) std::unique_ptr< TYPE > %{ + jlong lpp = 0; + *(TYPE **) &lpp = $1.release(); + $result = lpp; +%} +%typemap (out) std::unique_ptr< TYPE > &, std::unique_ptr< TYPE > && %{ + jlong lpp = 0; + *(TYPE **) &lpp = $1->get(); + $result = lpp; +%} + + +%typemap(javaout) std::unique_ptr< TYPE > { + long cPtr = $jnicall; + return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, true); + } +%typemap(javaout) std::unique_ptr< TYPE > &, std::unique_ptr< TYPE > && { + long cPtr = $jnicall; + return (cPtr == 0) ? null : new $typemap(jstype, TYPE)(cPtr, false); + } + +%typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER, equivalent="TYPE *") std::unique_ptr< TYPE >, std::unique_ptr< TYPE > &, std::unique_ptr< TYPE > && "" + +%template() std::unique_ptr< TYPE >; +%enddef |