/* * Class: com_kenai_jffi_Foreign * Method: invokeArrayO1Int32 * Signature: (J[BILjava/lang/Object;I)I */ JNIEXPORT jint JNICALL Java_com_kenai_jffi_Foreign_invokeArrayO1Int32(JNIEnv* env, jobject self, jlong ctxAddress, jbyteArray paramBuffer, jobject o1, jint o1info, jint o1off, jint o1len) { FFIValue retval; jint info[] = { o1info, o1off, o1len }; jobject objects[] = { o1 }; invokeArrayWithObjects_(env, ctxAddress, paramBuffer, 1, info, objects, &retval); return_int(retval); }
/* * Class: com_kenai_jffi_Foreign * Method: invokeArrayO2Int64 * Signature: (J[BLjava/lang/Object;IIILjava/lang/Object;III)J */ JNIEXPORT jlong JNICALL Java_com_kenai_jffi_Foreign_invokeArrayO2Int64(JNIEnv* env, jobject self, jlong ctxAddress, jbyteArray paramBuffer, jobject o1, jint o1info, jint o1off, jint o1len, jobject o2, jint o2info, jint o2off, jint o2len) { FFIValue retval; jint info[] = { o1info, o1off, o1len, o2info, o2off, o2len }; jobject objects[] = { o1, o2 }; invokeArrayWithObjects_(env, ctxAddress, paramBuffer, 2, info, objects, &retval); return retval.j; }
static void invokeArrayWithObjects(JNIEnv* env, jlong ctxAddress, jbyteArray paramBuffer, jint objectCount, jintArray objectInfo, jobjectArray objectArray, void* retval) { jint* infoBuffer = alloca(objectCount * sizeof(jint) * 3); jobject* objectBuffer = alloca(objectCount * sizeof(jobject)); int i; (*env)->GetIntArrayRegion(env, objectInfo, 0, objectCount * 3, infoBuffer); for (i = 0; i < objectCount; ++i) { objectBuffer[i] = (*env)->GetObjectArrayElement(env, objectArray, i); } invokeArrayWithObjects_(env, ctxAddress, paramBuffer, objectCount, infoBuffer, objectBuffer, retval); }
static void invokeArrayWithObjects(JNIEnv* env, jlong ctxAddress, jbyteArray paramBuffer, jint objectCount, jintArray objectInfo, jobjectArray objectArray, void* retval) { jint stackInfoBuffer[MAX_STACK_OBJECTS * 3], *infoBuffer = &stackInfoBuffer[0]; jobject stackObjectBuffer[MAX_STACK_OBJECTS], *objectBuffer = &stackObjectBuffer[0]; int i; if (objectCount > MAX_STACK_OBJECTS) { infoBuffer = alloca(objectCount * sizeof(jint) * 3); objectBuffer = alloca(objectCount * sizeof(jobject)); } (*env)->GetIntArrayRegion(env, objectInfo, 0, objectCount * 3, infoBuffer); for (i = 0; i < objectCount; ++i) { objectBuffer[i] = (*env)->GetObjectArrayElement(env, objectArray, i); } invokeArrayWithObjects_(env, ctxAddress, paramBuffer, objectCount, infoBuffer, objectBuffer, retval); }