Add assumeoverride feature option for Java directors to improve performance when it can be assumed that all methods are overridden by the Java derived classes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13606 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
fad95da7f5
commit
009c191430
6 changed files with 108 additions and 7 deletions
|
|
@ -161,6 +161,7 @@ CPP_TEST_CASES += \
|
|||
destructor_reprotected \
|
||||
director_abstract \
|
||||
director_alternating \
|
||||
director_assumeoverride \
|
||||
director_basic \
|
||||
director_binary_string \
|
||||
director_classes \
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
|
||||
import java_director_assumeoverride.*;
|
||||
|
||||
public class java_director_assumeoverride_runme {
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("java_director_assumeoverride");
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
|
||||
static class MyOverrideMe extends OverrideMe {
|
||||
}
|
||||
|
||||
public static void main(String argv[]) {
|
||||
OverrideMe overrideMe = new MyOverrideMe();
|
||||
|
||||
// MyOverrideMe doesn't actually override func(), but because assumeoverride
|
||||
// was set to true, the C++ side will believe it was overridden.
|
||||
if (!java_director_assumeoverride.isFuncOverridden(overrideMe)) {
|
||||
throw new RuntimeException ( "isFuncOverridden()" );
|
||||
}
|
||||
}
|
||||
}
|
||||
30
Examples/test-suite/java_director_assumeoverride.i
Normal file
30
Examples/test-suite/java_director_assumeoverride.i
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
%module(directors="1") java_director_assumeoverride
|
||||
#pragma SWIG nowarn=SWIGWARN_TYPEMAP_THREAD_UNSAFE,SWIGWARN_TYPEMAP_DIRECTOROUT_PTR
|
||||
|
||||
%{
|
||||
class OverrideMe {
|
||||
public:
|
||||
virtual ~OverrideMe() {}
|
||||
virtual void func() {};
|
||||
};
|
||||
|
||||
#include "java_director_assumeoverride_wrap.h"
|
||||
bool isFuncOverridden(OverrideMe* f) {
|
||||
SwigDirector_OverrideMe* director = dynamic_cast<SwigDirector_OverrideMe*>(f);
|
||||
if (!director) {
|
||||
return false;
|
||||
}
|
||||
return director->swig_overrides(0);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%feature("director", assumeoverride=1) OverrideMe;
|
||||
|
||||
class OverrideMe {
|
||||
public:
|
||||
virtual ~OverrideMe();
|
||||
virtual void func();
|
||||
};
|
||||
|
||||
bool isFuncOverridden(OverrideMe* f);
|
||||
Loading…
Add table
Add a link
Reference in a new issue