배열 다루기 4/4
$ vi AverageArray.cpp#include <jni.h>
void addValue
(
JNIEnv *env,
jobject thiz,
jdoubleArray doubleArray,
jdouble value
)
{
//get the length of doubleArray
jsize length = env->GetArrayLength(doubleArray);
if(length == 0)
return ;
//convert java-array to c-array jdouble[]
jdouble *cdoubleArray = env->GetDoubleArrayElements(doubleArray, nullptr);
//add value
for(int i=0; i<length; i++) {
cdoubleArray[i] += value;
}
env->ReleaseDoubleArrayElements(doubleArray, cdoubleArray, 0);
}
jdoubleArray getSumAndAverage
(
JNIEnv *env,
jobject thiz,
jdoubleArray doubleArray
)
{
//get the length of doubleArray
jsize length = env->GetArrayLength(doubleArray);
if(length == 0)
return nullptr;
//convert java-array to c-array jdouble[]
jdouble *cdoubleArray = env->GetDoubleArrayElements(doubleArray, nullptr);
jdouble sum = 0.0;
//add value
for(int i=0; i<length; i++) {
sum += cdoubleArray[i];
}
jdouble average = sum / length;
env->ReleaseDoubleArrayElements(doubleArray, cdoubleArray, 0);
//make a new jdoubleArray to return
jdoubleArray newDoubleArray = env->NewDoubleArray(2);
//make a c array
jdouble *newCDoubleArray = new jdouble[2];
newCDoubleArray[0] = sum;
newCDoubleArray[1] = average;
//copy c-array to java-array
env->SetDoubleArrayRegion(newDoubleArray, 0, 2, newCDoubleArray);
delete [] newCDoubleArray;
return newDoubleArray;
}
JNIEXPORT jint JNICALL JNI_OnLoad
(
JavaVM *vm,
void *reserved
)
{
JNIEnv *env;
if(vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6)) {
return -1;
}
JNINativeMethod nm[2] = {
{
const_cast<char*>("addValue"),
const_cast<char*>("([DD)V"),
reinterpret_cast<void*>(addValue)
}
,
{
const_cast<char*>("getSumAndAverage"),
const_cast<char*>("([D)[D"),
reinterpret_cast<void*>(getSumAndAverage)
}
};
jclass cls = env->FindClass("Client");
env->RegisterNatives(cls, nm, 2);
return JNI_VERSION_1_6;
}Last updated