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:
William S Fulton 2012-08-13 21:41:08 +00:00
commit 009c191430
6 changed files with 108 additions and 7 deletions

View file

@ -161,6 +161,7 @@ CPP_TEST_CASES += \
destructor_reprotected \
director_abstract \
director_alternating \
director_assumeoverride \
director_basic \
director_binary_string \
director_classes \

View file

@ -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()" );
}
}
}

View 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);