static void nativeClassInit(JNIEnv *env) { LOGD("nativeClassInit.--- 1 ---"); nativeClassInitBuffer(env); LOGD("nativeClassInit.--- 2 ---"); jclass IAEClassLocal = env->FindClass("java/lang/IllegalArgumentException"); jclass OOMEClassLocal = env->FindClass("java/lang/OutOfMemoryError"); jclass UOEClassLocal = env->FindClass("java/lang/UnsupportedOperationException"); jclass AIOOBEClassLocal = env->FindClass("java/lang/ArrayIndexOutOfBoundsException"); IAEClass = (jclass) env->NewGlobalRef(IAEClassLocal); OOMEClass = (jclass) env->NewGlobalRef(OOMEClassLocal); UOEClass = (jclass) env->NewGlobalRef(UOEClassLocal); AIOOBEClass = (jclass) env->NewGlobalRef(AIOOBEClassLocal); LOGD("nativeClassInit.--- done. ---"); }
static void nativeClassInit(JNIEnv *_env, jclass glImplClass) { nativeClassInitBuffer(_env); jclass IAEClassLocal = _env->FindClass("java/lang/IllegalArgumentException"); jclass OOMEClassLocal = _env->FindClass("java/lang/OutOfMemoryError"); jclass UOEClassLocal = _env->FindClass("java/lang/UnsupportedOperationException"); jclass AIOOBEClassLocal = _env->FindClass("java/lang/ArrayIndexOutOfBoundsException"); IAEClass = (jclass) _env->NewGlobalRef(IAEClassLocal); OOMEClass = (jclass) _env->NewGlobalRef(OOMEClassLocal); UOEClass = (jclass) _env->NewGlobalRef(UOEClassLocal); AIOOBEClass = (jclass) _env->NewGlobalRef(AIOOBEClassLocal); }
static void * getPointer(JNIEnv *env, jobject buffer, jarray *array, jint *remaining){ jint position; jint limit; jint elementSizeShift; jlong pointer; jint offset; void *data; nativeClassInitBuffer( env ); position = env->GetIntField(buffer, positionID); limit = env->GetIntField(buffer, limitID); elementSizeShift = env->GetIntField(buffer, elementSizeShiftID); *remaining = (limit - position) << elementSizeShift; pointer = env->CallStaticLongMethod(nioAccessClass, getBasePointerID, buffer); *array = (jarray) env->CallStaticObjectMethod(nioAccessClass, getBaseArrayID, buffer); offset = env->CallStaticIntMethod(nioAccessClass, getBaseArrayOffsetID, buffer); data = env->GetPrimitiveArrayCritical( *array, 0); return (void *) ((char*) data + offset ); }