Merge branch 'yuvalk-master' - Java NIOBUFFER typemaps for java.nio.ByteBuffer
* yuvalk-master: Add changes entry for NIOBUFFER Java typemaps Doc/comment improvements in Java various.i Add support for java.nio.Buffer including test-suite test case and documentation
This commit is contained in:
commit
d180908066
5 changed files with 74 additions and 0 deletions
|
|
@ -5,6 +5,10 @@ See the RELEASENOTES file for a summary of changes in each release.
|
|||
Version 3.0.3 (in progress)
|
||||
===========================
|
||||
|
||||
2014-08-04: wsfulton
|
||||
[Java] Merge patch #198 from Yuval Kashtan - Support for java.nio.ByteBuffer mapping to
|
||||
unsigned char * in various.i in NIOBUFFER typemaps.
|
||||
|
||||
2014-07-14: ianlancetaylor
|
||||
[Go] Change struct definition to use void *, not uint8, so
|
||||
that the type is recorded as possibly containing
|
||||
|
|
|
|||
|
|
@ -5490,6 +5490,15 @@ These are listed below:
|
|||
<td>Use for mapping NULL terminated arrays of C strings to Java String arrays</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>unsigned char *</td>
|
||||
<td>NIOBUFFER</td>
|
||||
<td>various.i</td>
|
||||
<td>input<br> output</td>
|
||||
<td>java.nio.Buffer</td>
|
||||
<td>Use for mapping directly allocated buffers to c/c++. useful with directors and long lived memory objects</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<H3><a name="Java_typemap_attributes"></a>25.9.6 Java typemap attributes</H3>
|
||||
|
|
|
|||
|
|
@ -83,6 +83,25 @@ public class java_lib_various_runme {
|
|||
if (byjove[i] != b[i])
|
||||
throw new RuntimeException("By jove, it failed: [" + new String(b) + "]");
|
||||
}
|
||||
|
||||
// NIOBUFFER typemap check
|
||||
java.nio.ByteBuffer buf = java.nio.ByteBuffer.allocateDirect(10);
|
||||
java_lib_various.niobuffer_fill_hello(buf);
|
||||
if (
|
||||
(char)buf.get(0) != 'h' ||
|
||||
(char)buf.get(1) != 'e' ||
|
||||
(char)buf.get(2) != 'l' ||
|
||||
(char)buf.get(3) != 'l' ||
|
||||
(char)buf.get(4) != 'o'
|
||||
)
|
||||
throw new RuntimeException(
|
||||
"nio test failed: " +
|
||||
(char)buf.get(0) +
|
||||
(char)buf.get(1) +
|
||||
(char)buf.get(2) +
|
||||
(char)buf.get(3) +
|
||||
(char)buf.get(4)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@
|
|||
%apply char **STRING_ARRAY { char **languages };
|
||||
%apply char *BYTE { char *chars };
|
||||
%apply char **STRING_OUT { char **string_ptr };
|
||||
%apply unsigned char *NIOBUFFER { unsigned char *buf };
|
||||
%typemap(freearg) char **languages "" // don't delete memory when setting global variable
|
||||
|
||||
%{
|
||||
|
|
@ -47,5 +48,8 @@ void char_ptr_ptr_out(char **string_ptr) {
|
|||
*string_ptr = ret;
|
||||
}
|
||||
|
||||
void niobuffer_fill_hello(unsigned char *buf) {
|
||||
sprintf ((char*)buf,"hello");
|
||||
}
|
||||
%}
|
||||
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@
|
|||
* The returned string appears in the 1st element of the passed in Java String array.
|
||||
*
|
||||
* Example usage wrapping:
|
||||
* %apply char **STRING_OUT { char **string_out };
|
||||
* void foo(char **string_out);
|
||||
*
|
||||
* Java usage:
|
||||
|
|
@ -154,3 +155,40 @@
|
|||
/* Prevent default freearg typemap from being used */
|
||||
%typemap(freearg) char *BYTE ""
|
||||
|
||||
/*
|
||||
* unsigned char *NIOBUFFER typemaps.
|
||||
* This is for mapping Java nio buffers to C char arrays.
|
||||
* It is useful for performance critical code as it reduces the memory copy an marshaling overhead.
|
||||
* Note: The Java buffer has to be allocated with allocateDirect.
|
||||
*
|
||||
* Example usage wrapping:
|
||||
* %apply unsigned char *NIOBUFFER { unsigned char *buf };
|
||||
* void foo(unsigned char *buf);
|
||||
*
|
||||
* Java usage:
|
||||
* java.nio.ByteBuffer b = ByteBuffer.allocateDirect(20);
|
||||
* modulename.foo(b);
|
||||
*/
|
||||
%typemap(jni) unsigned char *NIOBUFFER "jobject"
|
||||
%typemap(jtype) unsigned char *NIOBUFFER "java.nio.ByteBuffer"
|
||||
%typemap(jstype) unsigned char *NIOBUFFER "java.nio.ByteBuffer"
|
||||
%typemap(javain,
|
||||
pre=" assert $javainput.isDirect() : \"Buffer must be allocated direct.\";") unsigned char *NIOBUFFER "$javainput"
|
||||
%typemap(javaout) unsigned char *NIOBUFFER {
|
||||
return $jnicall;
|
||||
}
|
||||
%typemap(in) unsigned char *NIOBUFFER {
|
||||
$1 = (unsigned char *) JCALL1(GetDirectBufferAddress, jenv, $input);
|
||||
if ($1 == NULL) {
|
||||
SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, "Unable to get address of a java.nio.ByteBuffer direct byte buffer. Buffer must be a direct buffer and not a non-direct buffer.");
|
||||
}
|
||||
}
|
||||
%typemap(memberin) unsigned char *NIOBUFFER {
|
||||
if ($input) {
|
||||
$1 = $input;
|
||||
} else {
|
||||
$1 = 0;
|
||||
}
|
||||
}
|
||||
%typemap(freearg) unsigned char *NIOBUFFER ""
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue