blob: ceaeb966c2c680f2871b429bd88947914f9b75f7 [file] [log] [blame]
// Copyright 2011 Google Inc. All Rights Reserved.
#ifndef ART_SRC_JNI_INTERNAL_H_
#define ART_SRC_JNI_INTERNAL_H_
#include "jni.h"
#include "assembler.h"
#include "macros.h"
namespace art {
// TODO: This is a place holder for a true JNIEnv used to provide limited
// functionality for the JNI compiler
class JniEnvironment {
public:
explicit JniEnvironment();
static Offset MonitorEnterOffset() {
return Offset(OFFSETOF_MEMBER(JniEnvironment, monitor_enter_));
}
static Offset MonitorExitOffset() {
return Offset(OFFSETOF_MEMBER(JniEnvironment, monitor_exit_));
}
private:
struct JNINativeInterface_* functions_;
void (*monitor_enter_)(JniEnvironment*, jobject);
void (*monitor_exit_)(JniEnvironment*, jobject);
DISALLOW_COPY_AND_ASSIGN(JniEnvironment);
};
class JniNativeInterface {
public:
static struct JNINativeInterface* GetInterface() {
return &native_interface_;
}
private:
static jint GetVersion(JNIEnv* env);
static jclass DefineClass(JNIEnv* env,
const char* name,
jobject loader,
const jbyte* buf,
jsize len);
static jclass FindClass(JNIEnv* env, const char* name);
static jmethodID FromReflectedMethod(JNIEnv* env, jobject method);
static jfieldID FromReflectedField(JNIEnv* env, jobject field);
static jobject ToReflectedMethod(JNIEnv* env,
jclass cls,
jmethodID methodID,
jboolean isStatic);
static jclass GetSuperclass(JNIEnv* env, jclass sub);
static jboolean IsAssignableFrom(JNIEnv* env, jclass sub, jclass sup);
static jobject ToReflectedField(JNIEnv* env,
jclass cls,
jfieldID fieldID,
jboolean isStatic);
static jint Throw(JNIEnv* env, jthrowable obj);
static jint ThrowNew(JNIEnv* env, jclass clazz, const char* msg);
static jthrowable ExceptionOccurred(JNIEnv* env);
static void ExceptionDescribe(JNIEnv* env);
static void ExceptionClear(JNIEnv* env);
static void FatalError(JNIEnv* env, const char* msg);
static jint PushLocalFrame(JNIEnv* env, jint cap);
static jobject PopLocalFrame(JNIEnv* env, jobject res);
static jobject NewGlobalRef(JNIEnv* env, jobject lobj);
static void DeleteGlobalRef(JNIEnv* env, jobject gref);
static void DeleteLocalRef(JNIEnv* env, jobject obj);
static jboolean IsSameObject(JNIEnv* env, jobject obj1, jobject obj2);
static jobject NewLocalRef(JNIEnv* env, jobject ref);
static jint EnsureLocalCapacity(JNIEnv* env, jint);
static jobject AllocObject(JNIEnv* env, jclass clazz);
static jobject NewObject(JNIEnv* env, jclass clazz, jmethodID methodID, ...);
static jobject NewObjectV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jobject NewObjectA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jclass GetObjectClass(JNIEnv* env, jobject obj);
static jboolean IsInstanceOf(JNIEnv* env, jobject obj, jclass clazz);
static jmethodID GetMethodID(JNIEnv* env,
jclass clazz,
const char* name,
const char* sig);
static jobject CallObjectMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jobject CallObjectMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jobject CallObjectMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jboolean CallBooleanMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jboolean CallBooleanMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jboolean CallBooleanMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jbyte CallByteMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jbyte CallByteMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jbyte CallByteMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jchar CallCharMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jchar CallCharMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jchar CallCharMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jshort CallShortMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jshort CallShortMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jshort CallShortMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jint CallIntMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jint CallIntMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jint CallIntMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jlong CallLongMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jlong CallLongMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jlong CallLongMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jfloat CallFloatMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jfloat CallFloatMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jfloat CallFloatMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jdouble CallDoubleMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static jdouble CallDoubleMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static jdouble CallDoubleMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static void CallVoidMethod(JNIEnv* env,
jobject obj,
jmethodID methodID,
...);
static void CallVoidMethodV(JNIEnv* env,
jobject obj,
jmethodID methodID,
va_list args);
static void CallVoidMethodA(JNIEnv* env,
jobject obj,
jmethodID methodID,
jvalue* args);
static jobject CallNonvirtualObjectMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jobject CallNonvirtualObjectMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jobject CallNonvirtualObjectMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jboolean CallNonvirtualBooleanMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jboolean CallNonvirtualBooleanMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jboolean CallNonvirtualBooleanMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jbyte CallNonvirtualByteMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jbyte CallNonvirtualByteMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jbyte CallNonvirtualByteMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jchar CallNonvirtualCharMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jchar CallNonvirtualCharMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jchar CallNonvirtualCharMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jshort CallNonvirtualShortMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jshort CallNonvirtualShortMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jshort CallNonvirtualShortMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jint CallNonvirtualIntMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jint CallNonvirtualIntMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jint CallNonvirtualIntMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jlong CallNonvirtualLongMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jlong CallNonvirtualLongMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jlong CallNonvirtualLongMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jfloat CallNonvirtualFloatMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jfloat CallNonvirtualFloatMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jfloat CallNonvirtualFloatMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jdouble CallNonvirtualDoubleMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static jdouble CallNonvirtualDoubleMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static jdouble CallNonvirtualDoubleMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static void CallNonvirtualVoidMethod(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
...);
static void CallNonvirtualVoidMethodV(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
va_list args);
static void CallNonvirtualVoidMethodA(JNIEnv* env,
jobject obj,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jfieldID GetFieldID(JNIEnv* env,
jclass clazz,
const char* name,
const char* sig);
static jobject GetObjectField(JNIEnv* env, jobject obj, jfieldID fieldID);
static jboolean GetBooleanField(JNIEnv* env, jobject obj, jfieldID fieldID);
static jbyte GetByteField(JNIEnv* env, jobject obj, jfieldID fieldID);
static jchar GetCharField(JNIEnv* env, jobject obj, jfieldID fieldID);
static jshort GetShortField(JNIEnv* env, jobject obj, jfieldID fieldID);
static jint GetIntField(JNIEnv* env, jobject obj, jfieldID fieldID);
static jlong GetLongField(JNIEnv* env, jobject obj, jfieldID fieldID);
static jfloat GetFloatField(JNIEnv* env, jobject obj, jfieldID fieldID);
static jdouble GetDoubleField(JNIEnv* env, jobject obj, jfieldID fieldID);
static void SetObjectField(JNIEnv* env,
jobject obj,
jfieldID fieldID,
jobject val);
static void SetBooleanField(JNIEnv* env,
jobject obj,
jfieldID fieldID,
jboolean val);
static void SetByteField(JNIEnv* env,
jobject obj,
jfieldID fieldID,
jbyte val);
static void SetCharField(JNIEnv* env,
jobject obj,
jfieldID fieldID,
jchar val);
static void SetShortField(JNIEnv* env,
jobject obj,
jfieldID fieldID,
jshort val);
static void SetIntField(JNIEnv* env, jobject obj, jfieldID fieldID, jint val);
static void SetLongField(JNIEnv* env,
jobject obj,
jfieldID fieldID,
jlong val);
static void SetFloatField(JNIEnv* env,
jobject obj,
jfieldID fieldID,
jfloat val);
static void SetDoubleField(JNIEnv* env,
jobject obj,
jfieldID fieldID,
jdouble val);
static jmethodID GetStaticMethodID(JNIEnv* env,
jclass clazz,
const char* name,
const char* sig);
static jobject CallStaticObjectMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jobject CallStaticObjectMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jobject CallStaticObjectMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jboolean CallStaticBooleanMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jboolean CallStaticBooleanMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jboolean CallStaticBooleanMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jbyte CallStaticByteMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jbyte CallStaticByteMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jbyte CallStaticByteMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jchar CallStaticCharMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jchar CallStaticCharMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jchar CallStaticCharMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jshort CallStaticShortMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jshort CallStaticShortMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jshort CallStaticShortMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jint CallStaticIntMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jint CallStaticIntMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jint CallStaticIntMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jlong CallStaticLongMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jlong CallStaticLongMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jlong CallStaticLongMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jfloat CallStaticFloatMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jfloat CallStaticFloatMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jfloat CallStaticFloatMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static jdouble CallStaticDoubleMethod(JNIEnv* env,
jclass clazz,
jmethodID methodID,
...);
static jdouble CallStaticDoubleMethodV(JNIEnv* env,
jclass clazz,
jmethodID methodID,
va_list args);
static jdouble CallStaticDoubleMethodA(JNIEnv* env,
jclass clazz,
jmethodID methodID,
jvalue* args);
static void CallStaticVoidMethod(JNIEnv* env,
jclass cls,
jmethodID methodID,
...);
static void CallStaticVoidMethodV(JNIEnv* env,
jclass cls,
jmethodID methodID,
va_list args);
static void CallStaticVoidMethodA(JNIEnv* env,
jclass cls,
jmethodID methodID,
jvalue* args);
static jfieldID GetStaticFieldID(JNIEnv* env,
jclass clazz,
const char* name,
const char* sig);
static jobject GetStaticObjectField(JNIEnv* env,
jclass clazz,
jfieldID fieldID);
static jboolean GetStaticBooleanField(JNIEnv* env,
jclass clazz,
jfieldID fieldID);
static jbyte GetStaticByteField(JNIEnv* env, jclass clazz, jfieldID fieldID);
static jchar GetStaticCharField(JNIEnv* env, jclass clazz, jfieldID fieldID);
static jshort GetStaticShortField(JNIEnv* env,
jclass clazz,
jfieldID fieldID);
static jint GetStaticIntField(JNIEnv* env, jclass clazz, jfieldID fieldID);
static jlong GetStaticLongField(JNIEnv* env, jclass clazz, jfieldID fieldID);
static jfloat GetStaticFloatField(JNIEnv* env,
jclass clazz,
jfieldID fieldID);
static jdouble GetStaticDoubleField(JNIEnv* env,
jclass clazz,
jfieldID fieldID);
static void SetStaticObjectField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jobject value);
static void SetStaticBooleanField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jboolean value);
static void SetStaticByteField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jbyte value);
static void SetStaticCharField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jchar value);
static void SetStaticShortField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jshort value);
static void SetStaticIntField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jint value);
static void SetStaticLongField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jlong value);
static void SetStaticFloatField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jfloat value);
static void SetStaticDoubleField(JNIEnv* env,
jclass clazz,
jfieldID fieldID,
jdouble value);
static jstring NewString(JNIEnv* env, const jchar* unicode, jsize len);
static jsize GetStringLength(JNIEnv* env, jstring str);
static const jchar* GetStringChars(JNIEnv* env,
jstring str,
jboolean* isCopy);
static void ReleaseStringChars(JNIEnv* env, jstring str, const jchar* chars);
static jstring NewStringUTF(JNIEnv* env, const char* utf);
static jsize GetStringUTFLength(JNIEnv* env, jstring str);
static const char* GetStringUTFChars(JNIEnv* env,
jstring str,
jboolean* isCopy);
static void ReleaseStringUTFChars(JNIEnv* env,
jstring str,
const char* chars);
static jsize GetArrayLength(JNIEnv* env, jarray array);
static jobjectArray NewObjectArray(JNIEnv* env,
jsize len,
jclass clazz,
jobject init);
static jobject GetObjectArrayElement(JNIEnv* env,
jobjectArray array,
jsize index);
static void SetObjectArrayElement(JNIEnv* env,
jobjectArray array,
jsize index,
jobject val);
static jbooleanArray NewBooleanArray(JNIEnv* env, jsize len);
static jbyteArray NewByteArray(JNIEnv* env, jsize len);
static jcharArray NewCharArray(JNIEnv* env, jsize len);
static jshortArray NewShortArray(JNIEnv* env, jsize len);
static jintArray NewIntArray(JNIEnv* env, jsize len);
static jlongArray NewLongArray(JNIEnv* env, jsize len);
static jfloatArray NewFloatArray(JNIEnv* env, jsize len);
static jdoubleArray NewDoubleArray(JNIEnv* env, jsize len);
static jboolean* GetBooleanArrayElements(JNIEnv* env,
jbooleanArray array,
jboolean* isCopy);
static jbyte* GetByteArrayElements(JNIEnv* env,
jbyteArray array,
jboolean* isCopy);
static jchar* GetCharArrayElements(JNIEnv* env,
jcharArray array,
jboolean* isCopy);
static jshort* GetShortArrayElements(JNIEnv* env,
jshortArray array,
jboolean* isCopy);
static jint* GetIntArrayElements(JNIEnv* env,
jintArray array,
jboolean* isCopy);
static jlong* GetLongArrayElements(JNIEnv* env,
jlongArray array,
jboolean* isCopy);
static jfloat* GetFloatArrayElements(JNIEnv* env,
jfloatArray array,
jboolean* isCopy);
static jdouble* GetDoubleArrayElements(JNIEnv* env,
jdoubleArray array,
jboolean* isCopy);
static void ReleaseBooleanArrayElements(JNIEnv* env,
jbooleanArray array,
jboolean* elems,
jint mode);
static void ReleaseByteArrayElements(JNIEnv* env,
jbyteArray array,
jbyte* elems,
jint mode);
static void ReleaseCharArrayElements(JNIEnv* env,
jcharArray array,
jchar* elems,
jint mode);
static void ReleaseShortArrayElements(JNIEnv* env,
jshortArray array,
jshort* elems,
jint mode);
static void ReleaseIntArrayElements(JNIEnv* env,
jintArray array,
jint* elems,
jint mode);
static void ReleaseLongArrayElements(JNIEnv* env,
jlongArray array,
jlong* elems,
jint mode);
static void ReleaseFloatArrayElements(JNIEnv* env,
jfloatArray array,
jfloat* elems,
jint mode);
static void ReleaseDoubleArrayElements(JNIEnv* env,
jdoubleArray array,
jdouble* elems,
jint mode);
static void GetBooleanArrayRegion(JNIEnv* env,
jbooleanArray array,
jsize start,
jsize l,
jboolean* buf);
static void GetByteArrayRegion(JNIEnv* env,
jbyteArray array,
jsize start,
jsize len,
jbyte* buf);
static void GetCharArrayRegion(JNIEnv* env,
jcharArray array,
jsize start,
jsize len,
jchar* buf);
static void GetShortArrayRegion(JNIEnv* env,
jshortArray array,
jsize start,
jsize len,
jshort* buf);
static void GetIntArrayRegion(JNIEnv* env,
jintArray array,
jsize start,
jsize len,
jint* buf);
static void GetLongArrayRegion(JNIEnv* env,
jlongArray array,
jsize start,
jsize len,
jlong* buf);
static void GetFloatArrayRegion(JNIEnv* env,
jfloatArray array,
jsize start,
jsize len,
jfloat* buf);
static void GetDoubleArrayRegion(JNIEnv* env,
jdoubleArray array,
jsize start,
jsize len,
jdouble* buf);
static void SetBooleanArrayRegion(JNIEnv* env,
jbooleanArray array,
jsize start,
jsize l,
const jboolean* buf);
static void SetByteArrayRegion(JNIEnv* env,
jbyteArray array,
jsize start,
jsize len,
const jbyte* buf);
static void SetCharArrayRegion(JNIEnv* env,
jcharArray array,
jsize start,
jsize len,
const jchar* buf);
static void SetShortArrayRegion(JNIEnv* env,
jshortArray array,
jsize start,
jsize len,
const jshort* buf);
static void SetIntArrayRegion(JNIEnv* env,
jintArray array,
jsize start,
jsize len,
const jint* buf);
static void SetLongArrayRegion(JNIEnv* env,
jlongArray array,
jsize start,
jsize len,
const jlong* buf);
static void SetFloatArrayRegion(JNIEnv* env,
jfloatArray array,
jsize start,
jsize len,
const jfloat* buf);
static void SetDoubleArrayRegion(JNIEnv* env,
jdoubleArray array,
jsize start,
jsize len,
const jdouble* buf);
static jint RegisterNatives(JNIEnv* env,
jclass clazz,
const JNINativeMethod* methods,
jint nMethods);
static jint UnregisterNatives(JNIEnv* env, jclass clazz);
static jint MonitorEnter(JNIEnv* env, jobject obj);
static jint MonitorExit(JNIEnv* env, jobject obj);
static jint GetJavaVM(JNIEnv* env, JavaVM* *vm);
static void GetStringRegion(JNIEnv* env,
jstring str,
jsize start,
jsize len,
jchar* buf);
static void GetStringUTFRegion(JNIEnv* env,
jstring str,
jsize start,
jsize len,
char* buf);
static void* GetPrimitiveArrayCritical(JNIEnv* env,
jarray array,
jboolean* isCopy);
static void ReleasePrimitiveArrayCritical(JNIEnv* env,
jarray array,
void* carray,
jint mode);
static const jchar* GetStringCritical(JNIEnv* env,
jstring s,
jboolean* isCopy);
static void ReleaseStringCritical(JNIEnv* env, jstring s, const jchar* cstr);
static jweak NewWeakGlobalRef(JNIEnv* env, jobject obj);
static void DeleteWeakGlobalRef(JNIEnv* env, jweak obj);
static jboolean ExceptionCheck(JNIEnv* env);
static jobject NewDirectByteBuffer(JNIEnv* env,
void* address,
jlong capacity);
static void* GetDirectBufferAddress(JNIEnv* env, jobject buf);
static jlong GetDirectBufferCapacity(JNIEnv* env, jobject buf);
static jobjectRefType GetObjectRefType(JNIEnv* env, jobject obj);
static struct JNINativeInterface native_interface_;
DISALLOW_IMPLICIT_CONSTRUCTORS(JniNativeInterface);
};
class JniInvokeInterface {
public:
static struct JNIInvokeInterface* GetInterface() {
return &invoke_interface_;
}
private:
static jint DestroyJavaVM(JavaVM* vm);
static jint AttachCurrentThread(JavaVM* vm, JNIEnv** penv, void* thr_args);
static jint DetachCurrentThread(JavaVM* vm);
static jint GetEnv(JavaVM* vm, void** penv, int version);
static jint AttachCurrentThreadAsDaemon(JavaVM* vm,
JNIEnv** penv,
void* thr_args);
static struct JNIInvokeInterface invoke_interface_;
DISALLOW_IMPLICIT_CONSTRUCTORS(JniInvokeInterface);
};
} // namespace art
#endif // ART_SRC_JNI_INTERNAL_H_