Somehow the java dir was gone from the repository. Adding it again.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@280 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
77cb823ab6
commit
f03fd12dc1
2 changed files with 136 additions and 0 deletions
9
SWIG/Lib/java/java.swg
Normal file
9
SWIG/Lib/java/java.swg
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
#include <jni.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define JCALL(func, jenv) jenv->func(
|
||||
#else
|
||||
#define JCALL(func, jenv) (*jenv)->func(jenv,
|
||||
#endif
|
||||
|
||||
127
SWIG/Lib/java/typemaps.i
Normal file
127
SWIG/Lib/java/typemaps.i
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
//
|
||||
// SWIG Typemap library
|
||||
// for Java
|
||||
|
||||
%typemap(java,jtype) char *STRING {String}
|
||||
%typemap(java,in) char *STRING {
|
||||
$target = JCALL(GetStringUTFChars, jenv) $source, 0);
|
||||
}
|
||||
|
||||
%typemap(java,argout) char *STRING {
|
||||
JCALL(ReleaseStringUTFChars, jenv) $source, $target);
|
||||
}
|
||||
|
||||
%typemap(java,out) char *STRING {
|
||||
$target = (jarray) JCALL(NewStringUTF, jenv) $source);
|
||||
}
|
||||
|
||||
%typemap(java,jtype) char **STRING_IN {String[]}
|
||||
%typemap(java,jni) char **STRING_IN {jobjectArray}
|
||||
%typemap(java,in) char **STRING_IN {
|
||||
int i;
|
||||
jsize l = JCALL(GetArrayLength, jenv) $source);
|
||||
$target = (char **) malloc((l+1) * sizeof(char *));
|
||||
for(i=0; i<l; i++) {
|
||||
jstring js;
|
||||
char *cs;
|
||||
|
||||
js = (jstring) JCALL(GetObjectArrayElement, jenv) $source, i);
|
||||
cs = (char *) JCALL(GetStringUTFChars, jenv) js, 0);
|
||||
$target[i] = cs;
|
||||
}
|
||||
$target[l] = '\0';
|
||||
}
|
||||
|
||||
%typemap(java,argout) char **STRING_IN {
|
||||
/* should release strings obtained from GetStringUTFChars */
|
||||
free($target);
|
||||
}
|
||||
|
||||
/* result must be a null terminated string */
|
||||
%typemap(java,jtype) char **STRING_OUT {String[]}
|
||||
%typemap(java,jni) char **STRING_OUT {jobjectArray}
|
||||
%typemap(java,in) char **STRING_OUT (char *s) {
|
||||
$target = &s;
|
||||
}
|
||||
%typemap(java,argout) char **STRING_OUT {
|
||||
if($target != NULL)
|
||||
JCALL(SetObjectArrayElement, jenv) $source, 0, JCALL(NewStringUTF, jenv) *$target));
|
||||
}
|
||||
|
||||
/* a NULL terminated array of char* */
|
||||
%typemap(java,jtype) char **STRING_RET {String[]}
|
||||
%typemap(java,jni) char **STRING_RET {jarray}
|
||||
%typemap(java,out) char **STRING_RET {
|
||||
if($source != NULL) {
|
||||
char **p = $source;
|
||||
jsize size = 0;
|
||||
int i = 0;
|
||||
jclass strClass;
|
||||
|
||||
while (*p++) size++; /* determine size */
|
||||
strClass = JCALL(FindClass, jenv) "java/lang/String");
|
||||
$target = JCALL(NewObjectArray, jenv) size, strClass, NULL);
|
||||
p = $source;
|
||||
while (*p) {
|
||||
jstring js = JCALL(NewStringUTF, jenv) *p);
|
||||
JCALL(SetObjectArrayElement, jenv) $target, i++, js);
|
||||
p++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(java,jni) int *INT_OUT {jintArray}
|
||||
%typemap(java,jtype) int *INT_OUT {int[]}
|
||||
%typemap(java,in) int *INT_OUT (int i) {
|
||||
$target = (int *)&i;
|
||||
}
|
||||
|
||||
%typemap(java,argout) int *INT_OUT {
|
||||
jint ji;
|
||||
i = (jint) *$target;
|
||||
JCALL(SetIntArrayRegion, jenv) $source, 0, 1, (jint *) &i);
|
||||
}
|
||||
|
||||
%typemap(java,out) float * FLOAT_ARRAY_RETURN {
|
||||
if($source != NULL) {
|
||||
float *fp = $source;
|
||||
jfloat *jfp;
|
||||
int size = 0;
|
||||
int i;
|
||||
|
||||
/* determine size of array */
|
||||
while(*fp++) size++;
|
||||
|
||||
/* new float array */
|
||||
$target = JCALL(NewFloatArray, jenv) size);
|
||||
|
||||
/* copy elements to float array */
|
||||
jfp = JCALL(GetFloatArrayElements, jenv) $target, 0);
|
||||
for(i=0; i<size; i++ )
|
||||
jfp[i] = (jfloat) $source[i];
|
||||
|
||||
JCALL(ReleaseFloatArrayElements, jenv) $target, jfp, 0);
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(java,jni) char *BYTE {jbyteArray}
|
||||
%typemap(java,jtype) char *BYTE {byte[]}
|
||||
%typemap(java,in) char *BYTE {
|
||||
$target = (char *) JCALL(GetByteArrayElements, jenv) $source, 0);
|
||||
}
|
||||
|
||||
%typemap(java,argout) char *BYTE {
|
||||
JCALL(ReleaseByteArrayElements, jenv) $source, (jbyte *) $target, 0);
|
||||
}
|
||||
|
||||
%typemap(java,ignore) JNIEnv * {
|
||||
$target = jenv;
|
||||
}
|
||||
|
||||
%typemap(java,ignore) jclass jcls {
|
||||
$target = jcls;
|
||||
}
|
||||
|
||||
%typemap(java,ignore) jobject jobj {
|
||||
$target = jobj;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue