Доступ к массиву массивов JNI

Я пытаюсь написать тест для различных алгоритмов сортировки в java, потому что я хотел исследовать мир JNI. Я пытаюсь сортировать набор массивов int, которые содержатся в массиве. Это мой заголовок Java:

public static native void sort(int[][] c);

Я использовал javah для создания этого заголовка C для него:

JNIEXPORT void JNICALL Java_org_jku_ssw_prsw2_ue6_jni_JNISorter_sort (JNIEnv *env, jclass cls, jobjectArray objArr)

Затем я пытаюсь получить длину массива с помощью

jsize len = (*env)->GetArrayLength(env, objArr);

но отсюда я немного застрял, я могу получить элемент jobject из этого массива с помощью GetObjectArrayElement, но как я могу перейти оттуда, чтобы получить массив jint, который затем я могу сортировать?

java,c,arrays,multidimensional-array,jni,

1

Ответов: 1


1

Поскольку вы знаете, что jobjectвы получаете, на самом деле int[], вы можете безопасно отбросить его в a, jintArrayа затем перейти оттуда, например:

JNIEXPORT void JNICALL Java_Main_sort(JNIEnv *env, jclass _, jobjectArray objArr) {
    jsize len = (*env)->GetArrayLength(env, objArr);

    for(int i = 0; i < len; i++) {
        jintArray arr = (jintArray) (*env)->GetObjectArrayElement(env, objArr, i);
        jsize innerLen = (*env)->GetArrayLength(env, arr);
        jint* vals = (*env)->GetIntArrayElements(env, arr, NULL);            

        /* make changes to 'vals' */

        (*env)->ReleaseIntArrayElements(env, arr, vals, JNI_COMMIT);
        (*env)->DeleteLocalRef(env, arr);
    }
}
Java, C, массивы, многомерный массив-, JNI,
Похожие вопросы
Яндекс.Метрика