, array_functions, , , ++, Java. - :
SWIGTYPE_p_long_long array = MyLib.new_long_long_array(100);
for (int i = 0; i < 100; ++i) {
long_long_array_setitem(array, i, i);
}
new Test().SelectValues(array);
array - "" ++- , / Java .
, , "" Java. SWIG array_class, , , . , array_class(long long, LongLongArray) array_functions, :
LongLongArray array = new LongLongArray(100);
for (int i = 0; i < 100; ++i) {
array.setitem(i,i);
}
new Test().SelectValues(array.cast());
SWIG , , . SelectValues, , , .
( %inline d )
%module MyLib
%{
#include <iostream>
%}
%typemap(jtype) long long values[] "long[]"
%typemap(jstype) long long values[] "long[]"
%typemap(javain) long long values[] "$javainput"
%typemap(jni) long long values[] "jlongArray"
%typemap(in) long long values[] {
jboolean isCopy;
$1 = JCALL2(GetLongArrayElements, jenv, $input, &isCopy);
}
%inline %{
class Test
{
public:
void SelectValues(long long values[]) {
while (*values) {
std::cout << *values++ << "\n";
}
}
};
%}
, SWIG- proxy, JNI long[], Java. Java- Java JNI, javain - . ++ JNI jlongArray, .
in, jlongArray long long[] ++ - JNI, , JVM, . ( , Java, )
:
public class run {
public static void main(String[] argv) {
System.loadLibrary("mylib");
long arr[] = {100,99,1,0};
new Test().SelectValues(arr);
}
}
, .