new directorconnect and directorconnect_derived typemaps

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6840 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2004-12-07 23:04:54 +00:00
commit deaf8c681f
3 changed files with 116 additions and 19 deletions

View file

@ -30,22 +30,28 @@ namespace Swig {
return env;
}
/* Disconnect director from Java object */
void swig_disconnect_director_self(const char *disconn_method) {
if (swig_self) {
JNIEnv *jenv = swig_acquire_jenv();
jmethodID disconn_meth = jenv->GetMethodID(jenv->GetObjectClass(swig_self), disconn_method, "()V");
if (disconn_meth) {
jenv->CallVoidMethod(swig_self, disconn_meth);
} else {
jenv->ExceptionClear();
}
jenv->DeleteGlobalRef(swig_self);
swig_self = (jobject) NULL;
}
}
public:
Director(JNIEnv *jenv) : swig_jvm((JavaVM *) NULL), swig_self(NULL) {
/* Acquire the Java VM pointer */
jenv->GetJavaVM(&swig_jvm);
}
/* Remove the Java object global lock at destruction */
virtual ~Director() {
if (swig_self) {
JNIEnv *jenv = swig_acquire_jenv();
jmethodID disconn_meth = jenv->GetMethodID(jenv->GetObjectClass(swig_self), "swigDirectorDisconnect", "()V");
if (disconn_meth)
jenv->CallVoidMethod(swig_self, disconn_meth);
jenv->DeleteGlobalRef(swig_self);
swig_self = (jobject) NULL;
}
}
/* Set swig_self and get Java global reference on object */

View file

@ -959,6 +959,16 @@
super.delete();
}
%typemap(directordisconnect, methodname="swigDirectorDisconnect") SWIGTYPE {
swigCMemOwn = false;
$jnicall;
}
%typemap(directordisconnect_derived, methodname="swigDirectorDisconnect") SWIGTYPE {
swigCMemOwn = false;
$jnicall;
}
/* Java specific directives */
#define %javaconst(flag) %feature("java:const","flag")
#define %javaconstvalue(value) %feature("java:constvalue",value)