// jni.cc - JNI implementation, including the jump table.

/* Copyright (C) 1998, 1999  Cygnus Solutions

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

#include <config.h>

#include <stddef.h>

#include <jni.h>
#include <gcj/field.h>

static jclass
_Jv_JNI_GetSuperclass (JNIEnv *, jclass clazz)
{
  return clazz->getSuperclass ();
}

static jboolean
IsAssignableFrom(JNIEnv *, jclass clazz1, jclass clazz2)
{
  return clazz1->isAssignableFrom (clazz2);
}

static jobject
_Jv_JNI_GetObjectField (JNIEnv *, jobject obj, jfieldID field) 
{
  return _Jv_GetObjectField (obj, field);
}

static jbyte
_Jv_JNI_GetByteField (JNIEnv *, jobject obj, jfieldID field) 
{
  return _Jv_GetByteField (obj, field);
}

static jshort
_Jv_JNI_GetShortField (JNIEnv *, jobject obj, jfieldID field) 
{
  return _Jv_GetShortField (obj, field);
}

static jint
_Jv_JNI_GetIntField (JNIEnv *, jobject obj, jfieldID field) 
{
  return _Jv_GetIntField (obj, field);
}

static jlong
_Jv_JNI_GetLongField (JNIEnv *, jobject obj, jfieldID field) 
{
  return _Jv_GetLongField (obj, field);
}

static jsize
_Jv_JNI_GetStringLength (JNIEnv *, jstring string)
{
  return string->length();
}

// JDK 1.2
jobject
_Jv_JNI_ToReflectedField (JNIEnv *, jclass cls, jfieldID fieldID)
{
  java::lang::reflect::Field *field = new java::lang::reflect::Field();
  field->declaringClass = cls;
  field->offset = (char*) fieldID - (char *) cls->fields;
  field->name = _Jv_NewStringUtf8Const (fieldID->getNameUtf8Const (cls));
  return field;
}

// JDK 1.2
jfieldID
_Jv_JNI_FromReflectedField (JNIEnv *, java::lang::reflect::Field *field)
{
  return _Jv_FromReflectedField (field);
}

#define NOT_IMPL NULL

struct JNINativeInterface _Jv_JNIFunctions =
{
  NULL,
  NULL,
  NULL,
  NULL,
  NOT_IMPL /* GetVersion */,
  NOT_IMPL /* DefineClass */,
  NOT_IMPL /* FindClass */,
  NULL,
  NULL,
  NULL,
  _Jv_JNI_GetSuperclass,
  IsAssignableFrom,
  NULL,
  NOT_IMPL /* Throw */,
  NOT_IMPL /* ThrowNew */,
  NOT_IMPL /* ExceptionOccurred */,
  NOT_IMPL /* ExceptionDescribe */,
  NOT_IMPL /* ExceptionClear */,
  NOT_IMPL /* FatalError */,
  NOT_IMPL /* NULL */,
  NOT_IMPL /* NULL */,
  NOT_IMPL /* NewGlobalRef */,
  NOT_IMPL /* DeleteGlobalRef */,
  NOT_IMPL /* DeleteLocalRef */,
  NOT_IMPL /* IsSameObject */,
  NOT_IMPL /* NULL */,
  NOT_IMPL /* NULL */,
  NOT_IMPL /* AllocObject */,
  NOT_IMPL /* NewObject */,
  NOT_IMPL /* NewObjectV */,
  NOT_IMPL /* NewObjectA */,
  NOT_IMPL /* GetObjectClass */,
  NOT_IMPL /* IsInstanceOf */,
  NOT_IMPL /* GetMethodID */,
  NOT_IMPL /* CallObjectMethod */,
  NOT_IMPL /* CallObjectMethodV */,
  NOT_IMPL /* CallObjectMethodA */,
  NOT_IMPL /* CallBooleanMethod */,
  NOT_IMPL /* CallBooleanMethodV */,
  NOT_IMPL /* CallBooleanMethodA */,
  NOT_IMPL /* CallByteMethod */,
  NOT_IMPL /* CallByteMethodV */,
  NOT_IMPL /* CallByteMethodA */,
  NOT_IMPL /* CallCharMethod */,
  NOT_IMPL /* CallCharMethodV */,
  NOT_IMPL /* CallCharMethodA */,
  NOT_IMPL /* CallShortMethod */,
  NOT_IMPL /* CallShortMethodV */,
  NOT_IMPL /* CallShortMethodA */,
  NOT_IMPL /* CallIntMethod */,
  NOT_IMPL /* CallIntMethodV */,
  NOT_IMPL /* CallIntMethodA */,
  NOT_IMPL /* CallLongMethod */,
  NOT_IMPL /* CallLongMethodV */,
  NOT_IMPL /* CallLongMethodA */,
  NOT_IMPL /* CallFloatMethod */,
  NOT_IMPL /* CallFloatMethodV */,
  NOT_IMPL /* CallFloatMethodA */,
  NOT_IMPL /* CallDoubleMethod */,
  NOT_IMPL /* CallDoubleMethodV */,
  NOT_IMPL /* CallDoubleMethodA */,
  NOT_IMPL /* CallVoidMethod */,
  NOT_IMPL /* CallVoidMethodV */,
  NOT_IMPL /* CallVoidMethodA */,
  NOT_IMPL /* CallNonvirtualObjectMethod */,
  NOT_IMPL /* CallNonvirtualObjectMethodV */,
  NOT_IMPL /* CallNonvirtualObjectMethodA */,
  NOT_IMPL /* CallNonvirtualBooleanMethod */,
  NOT_IMPL /* CallNonvirtualBooleanMethodV */,
  NOT_IMPL /* CallNonvirtualBooleanMethodA */,
  NOT_IMPL /* CallNonvirtualByteMethod */,
  NOT_IMPL /* CallNonvirtualByteMethodV */,
  NOT_IMPL /* CallNonvirtualByteMethodA */,
  NOT_IMPL /* CallNonvirtualCharMethod */,
  NOT_IMPL /* CallNonvirtualCharMethodV */,
  NOT_IMPL /* CallNonvirtualCharMethodA */,
  NOT_IMPL /* CallNonvirtualShortMethod */,
  NOT_IMPL /* CallNonvirtualShortMethodV */,
  NOT_IMPL /* CallNonvirtualShortMethodA */,
  NOT_IMPL /* CallNonvirtualIntMethod */,
  NOT_IMPL /* CallNonvirtualIntMethodV */,
  NOT_IMPL /* CallNonvirtualIntMethodA */,
  NOT_IMPL /* CallNonvirtualLongMethod */,
  NOT_IMPL /* CallNonvirtualLongMethodV */,
  NOT_IMPL /* CallNonvirtualLongMethodA */,
  NOT_IMPL /* CallNonvirtualFloatMethod */,
  NOT_IMPL /* CallNonvirtualFloatMethodV */,
  NOT_IMPL /* CallNonvirtualFloatMethodA */,
  NOT_IMPL /* CallNonvirtualDoubleMethod */,
  NOT_IMPL /* CallNonvirtualDoubleMethodV */,
  NOT_IMPL /* CallNonvirtualDoubleMethodA */,
  NOT_IMPL /* CallNonvirtualVoidMethod */,
  NOT_IMPL /* CallNonvirtualVoidMethodV */,
  NOT_IMPL /* CallNonvirtualVoidMethodA */,
  NOT_IMPL /* GetFieldID */,
  _Jv_JNI_GetObjectField,
  NOT_IMPL /* GetBooleanField */,
  _Jv_JNI_GetByteField,
  NOT_IMPL /* GetCharField */,
  _Jv_JNI_GetShortField,
  _Jv_JNI_GetIntField,
  _Jv_JNI_GetLongField,
  NOT_IMPL /* GetFloatField */,
  NOT_IMPL /* GetDoubleField */,
  NOT_IMPL /* SetObjectField */,
  NOT_IMPL /* SetBooleanField */,
  NOT_IMPL /* SetByteField */,
  NOT_IMPL /* SetCharField */,
  NOT_IMPL /* SetShortField */,
  NOT_IMPL /* SetIntField */,
  NOT_IMPL /* SetLongField */,
  NOT_IMPL /* SetFloatField */,
  NOT_IMPL /* SetDoubleField */,
  NOT_IMPL /* GetStaticMethodID */,
  NOT_IMPL /* CallStaticObjectMethod */,
  NOT_IMPL /* CallStaticObjectMethodV */,
  NOT_IMPL /* CallStaticObjectMethodA */,
  NOT_IMPL /* CallStaticBooleanMethod */,
  NOT_IMPL /* CallStaticBooleanMethodV */,
  NOT_IMPL /* CallStaticBooleanMethodA */,
  NOT_IMPL /* CallStaticByteMethod */,
  NOT_IMPL /* CallStaticByteMethodV */,
  NOT_IMPL /* CallStaticByteMethodA */,
  NOT_IMPL /* CallStaticCharMethod */,
  NOT_IMPL /* CallStaticCharMethodV */,
  NOT_IMPL /* CallStaticCharMethodA */,
  NOT_IMPL /* CallStaticShortMethod */,
  NOT_IMPL /* CallStaticShortMethodV */,
  NOT_IMPL /* CallStaticShortMethodA */,
  NOT_IMPL /* CallStaticIntMethod */,
  NOT_IMPL /* CallStaticIntMethodV */,
  NOT_IMPL /* CallStaticIntMethodA */,
  NOT_IMPL /* CallStaticLongMethod */,
  NOT_IMPL /* CallStaticLongMethodV */,
  NOT_IMPL /* CallStaticLongMethodA */,
  NOT_IMPL /* CallStaticFloatMethod */,
  NOT_IMPL /* CallStaticFloatMethodV */,
  NOT_IMPL /* CallStaticFloatMethodA */,
  NOT_IMPL /* CallStaticDoubleMethod */,
  NOT_IMPL /* CallStaticDoubleMethodV */,
  NOT_IMPL /* CallStaticDoubleMethodA */,
  NOT_IMPL /* CallStaticVoidMethod */,
  NOT_IMPL /* CallStaticVoidMethodV */,
  NOT_IMPL /* CallStaticVoidMethodA */,
  NOT_IMPL /* GetStaticFieldID */,
  NOT_IMPL /* GetStaticObjectField */,
  NOT_IMPL /* GetStaticBooleanField */,
  NOT_IMPL /* GetStaticByteField */,
  NOT_IMPL /* GetStaticCharField */,
  NOT_IMPL /* GetStaticShortField */,
  NOT_IMPL /* GetStaticIntField */,
  NOT_IMPL /* GetStaticLongField */,
  NOT_IMPL /* GetStaticFloatField */,
  NOT_IMPL /* GetStaticDoubleField */,
  NOT_IMPL /* SetStaticObjectField */,
  NOT_IMPL /* SetStaticBooleanField */,
  NOT_IMPL /* SetStaticByteField */,
  NOT_IMPL /* SetStaticCharField */,
  NOT_IMPL /* SetStaticShortField */,
  NOT_IMPL /* SetStaticIntField */,
  NOT_IMPL /* SetStaticLongField */,
  NOT_IMPL /* SetStaticFloatField */,
  NOT_IMPL /* SetStaticDoubleField */,
  NOT_IMPL /* NewString */,
  _Jv_JNI_GetStringLength,
  NOT_IMPL /* GetStringChars */,
  NOT_IMPL /* ReleaseStringChars */,
  NOT_IMPL /* NewStringUTF */,
  NOT_IMPL /* GetStringUTFLength */,
  NOT_IMPL /* GetStringUTFChars */,
  NOT_IMPL /* ReleaseStringUTFChars */,
  NOT_IMPL /* GetArrayLength */,
  NOT_IMPL /* NewObjectArray */,
  NOT_IMPL /* GetObjectArrayElement */,
  NOT_IMPL /* SetObjectArrayElement */,
  NOT_IMPL /* NewBooleanArray */,
  NOT_IMPL /* NewByteArray */,
  NOT_IMPL /* NewCharArray */,
  NOT_IMPL /* NewShortArray */,
  NOT_IMPL /* NewIntArray */,
  NOT_IMPL /* NewLongArray */,
  NOT_IMPL /* NewFloatArray */,
  NOT_IMPL /* NewDoubleArray */,
  NOT_IMPL /* GetBooleanArrayElements */,
  NOT_IMPL /* GetByteArrayElements */,
  NOT_IMPL /* GetCharArrayElements */,
  NOT_IMPL /* GetShortArrayElements */,
  NOT_IMPL /* GetIntArrayElements */,
  NOT_IMPL /* GetLongArrayElements */,
  NOT_IMPL /* GetFloatArrayElements */,
  NOT_IMPL /* GetDoubleArrayElements */,
  NOT_IMPL /* ReleaseBooleanArrayElements */,
  NOT_IMPL /* ReleaseByteArrayElements */,
  NOT_IMPL /* ReleaseCharArrayElements */,
  NOT_IMPL /* ReleaseShortArrayElements */,
  NOT_IMPL /* ReleaseIntArrayElements */,
  NOT_IMPL /* ReleaseLongArrayElements */,
  NOT_IMPL /* ReleaseFloatArrayElements */,
  NOT_IMPL /* ReleaseDoubleArrayElements */,
  NOT_IMPL /* GetBooleanArrayRegion */,
  NOT_IMPL /* GetByteArrayRegion */,
  NOT_IMPL /* GetCharArrayRegion */,
  NOT_IMPL /* GetShortArrayRegion */,
  NOT_IMPL /* GetIntArrayRegion */,
  NOT_IMPL /* GetLongArrayRegion */,
  NOT_IMPL /* GetFloatArrayRegion */,
  NOT_IMPL /* GetDoubleArrayRegion */,
  NOT_IMPL /* SetBooleanArrayRegion */,
  NOT_IMPL /* SetByteArrayRegion */,
  NOT_IMPL /* SetCharArrayRegion */,
  NOT_IMPL /* SetShortArrayRegion */,
  NOT_IMPL /* SetIntArrayRegion */,
  NOT_IMPL /* SetLongArrayRegion */,
  NOT_IMPL /* SetFloatArrayRegion */,
  NOT_IMPL /* SetDoubleArrayRegion */,
  NOT_IMPL /* RegisterNatives */,
  NOT_IMPL /* UnregisterNatives */,
  NOT_IMPL /* MonitorEnter */,
  NOT_IMPL /* MonitorExit */,
  NOT_IMPL /* GetJavaVM */,
};