From b0f52ade93da11beab4a68c2418c6d9138060269 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Wed, 22 Sep 2004 20:30:06 +0000 Subject: [PATCH] Added and empty freearg typemap so that the signed char* typemaps can be aplied to char*. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@6260 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Lib/java/typemaps.i | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/Lib/java/typemaps.i b/Lib/java/typemaps.i index 348ea0511..407bc2540 100644 --- a/Lib/java/typemaps.i +++ b/Lib/java/typemaps.i @@ -44,18 +44,22 @@ To use these, suppose you had a C function like this : You could wrap it with SWIG as follows : - %include typemaps.i + %include "typemaps.i" double fadd(double *INPUT, double *INPUT); or you can use the %apply directive : - %include typemaps.i + %include "typemaps.i" %apply double *INPUT { double *a, double *b }; double fadd(double *a, double *b); In Java you could then use it like this: double answer = modulename.fadd(10.0, 20.0); +There are no char *INPUT typemaps, however you can apply the signed char * typemaps instead: + %include "typemaps.i" + %apply signed char *INPUT {char *input}; + void f(char *input); */ %define INPUT_TYPEMAP(CTYPE, JNITYPE, JTYPE, JNIDESC) @@ -82,6 +86,8 @@ In Java you could then use it like this: %typemap(directorin,descriptor=JNIDESC) CTYPE *INPUT %{ *(($&1_ltype) $input) = (JNITYPE *) $1; %} +%typemap(freearg) CTYPE *INPUT, CTYPE &INPUT "" + %typemap(typecheck) CTYPE *INPUT = CTYPE; %typemap(typecheck) CTYPE &INPUT = CTYPE; %enddef @@ -172,12 +178,12 @@ returns the integer part in one of its parameters): You could wrap it with SWIG as follows : - %include typemaps.i + %include "typemaps.i" double modf(double x, double *OUTPUT); or you can use the %apply directive : - %include typemaps.i + %include "typemaps.i" %apply double *OUTPUT { double *ip }; double modf(double x, double *ip); @@ -187,6 +193,10 @@ value in the single element array. In Java you would use it like this: double[] intptr = {0}; double fraction = modulename.modf(5,intptr); +There are no char *OUTPUT typemaps, however you can apply the signed char * typemaps instead: + %include "typemaps.i" + %apply signed char *OUTPUT {char *output}; + void f(char *output); */ /* Java BigInteger[] */ @@ -228,6 +238,8 @@ value in the single element array. In Java you would use it like this: #error "Need to provide OUT directorin typemap, CTYPE array length is unknown" %} +%typemap(freearg) CTYPE *OUTPUT, CTYPE &OUTPUT "" + %typemap(argout) CTYPE *OUTPUT, CTYPE &OUTPUT { JNITYPE jvalue = (JNITYPE)temp$argnum; @@ -307,12 +319,12 @@ For example, suppose you were trying to wrap the following function : You could wrap it with SWIG as follows : - %include typemaps.i + %include "typemaps.i" void neg(double *INOUT); or you can use the %apply directive : - %include typemaps.i + %include "typemaps.i" %apply double *INOUT { double *x }; void neg(double *x); @@ -328,6 +340,10 @@ The implementation of the OUTPUT and INOUT typemaps is different to other languages in that other languages will return the output value as part of the function return value. This difference is due to Java being a typed language. +There are no char *INOUT typemaps, however you can apply the signed char * typemaps instead: + %include "typemaps.i" + %apply signed char *INOUT {char *inout}; + void f(char *inout); */ %define INOUT_TYPEMAP(CTYPE, JNITYPE, JTYPE, JAVATYPE, JNIDESC, TYPECHECKTYPE) @@ -365,6 +381,8 @@ of the function return value. This difference is due to Java being a typed langu #error "Need to provide INOUT directorin typemap, CTYPE array length is unknown" } +%typemap(freearg) CTYPE *INOUT, CTYPE &INOUT "" + %typemap(argout) CTYPE *INOUT, CTYPE &INOUT { JCALL3(Release##JAVATYPE##ArrayElements, jenv, $input, (JNITYPE *)$1, 0); }