Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/third_party/jni/jni.h
7085 views
1
/*
2
* Copyright (C) 2006 The Android Open Source Project
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
/*
18
* JNI specification, as defined by Sun:
19
* http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html
20
*
21
* Everything here is expected to be VM-neutral.
22
*/
23
#ifndef _JNI_H
24
#define _JNI_H
25
26
#include <stdarg.h>
27
28
/*
29
* Primitive types that match up with Java equivalents.
30
*/
31
#ifdef HAVE_INTTYPES_H
32
# include <inttypes.h> /* C99 */
33
typedef uint8_t jboolean; /* unsigned 8 bits */
34
typedef int8_t jbyte; /* signed 8 bits */
35
typedef uint16_t jchar; /* unsigned 16 bits */
36
typedef int16_t jshort; /* signed 16 bits */
37
typedef int32_t jint; /* signed 32 bits */
38
typedef int64_t jlong; /* signed 64 bits */
39
typedef float jfloat; /* 32-bit IEEE 754 */
40
typedef double jdouble; /* 64-bit IEEE 754 */
41
#else
42
typedef unsigned char jboolean; /* unsigned 8 bits */
43
typedef signed char jbyte; /* signed 8 bits */
44
typedef unsigned short jchar; /* unsigned 16 bits */
45
typedef short jshort; /* signed 16 bits */
46
typedef int jint; /* signed 32 bits */
47
typedef long long jlong; /* signed 64 bits */
48
typedef float jfloat; /* 32-bit IEEE 754 */
49
typedef double jdouble; /* 64-bit IEEE 754 */
50
#endif
51
52
/* "cardinal indices and sizes" */
53
typedef jint jsize;
54
55
#ifdef __cplusplus
56
/*
57
* Reference types, in C++
58
*/
59
class _jobject {};
60
class _jclass : public _jobject {};
61
class _jstring : public _jobject {};
62
class _jarray : public _jobject {};
63
class _jobjectArray : public _jarray {};
64
class _jbooleanArray : public _jarray {};
65
class _jbyteArray : public _jarray {};
66
class _jcharArray : public _jarray {};
67
class _jshortArray : public _jarray {};
68
class _jintArray : public _jarray {};
69
class _jlongArray : public _jarray {};
70
class _jfloatArray : public _jarray {};
71
class _jdoubleArray : public _jarray {};
72
class _jthrowable : public _jobject {};
73
74
typedef _jobject* jobject;
75
typedef _jclass* jclass;
76
typedef _jstring* jstring;
77
typedef _jarray* jarray;
78
typedef _jobjectArray* jobjectArray;
79
typedef _jbooleanArray* jbooleanArray;
80
typedef _jbyteArray* jbyteArray;
81
typedef _jcharArray* jcharArray;
82
typedef _jshortArray* jshortArray;
83
typedef _jintArray* jintArray;
84
typedef _jlongArray* jlongArray;
85
typedef _jfloatArray* jfloatArray;
86
typedef _jdoubleArray* jdoubleArray;
87
typedef _jthrowable* jthrowable;
88
typedef _jobject* jweak;
89
90
91
#else /* not __cplusplus */
92
93
/*
94
* Reference types, in C.
95
*/
96
typedef void* jobject;
97
typedef jobject jclass;
98
typedef jobject jstring;
99
typedef jobject jarray;
100
typedef jarray jobjectArray;
101
typedef jarray jbooleanArray;
102
typedef jarray jbyteArray;
103
typedef jarray jcharArray;
104
typedef jarray jshortArray;
105
typedef jarray jintArray;
106
typedef jarray jlongArray;
107
typedef jarray jfloatArray;
108
typedef jarray jdoubleArray;
109
typedef jobject jthrowable;
110
typedef jobject jweak;
111
112
#endif /* not __cplusplus */
113
114
struct _jfieldID; /* opaque structure */
115
typedef struct _jfieldID* jfieldID; /* field IDs */
116
117
struct _jmethodID; /* opaque structure */
118
typedef struct _jmethodID* jmethodID; /* method IDs */
119
120
struct JNIInvokeInterface;
121
122
typedef union jvalue {
123
jboolean z;
124
jbyte b;
125
jchar c;
126
jshort s;
127
jint i;
128
jlong j;
129
jfloat f;
130
jdouble d;
131
jobject l;
132
} jvalue;
133
134
typedef enum jobjectRefType {
135
JNIInvalidRefType = 0,
136
JNILocalRefType = 1,
137
JNIGlobalRefType = 2,
138
JNIWeakGlobalRefType = 3
139
} jobjectRefType;
140
141
typedef struct {
142
const char* name;
143
const char* signature;
144
void* fnPtr;
145
} JNINativeMethod;
146
147
struct _JNIEnv;
148
struct _JavaVM;
149
typedef const struct JNINativeInterface* C_JNIEnv;
150
151
#if defined(__cplusplus)
152
typedef _JNIEnv JNIEnv;
153
typedef _JavaVM JavaVM;
154
#else
155
typedef const struct JNINativeInterface* JNIEnv;
156
typedef const struct JNIInvokeInterface* JavaVM;
157
#endif
158
159
/*
160
* Table of interface function pointers.
161
*/
162
struct JNINativeInterface {
163
void* reserved0;
164
void* reserved1;
165
void* reserved2;
166
void* reserved3;
167
168
jint (*GetVersion)(JNIEnv *);
169
170
jclass (*DefineClass)(JNIEnv*, const char*, jobject, const jbyte*,
171
jsize);
172
jclass (*FindClass)(JNIEnv*, const char*);
173
174
jmethodID (*FromReflectedMethod)(JNIEnv*, jobject);
175
jfieldID (*FromReflectedField)(JNIEnv*, jobject);
176
/* spec doesn't show jboolean parameter */
177
jobject (*ToReflectedMethod)(JNIEnv*, jclass, jmethodID, jboolean);
178
179
jclass (*GetSuperclass)(JNIEnv*, jclass);
180
jboolean (*IsAssignableFrom)(JNIEnv*, jclass, jclass);
181
182
/* spec doesn't show jboolean parameter */
183
jobject (*ToReflectedField)(JNIEnv*, jclass, jfieldID, jboolean);
184
185
jint (*Throw)(JNIEnv*, jthrowable);
186
jint (*ThrowNew)(JNIEnv *, jclass, const char *);
187
jthrowable (*ExceptionOccurred)(JNIEnv*);
188
void (*ExceptionDescribe)(JNIEnv*);
189
void (*ExceptionClear)(JNIEnv*);
190
void (*FatalError)(JNIEnv*, const char*);
191
192
jint (*PushLocalFrame)(JNIEnv*, jint);
193
jobject (*PopLocalFrame)(JNIEnv*, jobject);
194
195
jobject (*NewGlobalRef)(JNIEnv*, jobject);
196
void (*DeleteGlobalRef)(JNIEnv*, jobject);
197
void (*DeleteLocalRef)(JNIEnv*, jobject);
198
jboolean (*IsSameObject)(JNIEnv*, jobject, jobject);
199
200
jobject (*NewLocalRef)(JNIEnv*, jobject);
201
jint (*EnsureLocalCapacity)(JNIEnv*, jint);
202
203
jobject (*AllocObject)(JNIEnv*, jclass);
204
jobject (*NewObject)(JNIEnv*, jclass, jmethodID, ...);
205
jobject (*NewObjectV)(JNIEnv*, jclass, jmethodID, va_list);
206
jobject (*NewObjectA)(JNIEnv*, jclass, jmethodID, jvalue*);
207
208
jclass (*GetObjectClass)(JNIEnv*, jobject);
209
jboolean (*IsInstanceOf)(JNIEnv*, jobject, jclass);
210
jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
211
212
jobject (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);
213
jobject (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);
214
jobject (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
215
jboolean (*CallBooleanMethod)(JNIEnv*, jobject, jmethodID, ...);
216
jboolean (*CallBooleanMethodV)(JNIEnv*, jobject, jmethodID, va_list);
217
jboolean (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
218
jbyte (*CallByteMethod)(JNIEnv*, jobject, jmethodID, ...);
219
jbyte (*CallByteMethodV)(JNIEnv*, jobject, jmethodID, va_list);
220
jbyte (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
221
jchar (*CallCharMethod)(JNIEnv*, jobject, jmethodID, ...);
222
jchar (*CallCharMethodV)(JNIEnv*, jobject, jmethodID, va_list);
223
jchar (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
224
jshort (*CallShortMethod)(JNIEnv*, jobject, jmethodID, ...);
225
jshort (*CallShortMethodV)(JNIEnv*, jobject, jmethodID, va_list);
226
jshort (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
227
jint (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);
228
jint (*CallIntMethodV)(JNIEnv*, jobject, jmethodID, va_list);
229
jint (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
230
jlong (*CallLongMethod)(JNIEnv*, jobject, jmethodID, ...);
231
jlong (*CallLongMethodV)(JNIEnv*, jobject, jmethodID, va_list);
232
jlong (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
233
jfloat (*CallFloatMethod)(JNIEnv*, jobject, jmethodID, ...);
234
jfloat (*CallFloatMethodV)(JNIEnv*, jobject, jmethodID, va_list);
235
jfloat (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
236
jdouble (*CallDoubleMethod)(JNIEnv*, jobject, jmethodID, ...);
237
jdouble (*CallDoubleMethodV)(JNIEnv*, jobject, jmethodID, va_list);
238
jdouble (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
239
void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
240
void (*CallVoidMethodV)(JNIEnv*, jobject, jmethodID, va_list);
241
void (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
242
243
jobject (*CallNonvirtualObjectMethod)(JNIEnv*, jobject, jclass,
244
jmethodID, ...);
245
jobject (*CallNonvirtualObjectMethodV)(JNIEnv*, jobject, jclass,
246
jmethodID, va_list);
247
jobject (*CallNonvirtualObjectMethodA)(JNIEnv*, jobject, jclass,
248
jmethodID, jvalue*);
249
jboolean (*CallNonvirtualBooleanMethod)(JNIEnv*, jobject, jclass,
250
jmethodID, ...);
251
jboolean (*CallNonvirtualBooleanMethodV)(JNIEnv*, jobject, jclass,
252
jmethodID, va_list);
253
jboolean (*CallNonvirtualBooleanMethodA)(JNIEnv*, jobject, jclass,
254
jmethodID, jvalue*);
255
jbyte (*CallNonvirtualByteMethod)(JNIEnv*, jobject, jclass,
256
jmethodID, ...);
257
jbyte (*CallNonvirtualByteMethodV)(JNIEnv*, jobject, jclass,
258
jmethodID, va_list);
259
jbyte (*CallNonvirtualByteMethodA)(JNIEnv*, jobject, jclass,
260
jmethodID, jvalue*);
261
jchar (*CallNonvirtualCharMethod)(JNIEnv*, jobject, jclass,
262
jmethodID, ...);
263
jchar (*CallNonvirtualCharMethodV)(JNIEnv*, jobject, jclass,
264
jmethodID, va_list);
265
jchar (*CallNonvirtualCharMethodA)(JNIEnv*, jobject, jclass,
266
jmethodID, jvalue*);
267
jshort (*CallNonvirtualShortMethod)(JNIEnv*, jobject, jclass,
268
jmethodID, ...);
269
jshort (*CallNonvirtualShortMethodV)(JNIEnv*, jobject, jclass,
270
jmethodID, va_list);
271
jshort (*CallNonvirtualShortMethodA)(JNIEnv*, jobject, jclass,
272
jmethodID, jvalue*);
273
jint (*CallNonvirtualIntMethod)(JNIEnv*, jobject, jclass,
274
jmethodID, ...);
275
jint (*CallNonvirtualIntMethodV)(JNIEnv*, jobject, jclass,
276
jmethodID, va_list);
277
jint (*CallNonvirtualIntMethodA)(JNIEnv*, jobject, jclass,
278
jmethodID, jvalue*);
279
jlong (*CallNonvirtualLongMethod)(JNIEnv*, jobject, jclass,
280
jmethodID, ...);
281
jlong (*CallNonvirtualLongMethodV)(JNIEnv*, jobject, jclass,
282
jmethodID, va_list);
283
jlong (*CallNonvirtualLongMethodA)(JNIEnv*, jobject, jclass,
284
jmethodID, jvalue*);
285
jfloat (*CallNonvirtualFloatMethod)(JNIEnv*, jobject, jclass,
286
jmethodID, ...);
287
jfloat (*CallNonvirtualFloatMethodV)(JNIEnv*, jobject, jclass,
288
jmethodID, va_list);
289
jfloat (*CallNonvirtualFloatMethodA)(JNIEnv*, jobject, jclass,
290
jmethodID, jvalue*);
291
jdouble (*CallNonvirtualDoubleMethod)(JNIEnv*, jobject, jclass,
292
jmethodID, ...);
293
jdouble (*CallNonvirtualDoubleMethodV)(JNIEnv*, jobject, jclass,
294
jmethodID, va_list);
295
jdouble (*CallNonvirtualDoubleMethodA)(JNIEnv*, jobject, jclass,
296
jmethodID, jvalue*);
297
void (*CallNonvirtualVoidMethod)(JNIEnv*, jobject, jclass,
298
jmethodID, ...);
299
void (*CallNonvirtualVoidMethodV)(JNIEnv*, jobject, jclass,
300
jmethodID, va_list);
301
void (*CallNonvirtualVoidMethodA)(JNIEnv*, jobject, jclass,
302
jmethodID, jvalue*);
303
304
jfieldID (*GetFieldID)(JNIEnv*, jclass, const char*, const char*);
305
306
jobject (*GetObjectField)(JNIEnv*, jobject, jfieldID);
307
jboolean (*GetBooleanField)(JNIEnv*, jobject, jfieldID);
308
jbyte (*GetByteField)(JNIEnv*, jobject, jfieldID);
309
jchar (*GetCharField)(JNIEnv*, jobject, jfieldID);
310
jshort (*GetShortField)(JNIEnv*, jobject, jfieldID);
311
jint (*GetIntField)(JNIEnv*, jobject, jfieldID);
312
jlong (*GetLongField)(JNIEnv*, jobject, jfieldID);
313
jfloat (*GetFloatField)(JNIEnv*, jobject, jfieldID);
314
jdouble (*GetDoubleField)(JNIEnv*, jobject, jfieldID);
315
316
void (*SetObjectField)(JNIEnv*, jobject, jfieldID, jobject);
317
void (*SetBooleanField)(JNIEnv*, jobject, jfieldID, jboolean);
318
void (*SetByteField)(JNIEnv*, jobject, jfieldID, jbyte);
319
void (*SetCharField)(JNIEnv*, jobject, jfieldID, jchar);
320
void (*SetShortField)(JNIEnv*, jobject, jfieldID, jshort);
321
void (*SetIntField)(JNIEnv*, jobject, jfieldID, jint);
322
void (*SetLongField)(JNIEnv*, jobject, jfieldID, jlong);
323
void (*SetFloatField)(JNIEnv*, jobject, jfieldID, jfloat);
324
void (*SetDoubleField)(JNIEnv*, jobject, jfieldID, jdouble);
325
326
jmethodID (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);
327
328
jobject (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);
329
jobject (*CallStaticObjectMethodV)(JNIEnv*, jclass, jmethodID, va_list);
330
jobject (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
331
jboolean (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...);
332
jboolean (*CallStaticBooleanMethodV)(JNIEnv*, jclass, jmethodID,
333
va_list);
334
jboolean (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID,
335
jvalue*);
336
jbyte (*CallStaticByteMethod)(JNIEnv*, jclass, jmethodID, ...);
337
jbyte (*CallStaticByteMethodV)(JNIEnv*, jclass, jmethodID, va_list);
338
jbyte (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
339
jchar (*CallStaticCharMethod)(JNIEnv*, jclass, jmethodID, ...);
340
jchar (*CallStaticCharMethodV)(JNIEnv*, jclass, jmethodID, va_list);
341
jchar (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
342
jshort (*CallStaticShortMethod)(JNIEnv*, jclass, jmethodID, ...);
343
jshort (*CallStaticShortMethodV)(JNIEnv*, jclass, jmethodID, va_list);
344
jshort (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
345
jint (*CallStaticIntMethod)(JNIEnv*, jclass, jmethodID, ...);
346
jint (*CallStaticIntMethodV)(JNIEnv*, jclass, jmethodID, va_list);
347
jint (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
348
jlong (*CallStaticLongMethod)(JNIEnv*, jclass, jmethodID, ...);
349
jlong (*CallStaticLongMethodV)(JNIEnv*, jclass, jmethodID, va_list);
350
jlong (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
351
jfloat (*CallStaticFloatMethod)(JNIEnv*, jclass, jmethodID, ...);
352
jfloat (*CallStaticFloatMethodV)(JNIEnv*, jclass, jmethodID, va_list);
353
jfloat (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
354
jdouble (*CallStaticDoubleMethod)(JNIEnv*, jclass, jmethodID, ...);
355
jdouble (*CallStaticDoubleMethodV)(JNIEnv*, jclass, jmethodID, va_list);
356
jdouble (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
357
void (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...);
358
void (*CallStaticVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list);
359
void (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
360
361
jfieldID (*GetStaticFieldID)(JNIEnv*, jclass, const char*,
362
const char*);
363
364
jobject (*GetStaticObjectField)(JNIEnv*, jclass, jfieldID);
365
jboolean (*GetStaticBooleanField)(JNIEnv*, jclass, jfieldID);
366
jbyte (*GetStaticByteField)(JNIEnv*, jclass, jfieldID);
367
jchar (*GetStaticCharField)(JNIEnv*, jclass, jfieldID);
368
jshort (*GetStaticShortField)(JNIEnv*, jclass, jfieldID);
369
jint (*GetStaticIntField)(JNIEnv*, jclass, jfieldID);
370
jlong (*GetStaticLongField)(JNIEnv*, jclass, jfieldID);
371
jfloat (*GetStaticFloatField)(JNIEnv*, jclass, jfieldID);
372
jdouble (*GetStaticDoubleField)(JNIEnv*, jclass, jfieldID);
373
374
void (*SetStaticObjectField)(JNIEnv*, jclass, jfieldID, jobject);
375
void (*SetStaticBooleanField)(JNIEnv*, jclass, jfieldID, jboolean);
376
void (*SetStaticByteField)(JNIEnv*, jclass, jfieldID, jbyte);
377
void (*SetStaticCharField)(JNIEnv*, jclass, jfieldID, jchar);
378
void (*SetStaticShortField)(JNIEnv*, jclass, jfieldID, jshort);
379
void (*SetStaticIntField)(JNIEnv*, jclass, jfieldID, jint);
380
void (*SetStaticLongField)(JNIEnv*, jclass, jfieldID, jlong);
381
void (*SetStaticFloatField)(JNIEnv*, jclass, jfieldID, jfloat);
382
void (*SetStaticDoubleField)(JNIEnv*, jclass, jfieldID, jdouble);
383
384
jstring (*NewString)(JNIEnv*, const jchar*, jsize);
385
jsize (*GetStringLength)(JNIEnv*, jstring);
386
const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);
387
void (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);
388
jstring (*NewStringUTF)(JNIEnv*, const char*);
389
jsize (*GetStringUTFLength)(JNIEnv*, jstring);
390
/* JNI spec says this returns const jbyte*, but that's inconsistent */
391
const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);
392
void (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*);
393
jsize (*GetArrayLength)(JNIEnv*, jarray);
394
jobjectArray (*NewObjectArray)(JNIEnv*, jsize, jclass, jobject);
395
jobject (*GetObjectArrayElement)(JNIEnv*, jobjectArray, jsize);
396
void (*SetObjectArrayElement)(JNIEnv*, jobjectArray, jsize, jobject);
397
398
jbooleanArray (*NewBooleanArray)(JNIEnv*, jsize);
399
jbyteArray (*NewByteArray)(JNIEnv*, jsize);
400
jcharArray (*NewCharArray)(JNIEnv*, jsize);
401
jshortArray (*NewShortArray)(JNIEnv*, jsize);
402
jintArray (*NewIntArray)(JNIEnv*, jsize);
403
jlongArray (*NewLongArray)(JNIEnv*, jsize);
404
jfloatArray (*NewFloatArray)(JNIEnv*, jsize);
405
jdoubleArray (*NewDoubleArray)(JNIEnv*, jsize);
406
407
jboolean* (*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*);
408
jbyte* (*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*);
409
jchar* (*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*);
410
jshort* (*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*);
411
jint* (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);
412
jlong* (*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*);
413
jfloat* (*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*);
414
jdouble* (*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*);
415
416
void (*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray,
417
jboolean*, jint);
418
void (*ReleaseByteArrayElements)(JNIEnv*, jbyteArray,
419
jbyte*, jint);
420
void (*ReleaseCharArrayElements)(JNIEnv*, jcharArray,
421
jchar*, jint);
422
void (*ReleaseShortArrayElements)(JNIEnv*, jshortArray,
423
jshort*, jint);
424
void (*ReleaseIntArrayElements)(JNIEnv*, jintArray,
425
jint*, jint);
426
void (*ReleaseLongArrayElements)(JNIEnv*, jlongArray,
427
jlong*, jint);
428
void (*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray,
429
jfloat*, jint);
430
void (*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray,
431
jdouble*, jint);
432
433
void (*GetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
434
jsize, jsize, jboolean*);
435
void (*GetByteArrayRegion)(JNIEnv*, jbyteArray,
436
jsize, jsize, jbyte*);
437
void (*GetCharArrayRegion)(JNIEnv*, jcharArray,
438
jsize, jsize, jchar*);
439
void (*GetShortArrayRegion)(JNIEnv*, jshortArray,
440
jsize, jsize, jshort*);
441
void (*GetIntArrayRegion)(JNIEnv*, jintArray,
442
jsize, jsize, jint*);
443
void (*GetLongArrayRegion)(JNIEnv*, jlongArray,
444
jsize, jsize, jlong*);
445
void (*GetFloatArrayRegion)(JNIEnv*, jfloatArray,
446
jsize, jsize, jfloat*);
447
void (*GetDoubleArrayRegion)(JNIEnv*, jdoubleArray,
448
jsize, jsize, jdouble*);
449
450
/* spec shows these without const; some jni.h do, some don't */
451
void (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
452
jsize, jsize, const jboolean*);
453
void (*SetByteArrayRegion)(JNIEnv*, jbyteArray,
454
jsize, jsize, const jbyte*);
455
void (*SetCharArrayRegion)(JNIEnv*, jcharArray,
456
jsize, jsize, const jchar*);
457
void (*SetShortArrayRegion)(JNIEnv*, jshortArray,
458
jsize, jsize, const jshort*);
459
void (*SetIntArrayRegion)(JNIEnv*, jintArray,
460
jsize, jsize, const jint*);
461
void (*SetLongArrayRegion)(JNIEnv*, jlongArray,
462
jsize, jsize, const jlong*);
463
void (*SetFloatArrayRegion)(JNIEnv*, jfloatArray,
464
jsize, jsize, const jfloat*);
465
void (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray,
466
jsize, jsize, const jdouble*);
467
468
jint (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*,
469
jint);
470
jint (*UnregisterNatives)(JNIEnv*, jclass);
471
jint (*MonitorEnter)(JNIEnv*, jobject);
472
jint (*MonitorExit)(JNIEnv*, jobject);
473
jint (*GetJavaVM)(JNIEnv*, JavaVM**);
474
475
void (*GetStringRegion)(JNIEnv*, jstring, jsize, jsize, jchar*);
476
void (*GetStringUTFRegion)(JNIEnv*, jstring, jsize, jsize, char*);
477
478
void* (*GetPrimitiveArrayCritical)(JNIEnv*, jarray, jboolean*);
479
void (*ReleasePrimitiveArrayCritical)(JNIEnv*, jarray, void*, jint);
480
481
const jchar* (*GetStringCritical)(JNIEnv*, jstring, jboolean*);
482
void (*ReleaseStringCritical)(JNIEnv*, jstring, const jchar*);
483
484
jweak (*NewWeakGlobalRef)(JNIEnv*, jobject);
485
void (*DeleteWeakGlobalRef)(JNIEnv*, jweak);
486
487
jboolean (*ExceptionCheck)(JNIEnv*);
488
489
jobject (*NewDirectByteBuffer)(JNIEnv*, void*, jlong);
490
void* (*GetDirectBufferAddress)(JNIEnv*, jobject);
491
jlong (*GetDirectBufferCapacity)(JNIEnv*, jobject);
492
493
/* added in JNI 1.6 */
494
jobjectRefType (*GetObjectRefType)(JNIEnv*, jobject);
495
};
496
497
/*
498
* C++ object wrapper.
499
*
500
* This is usually overlaid on a C struct whose first element is a
501
* JNINativeInterface*. We rely somewhat on compiler behavior.
502
*/
503
struct _JNIEnv {
504
/* do not rename this; it does not seem to be entirely opaque */
505
const struct JNINativeInterface* functions;
506
507
#if defined(__cplusplus)
508
509
jint GetVersion()
510
{ return functions->GetVersion(this); }
511
512
jclass DefineClass(const char *name, jobject loader, const jbyte* buf,
513
jsize bufLen)
514
{ return functions->DefineClass(this, name, loader, buf, bufLen); }
515
516
jclass FindClass(const char* name)
517
{ return functions->FindClass(this, name); }
518
519
jmethodID FromReflectedMethod(jobject method)
520
{ return functions->FromReflectedMethod(this, method); }
521
522
jfieldID FromReflectedField(jobject field)
523
{ return functions->FromReflectedField(this, field); }
524
525
jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic)
526
{ return functions->ToReflectedMethod(this, cls, methodID, isStatic); }
527
528
jclass GetSuperclass(jclass clazz)
529
{ return functions->GetSuperclass(this, clazz); }
530
531
jboolean IsAssignableFrom(jclass clazz1, jclass clazz2)
532
{ return functions->IsAssignableFrom(this, clazz1, clazz2); }
533
534
jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic)
535
{ return functions->ToReflectedField(this, cls, fieldID, isStatic); }
536
537
jint Throw(jthrowable obj)
538
{ return functions->Throw(this, obj); }
539
540
jint ThrowNew(jclass clazz, const char* message)
541
{ return functions->ThrowNew(this, clazz, message); }
542
543
jthrowable ExceptionOccurred()
544
{ return functions->ExceptionOccurred(this); }
545
546
void ExceptionDescribe()
547
{ functions->ExceptionDescribe(this); }
548
549
void ExceptionClear()
550
{ functions->ExceptionClear(this); }
551
552
void FatalError(const char* msg)
553
{ functions->FatalError(this, msg); }
554
555
jint PushLocalFrame(jint capacity)
556
{ return functions->PushLocalFrame(this, capacity); }
557
558
jobject PopLocalFrame(jobject result)
559
{ return functions->PopLocalFrame(this, result); }
560
561
jobject NewGlobalRef(jobject obj)
562
{ return functions->NewGlobalRef(this, obj); }
563
564
void DeleteGlobalRef(jobject globalRef)
565
{ functions->DeleteGlobalRef(this, globalRef); }
566
567
void DeleteLocalRef(jobject localRef)
568
{ functions->DeleteLocalRef(this, localRef); }
569
570
jboolean IsSameObject(jobject ref1, jobject ref2)
571
{ return functions->IsSameObject(this, ref1, ref2); }
572
573
jobject NewLocalRef(jobject ref)
574
{ return functions->NewLocalRef(this, ref); }
575
576
jint EnsureLocalCapacity(jint capacity)
577
{ return functions->EnsureLocalCapacity(this, capacity); }
578
579
jobject AllocObject(jclass clazz)
580
{ return functions->AllocObject(this, clazz); }
581
582
jobject NewObject(jclass clazz, jmethodID methodID, ...)
583
{
584
va_list args;
585
va_start(args, methodID);
586
jobject result = functions->NewObjectV(this, clazz, methodID, args);
587
va_end(args);
588
return result;
589
}
590
591
jobject NewObjectV(jclass clazz, jmethodID methodID, va_list args)
592
{ return functions->NewObjectV(this, clazz, methodID, args); }
593
594
jobject NewObjectA(jclass clazz, jmethodID methodID, jvalue* args)
595
{ return functions->NewObjectA(this, clazz, methodID, args); }
596
597
jclass GetObjectClass(jobject obj)
598
{ return functions->GetObjectClass(this, obj); }
599
600
jboolean IsInstanceOf(jobject obj, jclass clazz)
601
{ return functions->IsInstanceOf(this, obj, clazz); }
602
603
jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
604
{ return functions->GetMethodID(this, clazz, name, sig); }
605
606
#define CALL_TYPE_METHOD(_jtype, _jname) \
607
_jtype Call##_jname##Method(jobject obj, jmethodID methodID, ...) \
608
{ \
609
_jtype result; \
610
va_list args; \
611
va_start(args, methodID); \
612
result = functions->Call##_jname##MethodV(this, obj, methodID, \
613
args); \
614
va_end(args); \
615
return result; \
616
}
617
#define CALL_TYPE_METHODV(_jtype, _jname) \
618
_jtype Call##_jname##MethodV(jobject obj, jmethodID methodID, \
619
va_list args) \
620
{ return functions->Call##_jname##MethodV(this, obj, methodID, args); }
621
#define CALL_TYPE_METHODA(_jtype, _jname) \
622
_jtype Call##_jname##MethodA(jobject obj, jmethodID methodID, \
623
jvalue* args) \
624
{ return functions->Call##_jname##MethodA(this, obj, methodID, args); }
625
626
#define CALL_TYPE(_jtype, _jname) \
627
CALL_TYPE_METHOD(_jtype, _jname) \
628
CALL_TYPE_METHODV(_jtype, _jname) \
629
CALL_TYPE_METHODA(_jtype, _jname)
630
631
CALL_TYPE(jobject, Object)
632
CALL_TYPE(jboolean, Boolean)
633
CALL_TYPE(jbyte, Byte)
634
CALL_TYPE(jchar, Char)
635
CALL_TYPE(jshort, Short)
636
CALL_TYPE(jint, Int)
637
CALL_TYPE(jlong, Long)
638
CALL_TYPE(jfloat, Float)
639
CALL_TYPE(jdouble, Double)
640
641
void CallVoidMethod(jobject obj, jmethodID methodID, ...)
642
{
643
va_list args;
644
va_start(args, methodID);
645
functions->CallVoidMethodV(this, obj, methodID, args);
646
va_end(args);
647
}
648
void CallVoidMethodV(jobject obj, jmethodID methodID, va_list args)
649
{ functions->CallVoidMethodV(this, obj, methodID, args); }
650
void CallVoidMethodA(jobject obj, jmethodID methodID, jvalue* args)
651
{ functions->CallVoidMethodA(this, obj, methodID, args); }
652
653
#define CALL_NONVIRT_TYPE_METHOD(_jtype, _jname) \
654
_jtype CallNonvirtual##_jname##Method(jobject obj, jclass clazz, \
655
jmethodID methodID, ...) \
656
{ \
657
_jtype result; \
658
va_list args; \
659
va_start(args, methodID); \
660
result = functions->CallNonvirtual##_jname##MethodV(this, obj, \
661
clazz, methodID, args); \
662
va_end(args); \
663
return result; \
664
}
665
#define CALL_NONVIRT_TYPE_METHODV(_jtype, _jname) \
666
_jtype CallNonvirtual##_jname##MethodV(jobject obj, jclass clazz, \
667
jmethodID methodID, va_list args) \
668
{ return functions->CallNonvirtual##_jname##MethodV(this, obj, clazz, \
669
methodID, args); }
670
#define CALL_NONVIRT_TYPE_METHODA(_jtype, _jname) \
671
_jtype CallNonvirtual##_jname##MethodA(jobject obj, jclass clazz, \
672
jmethodID methodID, jvalue* args) \
673
{ return functions->CallNonvirtual##_jname##MethodA(this, obj, clazz, \
674
methodID, args); }
675
676
#define CALL_NONVIRT_TYPE(_jtype, _jname) \
677
CALL_NONVIRT_TYPE_METHOD(_jtype, _jname) \
678
CALL_NONVIRT_TYPE_METHODV(_jtype, _jname) \
679
CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)
680
681
CALL_NONVIRT_TYPE(jobject, Object)
682
CALL_NONVIRT_TYPE(jboolean, Boolean)
683
CALL_NONVIRT_TYPE(jbyte, Byte)
684
CALL_NONVIRT_TYPE(jchar, Char)
685
CALL_NONVIRT_TYPE(jshort, Short)
686
CALL_NONVIRT_TYPE(jint, Int)
687
CALL_NONVIRT_TYPE(jlong, Long)
688
CALL_NONVIRT_TYPE(jfloat, Float)
689
CALL_NONVIRT_TYPE(jdouble, Double)
690
691
void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
692
jmethodID methodID, ...)
693
{
694
va_list args;
695
va_start(args, methodID);
696
functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args);
697
va_end(args);
698
}
699
void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
700
jmethodID methodID, va_list args)
701
{ functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args); }
702
void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
703
jmethodID methodID, jvalue* args)
704
{ functions->CallNonvirtualVoidMethodA(this, obj, clazz, methodID, args); }
705
706
jfieldID GetFieldID(jclass clazz, const char* name, const char* sig)
707
{ return functions->GetFieldID(this, clazz, name, sig); }
708
709
jobject GetObjectField(jobject obj, jfieldID fieldID)
710
{ return functions->GetObjectField(this, obj, fieldID); }
711
jboolean GetBooleanField(jobject obj, jfieldID fieldID)
712
{ return functions->GetBooleanField(this, obj, fieldID); }
713
jbyte GetByteField(jobject obj, jfieldID fieldID)
714
{ return functions->GetByteField(this, obj, fieldID); }
715
jchar GetCharField(jobject obj, jfieldID fieldID)
716
{ return functions->GetCharField(this, obj, fieldID); }
717
jshort GetShortField(jobject obj, jfieldID fieldID)
718
{ return functions->GetShortField(this, obj, fieldID); }
719
jint GetIntField(jobject obj, jfieldID fieldID)
720
{ return functions->GetIntField(this, obj, fieldID); }
721
jlong GetLongField(jobject obj, jfieldID fieldID)
722
{ return functions->GetLongField(this, obj, fieldID); }
723
jfloat GetFloatField(jobject obj, jfieldID fieldID)
724
{ return functions->GetFloatField(this, obj, fieldID); }
725
jdouble GetDoubleField(jobject obj, jfieldID fieldID)
726
{ return functions->GetDoubleField(this, obj, fieldID); }
727
728
void SetObjectField(jobject obj, jfieldID fieldID, jobject value)
729
{ functions->SetObjectField(this, obj, fieldID, value); }
730
void SetBooleanField(jobject obj, jfieldID fieldID, jboolean value)
731
{ functions->SetBooleanField(this, obj, fieldID, value); }
732
void SetByteField(jobject obj, jfieldID fieldID, jbyte value)
733
{ functions->SetByteField(this, obj, fieldID, value); }
734
void SetCharField(jobject obj, jfieldID fieldID, jchar value)
735
{ functions->SetCharField(this, obj, fieldID, value); }
736
void SetShortField(jobject obj, jfieldID fieldID, jshort value)
737
{ functions->SetShortField(this, obj, fieldID, value); }
738
void SetIntField(jobject obj, jfieldID fieldID, jint value)
739
{ functions->SetIntField(this, obj, fieldID, value); }
740
void SetLongField(jobject obj, jfieldID fieldID, jlong value)
741
{ functions->SetLongField(this, obj, fieldID, value); }
742
void SetFloatField(jobject obj, jfieldID fieldID, jfloat value)
743
{ functions->SetFloatField(this, obj, fieldID, value); }
744
void SetDoubleField(jobject obj, jfieldID fieldID, jdouble value)
745
{ functions->SetDoubleField(this, obj, fieldID, value); }
746
747
jmethodID GetStaticMethodID(jclass clazz, const char* name, const char* sig)
748
{ return functions->GetStaticMethodID(this, clazz, name, sig); }
749
750
#define CALL_STATIC_TYPE_METHOD(_jtype, _jname) \
751
_jtype CallStatic##_jname##Method(jclass clazz, jmethodID methodID, \
752
...) \
753
{ \
754
_jtype result; \
755
va_list args; \
756
va_start(args, methodID); \
757
result = functions->CallStatic##_jname##MethodV(this, clazz, \
758
methodID, args); \
759
va_end(args); \
760
return result; \
761
}
762
#define CALL_STATIC_TYPE_METHODV(_jtype, _jname) \
763
_jtype CallStatic##_jname##MethodV(jclass clazz, jmethodID methodID, \
764
va_list args) \
765
{ return functions->CallStatic##_jname##MethodV(this, clazz, methodID, \
766
args); }
767
#define CALL_STATIC_TYPE_METHODA(_jtype, _jname) \
768
_jtype CallStatic##_jname##MethodA(jclass clazz, jmethodID methodID, \
769
jvalue* args) \
770
{ return functions->CallStatic##_jname##MethodA(this, clazz, methodID, \
771
args); }
772
773
#define CALL_STATIC_TYPE(_jtype, _jname) \
774
CALL_STATIC_TYPE_METHOD(_jtype, _jname) \
775
CALL_STATIC_TYPE_METHODV(_jtype, _jname) \
776
CALL_STATIC_TYPE_METHODA(_jtype, _jname)
777
778
CALL_STATIC_TYPE(jobject, Object)
779
CALL_STATIC_TYPE(jboolean, Boolean)
780
CALL_STATIC_TYPE(jbyte, Byte)
781
CALL_STATIC_TYPE(jchar, Char)
782
CALL_STATIC_TYPE(jshort, Short)
783
CALL_STATIC_TYPE(jint, Int)
784
CALL_STATIC_TYPE(jlong, Long)
785
CALL_STATIC_TYPE(jfloat, Float)
786
CALL_STATIC_TYPE(jdouble, Double)
787
788
void CallStaticVoidMethod(jclass clazz, jmethodID methodID, ...)
789
{
790
va_list args;
791
va_start(args, methodID);
792
functions->CallStaticVoidMethodV(this, clazz, methodID, args);
793
va_end(args);
794
}
795
void CallStaticVoidMethodV(jclass clazz, jmethodID methodID, va_list args)
796
{ functions->CallStaticVoidMethodV(this, clazz, methodID, args); }
797
void CallStaticVoidMethodA(jclass clazz, jmethodID methodID, jvalue* args)
798
{ functions->CallStaticVoidMethodA(this, clazz, methodID, args); }
799
800
jfieldID GetStaticFieldID(jclass clazz, const char* name, const char* sig)
801
{ return functions->GetStaticFieldID(this, clazz, name, sig); }
802
803
jobject GetStaticObjectField(jclass clazz, jfieldID fieldID)
804
{ return functions->GetStaticObjectField(this, clazz, fieldID); }
805
jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID)
806
{ return functions->GetStaticBooleanField(this, clazz, fieldID); }
807
jbyte GetStaticByteField(jclass clazz, jfieldID fieldID)
808
{ return functions->GetStaticByteField(this, clazz, fieldID); }
809
jchar GetStaticCharField(jclass clazz, jfieldID fieldID)
810
{ return functions->GetStaticCharField(this, clazz, fieldID); }
811
jshort GetStaticShortField(jclass clazz, jfieldID fieldID)
812
{ return functions->GetStaticShortField(this, clazz, fieldID); }
813
jint GetStaticIntField(jclass clazz, jfieldID fieldID)
814
{ return functions->GetStaticIntField(this, clazz, fieldID); }
815
jlong GetStaticLongField(jclass clazz, jfieldID fieldID)
816
{ return functions->GetStaticLongField(this, clazz, fieldID); }
817
jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID)
818
{ return functions->GetStaticFloatField(this, clazz, fieldID); }
819
jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID)
820
{ return functions->GetStaticDoubleField(this, clazz, fieldID); }
821
822
void SetStaticObjectField(jclass clazz, jfieldID fieldID, jobject value)
823
{ functions->SetStaticObjectField(this, clazz, fieldID, value); }
824
void SetStaticBooleanField(jclass clazz, jfieldID fieldID, jboolean value)
825
{ functions->SetStaticBooleanField(this, clazz, fieldID, value); }
826
void SetStaticByteField(jclass clazz, jfieldID fieldID, jbyte value)
827
{ functions->SetStaticByteField(this, clazz, fieldID, value); }
828
void SetStaticCharField(jclass clazz, jfieldID fieldID, jchar value)
829
{ functions->SetStaticCharField(this, clazz, fieldID, value); }
830
void SetStaticShortField(jclass clazz, jfieldID fieldID, jshort value)
831
{ functions->SetStaticShortField(this, clazz, fieldID, value); }
832
void SetStaticIntField(jclass clazz, jfieldID fieldID, jint value)
833
{ functions->SetStaticIntField(this, clazz, fieldID, value); }
834
void SetStaticLongField(jclass clazz, jfieldID fieldID, jlong value)
835
{ functions->SetStaticLongField(this, clazz, fieldID, value); }
836
void SetStaticFloatField(jclass clazz, jfieldID fieldID, jfloat value)
837
{ functions->SetStaticFloatField(this, clazz, fieldID, value); }
838
void SetStaticDoubleField(jclass clazz, jfieldID fieldID, jdouble value)
839
{ functions->SetStaticDoubleField(this, clazz, fieldID, value); }
840
841
jstring NewString(const jchar* unicodeChars, jsize len)
842
{ return functions->NewString(this, unicodeChars, len); }
843
844
jsize GetStringLength(jstring string)
845
{ return functions->GetStringLength(this, string); }
846
847
const jchar* GetStringChars(jstring string, jboolean* isCopy)
848
{ return functions->GetStringChars(this, string, isCopy); }
849
850
void ReleaseStringChars(jstring string, const jchar* chars)
851
{ functions->ReleaseStringChars(this, string, chars); }
852
853
jstring NewStringUTF(const char* bytes)
854
{ return functions->NewStringUTF(this, bytes); }
855
856
jsize GetStringUTFLength(jstring string)
857
{ return functions->GetStringUTFLength(this, string); }
858
859
const char* GetStringUTFChars(jstring string, jboolean* isCopy)
860
{ return functions->GetStringUTFChars(this, string, isCopy); }
861
862
void ReleaseStringUTFChars(jstring string, const char* utf)
863
{ functions->ReleaseStringUTFChars(this, string, utf); }
864
865
jsize GetArrayLength(jarray array)
866
{ return functions->GetArrayLength(this, array); }
867
868
jobjectArray NewObjectArray(jsize length, jclass elementClass,
869
jobject initialElement)
870
{ return functions->NewObjectArray(this, length, elementClass,
871
initialElement); }
872
873
jobject GetObjectArrayElement(jobjectArray array, jsize index)
874
{ return functions->GetObjectArrayElement(this, array, index); }
875
876
void SetObjectArrayElement(jobjectArray array, jsize index, jobject value)
877
{ functions->SetObjectArrayElement(this, array, index, value); }
878
879
jbooleanArray NewBooleanArray(jsize length)
880
{ return functions->NewBooleanArray(this, length); }
881
jbyteArray NewByteArray(jsize length)
882
{ return functions->NewByteArray(this, length); }
883
jcharArray NewCharArray(jsize length)
884
{ return functions->NewCharArray(this, length); }
885
jshortArray NewShortArray(jsize length)
886
{ return functions->NewShortArray(this, length); }
887
jintArray NewIntArray(jsize length)
888
{ return functions->NewIntArray(this, length); }
889
jlongArray NewLongArray(jsize length)
890
{ return functions->NewLongArray(this, length); }
891
jfloatArray NewFloatArray(jsize length)
892
{ return functions->NewFloatArray(this, length); }
893
jdoubleArray NewDoubleArray(jsize length)
894
{ return functions->NewDoubleArray(this, length); }
895
896
jboolean* GetBooleanArrayElements(jbooleanArray array, jboolean* isCopy)
897
{ return functions->GetBooleanArrayElements(this, array, isCopy); }
898
jbyte* GetByteArrayElements(jbyteArray array, jboolean* isCopy)
899
{ return functions->GetByteArrayElements(this, array, isCopy); }
900
jchar* GetCharArrayElements(jcharArray array, jboolean* isCopy)
901
{ return functions->GetCharArrayElements(this, array, isCopy); }
902
jshort* GetShortArrayElements(jshortArray array, jboolean* isCopy)
903
{ return functions->GetShortArrayElements(this, array, isCopy); }
904
jint* GetIntArrayElements(jintArray array, jboolean* isCopy)
905
{ return functions->GetIntArrayElements(this, array, isCopy); }
906
jlong* GetLongArrayElements(jlongArray array, jboolean* isCopy)
907
{ return functions->GetLongArrayElements(this, array, isCopy); }
908
jfloat* GetFloatArrayElements(jfloatArray array, jboolean* isCopy)
909
{ return functions->GetFloatArrayElements(this, array, isCopy); }
910
jdouble* GetDoubleArrayElements(jdoubleArray array, jboolean* isCopy)
911
{ return functions->GetDoubleArrayElements(this, array, isCopy); }
912
913
void ReleaseBooleanArrayElements(jbooleanArray array, jboolean* elems,
914
jint mode)
915
{ functions->ReleaseBooleanArrayElements(this, array, elems, mode); }
916
void ReleaseByteArrayElements(jbyteArray array, jbyte* elems,
917
jint mode)
918
{ functions->ReleaseByteArrayElements(this, array, elems, mode); }
919
void ReleaseCharArrayElements(jcharArray array, jchar* elems,
920
jint mode)
921
{ functions->ReleaseCharArrayElements(this, array, elems, mode); }
922
void ReleaseShortArrayElements(jshortArray array, jshort* elems,
923
jint mode)
924
{ functions->ReleaseShortArrayElements(this, array, elems, mode); }
925
void ReleaseIntArrayElements(jintArray array, jint* elems,
926
jint mode)
927
{ functions->ReleaseIntArrayElements(this, array, elems, mode); }
928
void ReleaseLongArrayElements(jlongArray array, jlong* elems,
929
jint mode)
930
{ functions->ReleaseLongArrayElements(this, array, elems, mode); }
931
void ReleaseFloatArrayElements(jfloatArray array, jfloat* elems,
932
jint mode)
933
{ functions->ReleaseFloatArrayElements(this, array, elems, mode); }
934
void ReleaseDoubleArrayElements(jdoubleArray array, jdouble* elems,
935
jint mode)
936
{ functions->ReleaseDoubleArrayElements(this, array, elems, mode); }
937
938
void GetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
939
jboolean* buf)
940
{ functions->GetBooleanArrayRegion(this, array, start, len, buf); }
941
void GetByteArrayRegion(jbyteArray array, jsize start, jsize len,
942
jbyte* buf)
943
{ functions->GetByteArrayRegion(this, array, start, len, buf); }
944
void GetCharArrayRegion(jcharArray array, jsize start, jsize len,
945
jchar* buf)
946
{ functions->GetCharArrayRegion(this, array, start, len, buf); }
947
void GetShortArrayRegion(jshortArray array, jsize start, jsize len,
948
jshort* buf)
949
{ functions->GetShortArrayRegion(this, array, start, len, buf); }
950
void GetIntArrayRegion(jintArray array, jsize start, jsize len,
951
jint* buf)
952
{ functions->GetIntArrayRegion(this, array, start, len, buf); }
953
void GetLongArrayRegion(jlongArray array, jsize start, jsize len,
954
jlong* buf)
955
{ functions->GetLongArrayRegion(this, array, start, len, buf); }
956
void GetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
957
jfloat* buf)
958
{ functions->GetFloatArrayRegion(this, array, start, len, buf); }
959
void GetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
960
jdouble* buf)
961
{ functions->GetDoubleArrayRegion(this, array, start, len, buf); }
962
963
void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
964
const jboolean* buf)
965
{ functions->SetBooleanArrayRegion(this, array, start, len, buf); }
966
void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
967
const jbyte* buf)
968
{ functions->SetByteArrayRegion(this, array, start, len, buf); }
969
void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
970
const jchar* buf)
971
{ functions->SetCharArrayRegion(this, array, start, len, buf); }
972
void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
973
const jshort* buf)
974
{ functions->SetShortArrayRegion(this, array, start, len, buf); }
975
void SetIntArrayRegion(jintArray array, jsize start, jsize len,
976
const jint* buf)
977
{ functions->SetIntArrayRegion(this, array, start, len, buf); }
978
void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
979
const jlong* buf)
980
{ functions->SetLongArrayRegion(this, array, start, len, buf); }
981
void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
982
const jfloat* buf)
983
{ functions->SetFloatArrayRegion(this, array, start, len, buf); }
984
void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
985
const jdouble* buf)
986
{ functions->SetDoubleArrayRegion(this, array, start, len, buf); }
987
988
jint RegisterNatives(jclass clazz, const JNINativeMethod* methods,
989
jint nMethods)
990
{ return functions->RegisterNatives(this, clazz, methods, nMethods); }
991
992
jint UnregisterNatives(jclass clazz)
993
{ return functions->UnregisterNatives(this, clazz); }
994
995
jint MonitorEnter(jobject obj)
996
{ return functions->MonitorEnter(this, obj); }
997
998
jint MonitorExit(jobject obj)
999
{ return functions->MonitorExit(this, obj); }
1000
1001
jint GetJavaVM(JavaVM** vm)
1002
{ return functions->GetJavaVM(this, vm); }
1003
1004
void GetStringRegion(jstring str, jsize start, jsize len, jchar* buf)
1005
{ functions->GetStringRegion(this, str, start, len, buf); }
1006
1007
void GetStringUTFRegion(jstring str, jsize start, jsize len, char* buf)
1008
{ return functions->GetStringUTFRegion(this, str, start, len, buf); }
1009
1010
void* GetPrimitiveArrayCritical(jarray array, jboolean* isCopy)
1011
{ return functions->GetPrimitiveArrayCritical(this, array, isCopy); }
1012
1013
void ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode)
1014
{ functions->ReleasePrimitiveArrayCritical(this, array, carray, mode); }
1015
1016
const jchar* GetStringCritical(jstring string, jboolean* isCopy)
1017
{ return functions->GetStringCritical(this, string, isCopy); }
1018
1019
void ReleaseStringCritical(jstring string, const jchar* carray)
1020
{ functions->ReleaseStringCritical(this, string, carray); }
1021
1022
jweak NewWeakGlobalRef(jobject obj)
1023
{ return functions->NewWeakGlobalRef(this, obj); }
1024
1025
void DeleteWeakGlobalRef(jweak obj)
1026
{ functions->DeleteWeakGlobalRef(this, obj); }
1027
1028
jboolean ExceptionCheck()
1029
{ return functions->ExceptionCheck(this); }
1030
1031
jobject NewDirectByteBuffer(void* address, jlong capacity)
1032
{ return functions->NewDirectByteBuffer(this, address, capacity); }
1033
1034
void* GetDirectBufferAddress(jobject buf)
1035
{ return functions->GetDirectBufferAddress(this, buf); }
1036
1037
jlong GetDirectBufferCapacity(jobject buf)
1038
{ return functions->GetDirectBufferCapacity(this, buf); }
1039
1040
/* added in JNI 1.6 */
1041
jobjectRefType GetObjectRefType(jobject obj)
1042
{ return functions->GetObjectRefType(this, obj); }
1043
#endif /*__cplusplus*/
1044
};
1045
1046
1047
/*
1048
* JNI invocation interface.
1049
*/
1050
struct JNIInvokeInterface {
1051
void* reserved0;
1052
void* reserved1;
1053
void* reserved2;
1054
1055
jint (*DestroyJavaVM)(JavaVM*);
1056
jint (*AttachCurrentThread)(JavaVM*, JNIEnv**, void*);
1057
jint (*DetachCurrentThread)(JavaVM*);
1058
jint (*GetEnv)(JavaVM*, void**, jint);
1059
jint (*AttachCurrentThreadAsDaemon)(JavaVM*, JNIEnv**, void*);
1060
};
1061
1062
/*
1063
* C++ version.
1064
*/
1065
struct _JavaVM {
1066
const struct JNIInvokeInterface* functions;
1067
1068
#if defined(__cplusplus)
1069
jint DestroyJavaVM()
1070
{ return functions->DestroyJavaVM(this); }
1071
jint AttachCurrentThread(JNIEnv** p_env, void* thr_args)
1072
{ return functions->AttachCurrentThread(this, p_env, thr_args); }
1073
jint DetachCurrentThread()
1074
{ return functions->DetachCurrentThread(this); }
1075
jint GetEnv(void** env, jint version)
1076
{ return functions->GetEnv(this, env, version); }
1077
jint AttachCurrentThreadAsDaemon(JNIEnv** p_env, void* thr_args)
1078
{ return functions->AttachCurrentThreadAsDaemon(this, p_env, thr_args); }
1079
#endif /*__cplusplus*/
1080
};
1081
1082
struct JavaVMAttachArgs {
1083
jint version; /* must be >= JNI_VERSION_1_2 */
1084
const char* name; /* NULL or name of thread as modified UTF-8 str */
1085
jobject group; /* global ref of a ThreadGroup object, or NULL */
1086
};
1087
typedef struct JavaVMAttachArgs JavaVMAttachArgs;
1088
1089
/*
1090
* JNI 1.2+ initialization. (As of 1.6, the pre-1.2 structures are no
1091
* longer supported.)
1092
*/
1093
typedef struct JavaVMOption {
1094
const char* optionString;
1095
void* extraInfo;
1096
} JavaVMOption;
1097
1098
typedef struct JavaVMInitArgs {
1099
jint version; /* use JNI_VERSION_1_2 or later */
1100
1101
jint nOptions;
1102
JavaVMOption* options;
1103
jboolean ignoreUnrecognized;
1104
} JavaVMInitArgs;
1105
1106
#ifdef __cplusplus
1107
extern "C" {
1108
#endif
1109
/*
1110
* VM initialization functions.
1111
*
1112
* Note these are the only symbols exported for JNI by the VM.
1113
*/
1114
jint JNI_GetDefaultJavaVMInitArgs(void*);
1115
jint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*);
1116
jint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*);
1117
1118
/*
1119
* Prototypes for functions exported by loadable shared libs. These are
1120
* called by JNI, not provided by JNI.
1121
*/
1122
jint JNI_OnLoad(JavaVM* vm, void* reserved);
1123
void JNI_OnUnload(JavaVM* vm, void* reserved);
1124
1125
#ifdef __cplusplus
1126
}
1127
#endif
1128
1129
1130
/*
1131
* Manifest constants.
1132
*/
1133
#define JNI_FALSE 0
1134
#define JNI_TRUE 1
1135
1136
#define JNI_VERSION_1_1 0x00010001
1137
#define JNI_VERSION_1_2 0x00010002
1138
#define JNI_VERSION_1_4 0x00010004
1139
#define JNI_VERSION_1_6 0x00010006
1140
1141
#define JNI_OK (0) /* no error */
1142
#define JNI_ERR (-1) /* generic error */
1143
#define JNI_EDETACHED (-2) /* thread detached from the VM */
1144
#define JNI_EVERSION (-3) /* JNI version error */
1145
1146
#define JNI_COMMIT 1 /* copy content, do not free buffer */
1147
#define JNI_ABORT 2 /* free buffer w/o copying back */
1148
1149
/* need these for Windows-aware headers */
1150
#define JNIIMPORT
1151
#define JNIEXPORT
1152
#define JNICALL
1153
1154
#endif /*_JNI_H*/
1155
1156