46
46
typedef float PLFLT;
50
typedef unsigned int PLUNICODE;
53
/* Simple (input) PLBOOL arguments */
54
/* Use macro style similar to INPUT_TYPEMAP defined in typemaps.i, but
55
* actually follow what is done in java.swg for bool C type except
56
* change action of typemap(in) from "? true : false;" to "? 1 : 0;" to
57
* be consistent with actual C type of PLBOOL which is PLINT. If C type
58
* of PLBOOL ever changed to bool, none of this would be necessary, but
59
* such a change would demand using the c99 standard for PLplot which is
60
* not widely implemented yet.
62
%define PLBOOL_INPUT_TYPEMAP(TYPE, JNITYPE, JTYPE, JNIDESC)
63
%typemap(jni) TYPE "JNITYPE"
64
%typemap(jtype) TYPE "JTYPE"
65
%typemap(jstype) TYPE "JTYPE"
68
%{ $1 = $input ? 1 : 0; %}
70
%typemap(javadirectorin) TYPE "$jniinput"
71
%typemap(javadirectorout) TYPE "$javacall"
73
%typemap(directorin,descriptor=JNIDESC) TYPE
74
%{$input = (JNITYPE *) $1; %}
76
%typemap(javain) TYPE "$javainput"
79
PLBOOL_INPUT_TYPEMAP(PLBOOL, jboolean, boolean, "Z");
81
/* This renamed macro copied exactly from OUTPUT_TYPEMAP macro
82
* in typemaps.i which handles *OUTPUT types. */
84
%define PLBOOL_OUTPUT_TYPEMAP(TYPE, JNITYPE, JTYPE, JAVATYPE, JNIDESC, TYPECHECKTYPE)
85
%typemap(jni) TYPE *OUTPUT, TYPE &OUTPUT %{JNITYPE##Array%}
86
%typemap(jtype) TYPE *OUTPUT, TYPE &OUTPUT "JTYPE[]"
87
%typemap(jstype) TYPE *OUTPUT, TYPE &OUTPUT "JTYPE[]"
88
%typemap(javain) TYPE *OUTPUT, TYPE &OUTPUT "$javainput"
89
%typemap(javadirectorin) TYPE *OUTPUT, TYPE &OUTPUT "$jniinput"
90
%typemap(javadirectorout) TYPE *OUTPUT, TYPE &OUTPUT "$javacall"
92
%typemap(in) TYPE *OUTPUT($*1_ltype temp), TYPE &OUTPUT($*1_ltype temp)
95
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null");
98
if (JCALL1(GetArrayLength, jenv, $input) == 0) {
99
SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element");
105
%typemap(directorin,descriptor=JNIDESC) TYPE &OUTPUT
106
%{ *(($&1_ltype) $input = &$1; %}
108
%typemap(directorin,descriptor=JNIDESC) TYPE *OUTPUT
110
#error "Need to provide OUT directorin typemap, TYPE array length is unknown"
113
%typemap(freearg) TYPE *OUTPUT, TYPE &OUTPUT ""
115
%typemap(argout) TYPE *OUTPUT, TYPE &OUTPUT
117
JNITYPE jvalue = (JNITYPE)temp$argnum;
118
JCALL4(Set##JAVATYPE##ArrayRegion, jenv, $input, 0, 1, &jvalue);
121
%typemap(typecheck) TYPE *INOUT = TYPECHECKTYPE;
122
%typemap(typecheck) TYPE &INOUT = TYPECHECKTYPE;
125
/* Copy what is done for C bool type, only use PLBOOL instead. */
126
PLBOOL_OUTPUT_TYPEMAP(PLBOOL, jboolean, boolean, Boolean, "[Ljava/lang/Boolean;", jbooleanArray);
51
128
/***************************
52
129
A trick for docstrings
206
295
* the java array can be released immediately. */
207
296
(*jenv)->ReleaseIntArrayElements( jenv, $input, jxdata, 0 );
209
%typemap(freearg) (PLINT n, PLINT* Array) {
298
%typemap(freearg) (PLINT n, PLINT *Array) {
212
%typemap(jni) (PLINT n, PLINT* Array) "jintArray"
213
%typemap(jtype) (PLINT n, PLINT* Array) "int[]"
214
%typemap(jstype) (PLINT n, PLINT* Array) "int[]"
215
%typemap(javain) (PLINT n, PLINT* Array) "$javainput"
216
%typemap(javaout) (PLINT n, PLINT* Array) {
220
/* check consistency with previous */
221
%typemap(in) PLINT* ArrayCk {
222
jint *jydata = (*jenv)->GetIntArrayElements( jenv, $input, 0 );
223
if((*jenv)->GetArrayLength( jenv, $input ) != Alen) {
224
printf("Vectors must be same length.\n");
227
setup_array_1d_i( &$1, jydata, Alen);
228
(*jenv)->ReleaseIntArrayElements( jenv, $input, jydata, 0 );
230
%typemap(freearg) PLINT* ArrayCk {
233
%typemap(jni) PLINT* ArrayCk "jintArray"
234
%typemap(jtype) PLINT* ArrayCk "int[]"
235
%typemap(jstype) PLINT* ArrayCk "int[]"
236
%typemap(javain) PLINT* ArrayCk "$javainput"
237
%typemap(javaout) PLINT* ArrayCk {
301
%typemap(jni) (PLINT n, PLINT *Array) "jintArray"
302
%typemap(jtype) (PLINT n, PLINT *Array) "int[]"
303
%typemap(jstype) (PLINT n, PLINT *Array) "int[]"
304
%typemap(javain) (PLINT n, PLINT *Array) "$javainput"
305
%typemap(javaout) (PLINT n, PLINT *Array) {
309
/* Trailing count and check consistency with previous*/
310
%typemap(in) (PLINT *ArrayCk, PLINT n) {
311
jint *jydata = (*jenv)->GetIntArrayElements( jenv, $input, 0 );
312
if((*jenv)->GetArrayLength( jenv, $input ) != Alen) {
313
printf("Vectors must be same length.\n");
316
$2 = (*jenv)->GetArrayLength( jenv, $input );
317
setup_array_1d_i( &$1, jydata, Alen);
318
(*jenv)->ReleaseIntArrayElements( jenv, $input, jydata, 0 );
320
%typemap(freearg) (PLINT *ArrayCk, PLINT n) {
323
%typemap(jni) (PLINT *ArrayCk, PLINT n) "jintArray"
324
%typemap(jtype) (PLINT *ArrayCk, PLINT n) "int[]"
325
%typemap(jstype) (PLINT *ArrayCk, PLINT n) "int[]"
326
%typemap(javain) (PLINT *ArrayCk, PLINT n) "$javainput"
327
%typemap(javaout) (PLINT *ArrayCk, PLINT n) {
331
/* no count but check consistency with previous */
332
%typemap(in) PLINT *ArrayCk {
333
jint *jydata = (*jenv)->GetIntArrayElements( jenv, $input, 0 );
334
if((*jenv)->GetArrayLength( jenv, $input ) != Alen) {
335
printf("Vectors must be same length.\n");
338
setup_array_1d_i( &$1, jydata, Alen);
339
(*jenv)->ReleaseIntArrayElements( jenv, $input, jydata, 0 );
341
%typemap(freearg) PLINT *ArrayCk {
344
%typemap(jni) PLINT *ArrayCk "jintArray"
345
%typemap(jtype) PLINT *ArrayCk "int[]"
346
%typemap(jstype) PLINT *ArrayCk "int[]"
347
%typemap(javain) PLINT *ArrayCk "$javainput"
348
%typemap(javaout) PLINT *ArrayCk {
241
352
/* Weird case to allow argument to be one shorter than others */
242
%typemap(in) PLINT* ArrayCkMinus1 {
353
/* This case is used both for PLBOOL and PLINT. Define PLBOOL version
354
* first. (AWI thinks this may be necessary because of the above
355
* typedef PLINT PLBOOL;)
357
%typemap(in) PLBOOL *ArrayCkMinus1 {
358
jboolean *jydata = (*jenv)->GetBooleanArrayElements( jenv, $input, 0 );
359
if((*jenv)->GetArrayLength( jenv, $input ) < Alen-1) {
360
printf("Vector must be at least length of others minus 1.\n");
363
setup_array_1d_b( &$1, jydata, Alen);
364
(*jenv)->ReleaseBooleanArrayElements( jenv, $input, jydata, 0 );
366
%typemap(freearg) PLBOOL *ArrayCkMinus1 {
369
%typemap(jni) PLBOOL *ArrayCkMinus1 "jbooleanArray"
370
%typemap(jtype) PLBOOL *ArrayCkMinus1 "boolean[]"
371
%typemap(jstype) PLBOOL *ArrayCkMinus1 "boolean[]"
372
%typemap(javain) PLBOOL *ArrayCkMinus1 "$javainput"
373
%typemap(javaout) PLBOOL *ArrayCkMinus1 {
377
%typemap(in) PLINT *ArrayCkMinus1 {
243
378
jint *jydata = (*jenv)->GetIntArrayElements( jenv, $input, 0 );
244
379
if((*jenv)->GetArrayLength( jenv, $input ) < Alen-1) {
245
380
printf("Vector must be at least length of others minus 1.\n");
281
%typemap(in) (PLINT *ArrayCk, PLINT n) {
282
jint *jydata = (*jenv)->GetIntArrayElements( jenv, $input, 0 );
283
if((*jenv)->GetArrayLength( jenv, $input ) != Alen) {
284
printf("Vectors must be same length.\n");
287
setup_array_1d_i( &$1, jydata, Alen);
288
(*jenv)->ReleaseIntArrayElements( jenv, $input, jydata, 0 );
290
%typemap(freearg) (PLINT *ArrayCk, PLINT n) {
293
%typemap(jni) (PLINT *ArrayCk, PLINT n) "jintArray"
294
%typemap(jtype) (PLINT *ArrayCk, PLINT n) "int[]"
295
%typemap(jstype) (PLINT *ArrayCk, PLINT n) "int[]"
296
%typemap(javain) (PLINT *ArrayCk, PLINT n) "$javainput"
297
%typemap(javaout) (PLINT *ArrayCk, PLINT n) {
301
415
/******************************************************************************
303
417
******************************************************************************/
340
454
* the java array can be released immediately. */
341
455
(*jenv)->ReleasePLFLTArrayElements( jenv, $input, jxdata, 0 );
343
%typemap(freearg) (PLINT n, PLFLT* Array) {
457
%typemap(freearg) (PLINT n, PLFLT *Array) {
346
%typemap(jni) (PLINT n, PLFLT* Array) jPLFLTArray
347
%typemap(jtype) (PLINT n, PLFLT* Array) jPLFLTbracket
348
%typemap(jstype) (PLINT n, PLFLT* Array) jPLFLTbracket
349
%typemap(javain) (PLINT n, PLFLT* Array) "$javainput"
350
%typemap(javaout) (PLINT n, PLFLT* Array) {
354
/* check consistency with previous */
355
%typemap(in) PLFLT* ArrayCk {
356
jPLFLT *jydata = (*jenv)->GetPLFLTArrayElements( jenv, $input, 0 );
357
if((*jenv)->GetArrayLength( jenv, $input ) != Alen) {
358
printf("Vectors must be same length.\n");
361
setup_array_1d_PLFLT( &$1, jydata, Alen );
362
(*jenv)->ReleasePLFLTArrayElements( jenv, $input, jydata, 0 );
364
%typemap(freearg) PLFLT* ArrayCk {
367
%typemap(jni) PLFLT* ArrayCk jPLFLTArray
368
%typemap(jtype) PLFLT* ArrayCk jPLFLTbracket
369
%typemap(jstype) PLFLT* ArrayCk jPLFLTbracket
370
%typemap(javain) PLFLT* ArrayCk "$javainput"
371
%typemap(javaout) PLFLT* ArrayCk{
460
%typemap(jni) (PLINT n, PLFLT *Array) jPLFLTArray
461
%typemap(jtype) (PLINT n, PLFLT *Array) jPLFLTbracket
462
%typemap(jstype) (PLINT n, PLFLT *Array) jPLFLTbracket
463
%typemap(javain) (PLINT n, PLFLT *Array) "$javainput"
464
%typemap(javaout) (PLINT n, PLFLT *Array) {
468
/* trailing count, and check consistency with previous */
469
%typemap(in) (PLFLT *ArrayCk, PLINT n) {
470
jPLFLT *jydata = (*jenv)->GetPLFLTArrayElements( jenv, $input, 0 );
471
$2 = (*jenv)->GetArrayLength( jenv, $input );
472
if((*jenv)->GetArrayLength( jenv, $input ) != Alen) {
473
printf("Vectors must be same length.\n");
476
setup_array_1d_PLFLT( &$1, jydata, Alen );
477
(*jenv)->ReleasePLFLTArrayElements( jenv, $input, jydata, 0 );
479
%typemap(freearg) (PLFLT *ArrayCk, PLINT n) {
482
%typemap(jni) (PLFLT *ArrayCk, PLINT n) jPLFLTArray
483
%typemap(jtype) (PLFLT *ArrayCk, PLINT n) jPLFLTbracket
484
%typemap(jstype) (PLFLT *ArrayCk, PLINT n) jPLFLTbracket
485
%typemap(javain) (PLFLT *ArrayCk, PLINT n) "$javainput"
486
%typemap(javaout) (PLFLT *ArrayCk, PLINT n){
490
/* no count, but check consistency with previous */
491
%typemap(in) PLFLT *ArrayCk {
492
jPLFLT *jydata = (*jenv)->GetPLFLTArrayElements( jenv, $input, 0 );
493
if((*jenv)->GetArrayLength( jenv, $input ) != Alen) {
494
printf("Vectors must be same length.\n");
497
setup_array_1d_PLFLT( &$1, jydata, Alen );
498
(*jenv)->ReleasePLFLTArrayElements( jenv, $input, jydata, 0 );
500
%typemap(freearg) PLFLT *ArrayCk {
503
%typemap(jni) PLFLT *ArrayCk jPLFLTArray
504
%typemap(jtype) PLFLT *ArrayCk jPLFLTbracket
505
%typemap(jstype) PLFLT *ArrayCk jPLFLTbracket
506
%typemap(javain) PLFLT *ArrayCk "$javainput"
507
%typemap(javaout) PLFLT *ArrayCk{
454
590
setup_array_1d_PLFLT( &$1, jxdata, Xlen );
455
591
(*jenv)->ReleasePLFLTArrayElements( jenv, $input, jxdata, 0 );
457
%typemap(freearg) PLFLT* ArrayCkX {
593
%typemap(freearg) PLFLT *ArrayCkX {
460
%typemap(jni) PLFLT* ArrayCkX jPLFLTArray
461
%typemap(jtype) PLFLT* ArrayCkX jPLFLTbracket
462
%typemap(jstype) PLFLT* ArrayCkX jPLFLTbracket
463
%typemap(javain) PLFLT* ArrayCkX "$javainput"
464
%typemap(javaout) PLFLT* ArrayCkX{
596
%typemap(jni) PLFLT *ArrayCkX jPLFLTArray
597
%typemap(jtype) PLFLT *ArrayCkX jPLFLTbracket
598
%typemap(jstype) PLFLT *ArrayCkX jPLFLTbracket
599
%typemap(javain) PLFLT *ArrayCkX "$javainput"
600
%typemap(javaout) PLFLT *ArrayCkX{
468
604
/* check consistency with Y dimension of previous */
469
%typemap(in) PLFLT* ArrayCkY {
605
%typemap(in) PLFLT *ArrayCkY {
470
606
jPLFLT *jydata = (*jenv)->GetPLFLTArrayElements( jenv, $input, 0 );
471
607
if((*jenv)->GetArrayLength( jenv, $input ) != Ylen) {
472
608
printf("Vectors must be same length.\n");
872
1008
/* Get the String from the StringBuffer */
873
1009
jmethodID setLengthID;
874
1010
jclass sbufClass = (*jenv)->GetObjectClass(jenv, $input);
875
jmethodID toStringID = (*jenv)->GetMethodID(jenv, sbufClass, "toString", "()Ljava/lang/String;");
876
jstring js = (jstring) (*jenv)->CallObjectMethod(jenv, $input, toStringID);
878
/* Convert the String to a C string */
879
const char *pCharStr = (*jenv)->GetStringUTFChars(jenv, js, 0);
881
1011
/* Take a copy of the C string as the typemap is for a non const C string */
882
1012
jmethodID capacityID = (*jenv)->GetMethodID(jenv, sbufClass, "capacity", "()I");
883
1013
jint capacity = (*jenv)->CallIntMethod(jenv, $input, capacityID);
884
1014
$1 = (char *) malloc(capacity+1);
885
strcpy($1, pCharStr);
887
/* Release the UTF string we obtained with GetStringUTFChars */
888
(*jenv)->ReleaseStringUTFChars(jenv, js, pCharStr);
890
1016
/* Zero the original StringBuffer, so we can replace it with the result */
891
1017
setLengthID = (*jenv)->GetMethodID(jenv, sbufClass, "setLength", "(I)V");
918
1044
/* Character arrays: */
920
%typemap(jni) (PLINT *p_argc, char **argv) "jobjectArray"
921
%typemap(jtype) (PLINT *p_argc, char **argv) "String[]"
922
%typemap(jstype) (PLINT *p_argc, char **argv) "String[]"
923
%typemap(javain) (PLINT *p_argc, char **argv) "$javainput"
924
%typemap(javaout) (PLINT *p_argc, char **argv) {
1046
%typemap(jni) (int *p_argc, char **argv) "jobjectArray"
1047
%typemap(jtype) (int *p_argc, char **argv) "String[]"
1048
%typemap(jstype) (int *p_argc, char **argv) "String[]"
1049
%typemap(javain) (int *p_argc, char **argv) "$javainput"
1050
%typemap(javaout) (int *p_argc, char **argv) {
925
1051
return $jnicall;
927
%typemap(in) (PLINT *p_argc, char **argv) (jint size) {
1053
%typemap(in) (int *p_argc, char **argv) (jint size) {
929
1055
size = (*jenv)->GetArrayLength(jenv, $input);