📄 dispatch.cpp
字号:
(JNIEnv *env, jobject self, jint boff, jfloatArray arr, jint off, jint n){ jfloat *peer = (jfloat *) env->GetLongField(self, FID_CPointer_peer); env->GetFloatArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyIn * Signature: (I[III)V */JNIEXPORT void JNICALL Java_CPointer_copyIn__I_3III (JNIEnv *env, jobject self, jint boff, jintArray arr, jint off, jint n){ jint *peer = (jint *)env->GetLongField(self, FID_CPointer_peer); env->GetIntArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyIn * Signature: (I[JII)V */JNIEXPORT void JNICALL Java_CPointer_copyIn__I_3JII (JNIEnv *env, jobject self, jint boff, jlongArray arr, jint off, jint n){ jlong *peer = (jlong *)env->GetLongField(self, FID_CPointer_peer); env->GetLongArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyIn * Signature: (I[SII)V */JNIEXPORT void JNICALL Java_CPointer_copyIn__I_3SII (JNIEnv *env, jobject self, jint boff, jshortArray arr, jint off, jint n){ jshort *peer = (jshort *) env->GetLongField(self, FID_CPointer_peer); env->GetShortArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyOut * Signature: (I[BII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3BII (JNIEnv *env, jobject self, jint boff, jbyteArray arr, jint off, jint n){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); env->SetByteArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyOut * Signature: (I[CII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3CII (JNIEnv *env, jobject self, jint boff, jcharArray arr, jint off, jint n){ jchar *peer = (jchar *)env->GetLongField(self, FID_CPointer_peer); env->SetCharArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyOut * Signature: (I[DII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3DII (JNIEnv *env, jobject self, jint boff, jdoubleArray arr, jint off, jint n){ jdouble *peer = (jdouble *) env->GetLongField(self, FID_CPointer_peer); env->SetDoubleArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyOut * Signature: (I[FII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3FII (JNIEnv *env, jobject self, jint boff, jfloatArray arr, jint off, jint n){ jfloat *peer = (jfloat *) env->GetLongField(self, FID_CPointer_peer); env->SetFloatArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyOut * Signature: (I[III)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3III (JNIEnv *env, jobject self, jint boff, jintArray arr, jint off, jint n){ jint *peer = (jint *)env->GetLongField(self, FID_CPointer_peer); env->SetIntArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyOut * Signature: (I[JII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3JII (JNIEnv *env, jobject self, jint boff, jlongArray arr, jint off, jint n){ jlong *peer = (jlong *)env->GetLongField(self, FID_CPointer_peer); env->SetLongArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: copyOut * Signature: (I[SII)V */JNIEXPORT void JNICALL Java_CPointer_copyOut__I_3SII (JNIEnv *env, jobject self, jint boff, jshortArray arr, jint off, jint n){ jshort *peer = (jshort *) env->GetLongField(self, FID_CPointer_peer); env->SetShortArrayRegion(arr, off, n, peer + boff);}/* * Class: CPointer * Method: getByte * Signature: (I)B */JNIEXPORT jbyte JNICALL Java_CPointer_getByte (JNIEnv *env, jobject self, jint index){ jbyte res; jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(&res, peer + index, sizeof(res)); return res;}/* * Class: CPointer * Method: getCPointer * Signature: (I)LCPointer; */JNIEXPORT jobject JNICALL Java_CPointer_getCPointer (JNIEnv *env, jobject self, jint index){ void *ptr; jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(&ptr, peer + index, sizeof(ptr)); return makeCPointer(env, ptr);}/* * Class: CPointer * Method: getDouble * Signature: (I)D */JNIEXPORT jdouble JNICALL Java_CPointer_getDouble (JNIEnv *env, jobject self, jint index){ jdouble res; jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(&res, peer + index, sizeof(res)); return res;}/* * Class: CPointer * Method: getFloat * Signature: (I)F */JNIEXPORT jfloat JNICALL Java_CPointer_getFloat (JNIEnv *env, jobject self, jint index){ jfloat res; jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(&res, peer + index, sizeof(res)); return res;}/* * Class: CPointer * Method: getInt * Signature: (I)I */JNIEXPORT jint JNICALL Java_CPointer_getInt (JNIEnv *env, jobject self, jint index){ jint res; jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(&res, peer + index, sizeof(res)); return res;}/* * Class: CPointer * Method: getLong * Signature: (I)J */JNIEXPORT jlong JNICALL Java_CPointer_getLong (JNIEnv *env, jobject self, jint index){ jlong res; jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(&res, peer + index, sizeof(res)); return res;}/* * Class: CPointer * Method: getShort * Signature: (I)S */JNIEXPORT jshort JNICALL Java_CPointer_getShort (JNIEnv *env, jobject self, jint index){ jshort res; jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(&res, peer + index, sizeof(res)); return res;}/* * Class: CPointer * Method: getString * Signature: (I)Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_CPointer_getString (JNIEnv *env, jobject self, jint index){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); return JNU_NewStringNative(env, (const char *)peer + index);}/* * Class: CPointer * Method: setByte * Signature: (IB)V */JNIEXPORT void JNICALL Java_CPointer_setByte (JNIEnv *env, jobject self, jint index, jbyte value){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(peer + index, &value, sizeof(value));}/* * Class: CPointer * Method: setCPointer * Signature: (ILCPointer;)V */JNIEXPORT void JNICALL Java_CPointer_setCPointer (JNIEnv *env, jobject self, jint index, jobject cptr){ void *ptr = (void *)env->GetLongField(cptr, FID_CPointer_peer); jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(peer + index, &ptr, sizeof(ptr));}/* * Class: CPointer * Method: setDouble * Signature: (ID)V */JNIEXPORT void JNICALL Java_CPointer_setDouble (JNIEnv *env, jobject self, jint index, jdouble value){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(peer + index, &value, sizeof(value));}/* * Class: CPointer * Method: setFloat * Signature: (IF)V */JNIEXPORT void JNICALL Java_CPointer_setFloat (JNIEnv *env, jobject self, jint index, jfloat value){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(peer + index, &value, sizeof(value));}/* * Class: CPointer * Method: setInt * Signature: (II)V */JNIEXPORT void JNICALL Java_CPointer_setInt (JNIEnv *env, jobject self, jint index, jint value){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(peer + index, &value, sizeof(value));}/* * Class: CPointer * Method: setLong * Signature: (IJ)V */JNIEXPORT void JNICALL Java_CPointer_setLong (JNIEnv *env, jobject self, jint index, jlong value){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(peer + index, &value, sizeof(value));}/* * Class: CPointer * Method: setShort * Signature: (IS)V */JNIEXPORT void JNICALL Java_CPointer_setShort (JNIEnv *env, jobject self, jint index, jshort value){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); memcpy(peer + index, &value, sizeof(value));}/* * Class: CPointer * Method: setString * Signature: (ILjava/lang/String;)V */JNIEXPORT void JNICALL Java_CPointer_setString (JNIEnv *env, jobject self, jint index, jstring value){ jbyte *peer = (jbyte *)env->GetLongField(self, FID_CPointer_peer); char *str = JNU_GetStringNativeChars(env, value); if (str == NULL) return; strcpy((char *)peer + index, str); free(str);}/********************************************************************//* Native methods of class CMalloc *//********************************************************************//* * Class: CMalloc * Method: malloc * Signature: (I)J */JNIEXPORT jlong JNICALL Java_CMalloc_malloc (JNIEnv *env, jclass cls, jint size){ return (jlong)malloc(size);}/* * Class: CMalloc * Method: free * Signature: (J)V */JNIEXPORT void JNICALL Java_CMalloc_free (JNIEnv *env, jobject self){ long peer = env->GetLongField(self, FID_CPointer_peer); free((void *)peer);}/********************************************************************//* Utility functions *//********************************************************************//* Throw an exception by name */static void JNU_ThrowByName(JNIEnv *env, const char *name, const char *msg){ jclass cls = env->FindClass(name); if (cls != 0) /* Otherwise an exception has already been thrown */ env->ThrowNew(cls, msg); /* It's a good practice to clean up the local references. */ env->DeleteLocalRef(cls);}/* Translates a Java string to a C string using the String.getBytes * method, which uses default local encoding. */static char *JNU_GetStringNativeChars(JNIEnv *env, jstring jstr){ jbyteArray hab = 0; jthrowable exc; char *result = 0; hab = (jbyteArray)env->CallObjectMethod(jstr, MID_String_getBytes); exc = env->ExceptionOccurred(); if (!exc) { jint len = env->GetArrayLength(hab); result = (char *)malloc(len + 1); if (result == 0) { JNU_ThrowByName(env, "java/lang/OutOfMemoryError", 0); env->DeleteLocalRef(hab); return 0; } env->GetByteArrayRegion(hab, 0, len, (jbyte *)result); result[len] = 0; /* NULL-terminate */ } else { env->DeleteLocalRef(exc); } env->DeleteLocalRef(hab); return result;}/* Constructs a Java string from a C array using the String(byte []) * constructor, which uses default local encoding. */static jstringJNU_NewStringNative(JNIEnv *env, const char *str){ jstring result; jbyteArray hab = 0; int len; len = strlen(str); hab = env->NewByteArray(len); if (hab != 0) { env->SetByteArrayRegion(hab, 0, len, (jbyte *)str); result = (jstring)env->NewObject(Class_String, MID_String_init, hab); env->DeleteLocalRef(hab); return result; } return 0;}/* Canonicalize NULL pointers */static jobject makeCPointer(JNIEnv *env, void *p){ jobject obj; if (p == NULL) { return NULL; } obj = env->AllocObject(Class_CPointer); if (obj) { env->SetLongField(obj, FID_CPointer_peer, (jlong)p); } return obj;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -