blob: 2b2ab55fb134c993e4eb3e1897f909c239578919 [file] [log] [blame]
//
// 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;
}