Add Java support for std::unique<T> for input parameters.

This works by transferring ownership of the underlying C++ memory
from the target language proxy class to an instance of the unique_ptr
which is passed to the wrapped function via std::move.

The proxy class has a new swigRelease() method which sets the
underlying C++ pointer for the proxy class to null, so working
in much the same way as std::unique_ptr::release(). Any attempt at
using the proxy class will be the same as if the delete() function
has been called on the proxy class. That is, using a C++ null pointer,
when a non-null pointer is usually expected.

This commit relies on the previous commit that uses std::move
on the temporary variable used for the wrapped function's input parameter
as std::unique_ptr is not copyable, it has move-only semantics.
This commit is contained in:
William S Fulton 2022-07-08 18:04:20 +01:00
commit 6b361bf050
5 changed files with 94 additions and 1 deletions

View file

@ -192,6 +192,21 @@ try {
}
}
%}
%typemap(javarelease) SWIGTYPE %{
protected static long swigRelease($javaclassname obj) {
long ptr = 0;
if (obj != null) {
ptr = obj.swigCPtr;
obj.swigCMemOwn = false;
try {
obj.delete();
} catch (MyException e) {
throw new RuntimeException(e);
}
}
return ptr;
}
%}
%inline %{
struct NoExceptTest {