diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2014-02-15 22:05:40 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2014-02-15 22:13:50 +0000 |
commit | 90a9d750c9e6ee67cdde95e5c76c18e15379cebe (patch) | |
tree | e90fc3462bf6f71a20f39b70b72ee5dcc2ebf42b /Lib/cdata.i | |
parent | 8e6a539d89bc44e47ec75f8cf5d47f824e35c869 (diff) | |
download | swig-90a9d750c9e6ee67cdde95e5c76c18e15379cebe.tar.gz |
Add support for cdata library for Java
Diffstat (limited to 'Lib/cdata.i')
-rw-r--r-- | Lib/cdata.i | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/Lib/cdata.i b/Lib/cdata.i index 22a6d9de8..b9b8e1887 100644 --- a/Lib/cdata.i +++ b/Lib/cdata.i @@ -20,17 +20,50 @@ typedef struct SWIGCDATA { $result = scm_from_locale_stringn($1.data,$1.len); } %typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH); + #elif SWIGCHICKEN + %typemap(out) SWIGCDATA { C_word *string_space = C_alloc(C_SIZEOF_STRING($1.len)); $result = C_string(&string_space, $1.len, $1.data); } %typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH); + #elif SWIGPHP + %typemap(out) SWIGCDATA { ZVAL_STRINGL($result, $1.data, $1.len, 1); } %typemap(in) (const void *indata, int inlen) = (char *STRING, int LENGTH); + +#elif SWIGJAVA + +%apply (char *STRING, int LENGTH) { (const void *indata, int inlen) } +%typemap(jni) SWIGCDATA "jbyteArray" +%typemap(jtype) SWIGCDATA "byte[]" +%typemap(jstype) SWIGCDATA "byte[]" +%fragment("SWIG_JavaArrayOutCDATA", "header") { +static jbyteArray SWIG_JavaArrayOutCDATA(JNIEnv *jenv, char *result, jsize sz) { + jbyte *arr; + int i; + jbyteArray jresult = JCALL1(NewByteArray, jenv, sz); + if (!jresult) + return NULL; + arr = JCALL2(GetByteArrayElements, jenv, jresult, 0); + if (!arr) + return NULL; + for (i=0; i<sz; i++) + arr[i] = (jbyte)result[i]; + JCALL3(ReleaseByteArrayElements, jenv, jresult, arr, 0); + return jresult; +} +} +%typemap(out, fragment="SWIG_JavaArrayOutCDATA") SWIGCDATA +%{$result = SWIG_JavaArrayOutCDATA(jenv, (char *)$1.data, $1.len); %} +%typemap(javaout) SWIGCDATA { + return $jnicall; + } + #else %echo "cdata.i module not supported." #endif |