mirror of https://github.com/swig/swig
43 lines
1.5 KiB
Java
43 lines
1.5 KiB
Java
import director_ownership.*;
|
|
|
|
public class director_ownership_runme {
|
|
|
|
static {
|
|
try {
|
|
System.loadLibrary("director_ownership");
|
|
} catch (UnsatisfiedLinkError e) {
|
|
System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
|
|
System.exit(1);
|
|
}
|
|
}
|
|
|
|
public static void set_content_and_release(Container container, ContentBase content) {
|
|
content.swigReleaseOwnership();
|
|
container.set_content(content);
|
|
}
|
|
|
|
public static void main(String argv[]) {
|
|
|
|
Container container = new Container();
|
|
|
|
// make a content in java (cMemoryOwn true)
|
|
ContentBase content_java = new ContentDerived();
|
|
|
|
// make a content in c++ (cMemoryOwn true)
|
|
ContentBase content_cpp = director_ownership.make_content();
|
|
|
|
set_content_and_release(container, content_java);
|
|
if (!container.get_content().get_name().equals("ContentDerived"))
|
|
throw new RuntimeException("did not get ContentDerived");
|
|
|
|
// when swigReleaseOwnership() is called on content_cpp, swig tries a static_cast to director and calls the method
|
|
// director->swig_java_change_ownership. The content created in c++ native library is not a director, therefore a
|
|
// segfault may occur.
|
|
// With a check done using dynamic_cast this issue could be avoided.
|
|
set_content_and_release(container, content_cpp);
|
|
if (!container.get_content().get_name().equals("ContentDerived"))
|
|
throw new RuntimeException("did not get ContentDerived");
|
|
}
|
|
}
|
|
|