| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef _JNI_TYPES_H_ |
| #define _JNI_TYPES_H_ |
| |
| /** |
| * @file |
| * Types used in JNI and OPEN interfaces. |
| * |
| * For the most part JNI types are defined by Sun specification on |
| * Java Native Interface (JNI). See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html">specification</a> |
| * for details. |
| */ |
| |
| /* The following documentation is both for windows and linux, so it |
| * resides outside of ifdef-endif block */ |
| /** |
| * @def JNIEXPORT |
| * Function attribute to make native JNI function exportable |
| */ |
| /** |
| * @def JNIIMPORT |
| * Function attribute used when building VM from sources |
| */ |
| /** |
| * @def JNICALL |
| * Function attribute to specify calling conventions that should be |
| * used for native JNI functions |
| */ |
| /** |
| * @typedef jlong |
| * Signed 64-bit long type equivalent to Java "long" type |
| */ |
| #if defined (_WIN32) || defined (__WIN32__) || defined (WIN32) |
| |
| #define JNIEXPORT __declspec(dllexport) |
| #define JNIIMPORT __declspec(dllimport) |
| #define JNICALL __stdcall |
| |
| typedef signed __int64 jlong; |
| |
| #else |
| |
| #define JNIEXPORT |
| #define JNIIMPORT |
| #define JNICALL |
| |
| typedef signed long long jlong; |
| |
| #endif |
| |
| /* |
| * Primitive types |
| */ |
| /** |
| * Unsigned 8-bit primitive boolean type equivalent to Java "boolean" |
| * type |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp428">specification</a> |
| * for details. |
| */ |
| typedef unsigned char jboolean; |
| /** |
| * Signed 8-bit primitive byte type equivalent to Java "byte" type |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp428">specification</a> |
| * for details. |
| */ |
| typedef signed char jbyte; |
| /** |
| * Unsigned 16-bit primitive char type equivalent to Java "char" type |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp428">specification</a> |
| * for details. |
| */ |
| typedef unsigned short jchar; |
| /** |
| * Signed 16-bit primitive short type equivalent to Java "short" type |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp428">specification</a> |
| * for details. |
| */ |
| typedef signed short jshort; |
| /** |
| * Signed 32-bit primitive integer type equivalent to Java "int" type |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp428">specification</a> |
| * for details. |
| */ |
| typedef signed int jint; |
| /** |
| * Signed 32-bit primitive floating point type equivalent to Java |
| * "float" type |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp428">specification</a> |
| * for details. |
| */ |
| typedef float jfloat; |
| /** |
| * Signed 64-bit primitive floating point type equivalent to Java |
| * "double" type |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp428">specification</a> |
| * for details. |
| */ |
| typedef double jdouble; |
| /** |
| * Signed 32-bit primitive integer type used to describe sizes |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp428">specification</a> |
| * for details. |
| */ |
| typedef jint jsize; |
| |
| /* |
| * Java types |
| */ |
| struct _jobject; |
| /** |
| * Reference type which describes a general Java object in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef struct _jobject* jobject; |
| /** |
| * Reference type which describes a java.lang.Class instance object in |
| * native function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jobject jclass; |
| /** |
| * Reference type which describes a java.lang.String instance object |
| * in native function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jobject jstring; |
| /** |
| * Reference type which describes a generic array instance object in |
| * native function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jobject jarray; |
| /** |
| * Reference type which describes an array of java.lang.Object |
| * instances in native function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jobjectArray; |
| /** |
| * Reference type which describes an array of booleans in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jbooleanArray; |
| /** |
| * Reference type which describes an array of bytes type in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jbyteArray; |
| /** |
| * Reference type which describes an array of chars type in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jcharArray; |
| /** |
| * Reference type which describes an array of shorts type in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jshortArray; |
| /** |
| * Reference type which describes an array of ints type in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jintArray; |
| /** |
| * Reference type which describes an array of longs type in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jlongArray; |
| /** |
| * Reference type which describes an array of floats type in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jfloatArray; |
| /** |
| * Reference type which describes an array of doubles type in native |
| * function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jarray jdoubleArray; |
| /** |
| * Reference type which describes a java.lang.Throwable instance |
| * object in native function |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/types.html#wp15954">specification</a> |
| * for details. |
| */ |
| typedef jobject jthrowable; |
| /** |
| * Reference type which describes a weak reference to a general object |
| * |
| * This type is the same as #jobject but the reference held in it |
| * is weak, so if the referred object is weakly reacheable, it may be |
| * garbage collected to VM. |
| */ |
| typedef jobject jweak; |
| |
| /** |
| * This union used to pass arguments to native functions when <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/functions.html#wp4256">Call<type>MethodA</a> |
| * and <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/functions.html#wp4796">CallStatic<type>MethodA</a> |
| * functions are used |
| * |
| * It consists of all possible primitive Java types plus #jobject, so |
| * it is possible to pass any kind of argument type through it. |
| */ |
| typedef union jvalue { |
| jboolean z; |
| jbyte b; |
| jchar c; |
| jshort s; |
| jint i; |
| jlong j; |
| jfloat f; |
| jdouble d; |
| jobject l; |
| } jvalue; |
| |
| /** |
| * Type which describes an identfier of a field inside of class |
| * |
| * This type together with a #jclass reference uniquily identifies a |
| * field inside of the class described by #jclass. |
| */ |
| typedef struct _jfieldID* jfieldID; |
| |
| /** |
| * Type which describes an identfier of a method inside of class |
| * |
| * This type together with a #jclass reference uniquily identifies a |
| * method inside of the class described by #jclass. |
| */ |
| typedef struct _jmethodID* jmethodID; |
| |
| /* |
| * Constants |
| */ |
| |
| /* |
| * Boolean constants |
| */ |
| /** |
| * Constant which defines boolean truth in native Java functions. It |
| * is equivalent to Java constant "true" |
| */ |
| #define JNI_FALSE 0 |
| /** |
| * Constant which defines boolean false in native Java functions. It |
| * is equivalent to Java constant "false" |
| */ |
| #define JNI_TRUE 1 |
| |
| /* |
| * Return values |
| */ |
| /** |
| * Constant which describes success when returned by JNI API functions |
| */ |
| #define JNI_OK 0 |
| /** |
| * Constant which describes an error when returned by JNI API |
| * functions |
| */ |
| #define JNI_ERR (-1) |
| /** |
| * Constant which describes a deatached thread condition when returned |
| * by JNI API functions |
| */ |
| #define JNI_EDETACHED (-2) |
| /** |
| * Constant which describes wrong JNI interface verions when returned |
| * by JNI API functions |
| */ |
| #define JNI_EVERSION (-3) |
| /** |
| * Constant which describes out of memory condition when returned by |
| * JNI API functions |
| */ |
| #define JNI_ENOMEM (-4) |
| /** |
| * Constant which means that a limited resource already exists when |
| * returned by JNI API functions |
| */ |
| #define JNI_EEXIST (-5) |
| /** |
| * Constant which means that an illegal argument value was passed to a |
| * JNI function |
| */ |
| #define JNI_EINVAL (-6) |
| |
| /* |
| * Release modes for working with arrays. |
| */ |
| /** |
| * Constant which means that an array region should be committed into |
| * memory. Used in Release<primitive type>ArrayElements functions |
| */ |
| #define JNI_COMMIT 1 |
| /** |
| * Constant which means that an array region should be discarded. Used |
| * in Release<primitive type>ArrayElements functions |
| */ |
| #define JNI_ABORT 2 |
| |
| /* |
| * Used as a generic pointer to a function. |
| */ |
| /** |
| * Structure which describes a generic pointer to a native |
| * function. Used in <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/functions.html#wp17734">RegisterNatives</a> |
| * function. |
| */ |
| typedef struct { |
| char *name; |
| char *signature; |
| void *fnPtr; |
| } JNINativeMethod; |
| |
| /* |
| * JNI Native Method Interface |
| */ |
| struct JNINativeInterface_; |
| struct JNIEnv_External; |
| |
| #ifdef __cplusplus |
| /** |
| * JNI API interface table type for usage in C++ |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/design.html#wp16696">specification</a> |
| * for details. */ |
| typedef JNIEnv_External JNIEnv; |
| #else |
| /** |
| * JNI API interface table type for usage in C |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/design.html#wp16696">specification</a> |
| * for details. */ |
| typedef const struct JNINativeInterface_ *JNIEnv; |
| #endif |
| |
| /* |
| * JNI Invocation Interface |
| */ |
| struct JNIInvokeInterface_; |
| struct JavaVM_External; |
| |
| #ifdef __cplusplus |
| /** |
| * Java VM interface table type for usage in C++ |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/invocation.html#invocation_api_functions">specification</a> |
| * for details |
| */ |
| typedef JavaVM_External JavaVM; |
| #else |
| /** |
| * Java VM interface table type for usage in C |
| * |
| * See <a |
| * href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/invocation.html#invocation_api_functions">specification</a> |
| * for details |
| */ |
| typedef const struct JNIInvokeInterface_ *JavaVM; |
| #endif |
| |
| #endif /* _JNI_TYPES_H_ */ |