summaryrefslogtreecommitdiff
path: root/Lib/cdata.i
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2014-02-15 22:05:40 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2014-02-15 22:13:50 +0000
commit90a9d750c9e6ee67cdde95e5c76c18e15379cebe (patch)
treee90fc3462bf6f71a20f39b70b72ee5dcc2ebf42b /Lib/cdata.i
parent8e6a539d89bc44e47ec75f8cf5d47f824e35c869 (diff)
downloadswig-90a9d750c9e6ee67cdde95e5c76c18e15379cebe.tar.gz
Add support for cdata library for Java
Diffstat (limited to 'Lib/cdata.i')
-rw-r--r--Lib/cdata.i33
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