1/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/* ***** BEGIN LICENSE BLOCK *****
3 * Version: NPL 1.1/GPL 2.0/LGPL 2.1
4 *
5 * The contents of this file are subject to the Netscape Public License
6 * Version 1.1 (the "License"); you may not use this file except in
7 * compliance with the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/NPL/
9 *
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
13 * License.
14 *
15 * The Original Code is mozilla.org code.
16 *
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 1998
20 * the Initial Developer. All Rights Reserved.
21 *
22 * Contributor(s):
23 *
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the NPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the NPL, the GPL or the LGPL.
35 *
36 * ***** END LICENSE BLOCK ***** */
37
38/*******************************************************************************
39 * Java Runtime Interface
40 ******************************************************************************/
41
42#ifndef JRI_H
43#define JRI_H
44
45#include "jritypes.h"
46
47#ifdef __cplusplus
48extern "C" {
49#endif /* __cplusplus */
50
51/*******************************************************************************
52 * JRIEnv
53 ******************************************************************************/
54
55/* The type of the JRIEnv interface. */
56typedef struct JRIEnvInterface	JRIEnvInterface;
57
58/* The type of a JRIEnv instance. */
59typedef const JRIEnvInterface*	JRIEnv;
60
61/*******************************************************************************
62 * JRIEnv Operations
63 ******************************************************************************/
64
65#define JRI_DefineClass(env, classLoader, buf, bufLen)	\
66	(((*(env))->DefineClass)(env, JRI_DefineClass_op, classLoader, buf, bufLen))
67
68#define JRI_FindClass(env, name)	\
69	(((*(env))->FindClass)(env, JRI_FindClass_op, name))
70
71#define JRI_Throw(env, obj)	\
72	(((*(env))->Throw)(env, JRI_Throw_op, obj))
73
74#define JRI_ThrowNew(env, clazz, message)	\
75	(((*(env))->ThrowNew)(env, JRI_ThrowNew_op, clazz, message))
76
77#define JRI_ExceptionOccurred(env)	\
78	(((*(env))->ExceptionOccurred)(env, JRI_ExceptionOccurred_op))
79
80#define JRI_ExceptionDescribe(env)	\
81	(((*(env))->ExceptionDescribe)(env, JRI_ExceptionDescribe_op))
82
83#define JRI_ExceptionClear(env)	\
84	(((*(env))->ExceptionClear)(env, JRI_ExceptionClear_op))
85
86#define JRI_NewGlobalRef(env, ref)	\
87	(((*(env))->NewGlobalRef)(env, JRI_NewGlobalRef_op, ref))
88
89#define JRI_DisposeGlobalRef(env, gref)	\
90	(((*(env))->DisposeGlobalRef)(env, JRI_DisposeGlobalRef_op, gref))
91
92#define JRI_GetGlobalRef(env, gref)	\
93	(((*(env))->GetGlobalRef)(env, JRI_GetGlobalRef_op, gref))
94
95#define JRI_SetGlobalRef(env, gref, ref)	\
96	(((*(env))->SetGlobalRef)(env, JRI_SetGlobalRef_op, gref, ref))
97
98#define JRI_IsSameObject(env, a, b)	\
99	(((*(env))->IsSameObject)(env, JRI_IsSameObject_op, a, b))
100
101#define JRI_NewObject(env)	((*(env))->NewObject)
102#define JRI_NewObjectV(env, clazz, methodID, args)	\
103	(((*(env))->NewObjectV)(env, JRI_NewObject_op_va_list, clazz, methodID, args))
104#define JRI_NewObjectA(env, clazz, method, args)	\
105	(((*(env))->NewObjectA)(env, JRI_NewObject_op_array, clazz, methodID, args))
106
107#define JRI_GetObjectClass(env, obj)	\
108	(((*(env))->GetObjectClass)(env, JRI_GetObjectClass_op, obj))
109
110#define JRI_IsInstanceOf(env, obj, clazz)	\
111	(((*(env))->IsInstanceOf)(env, JRI_IsInstanceOf_op, obj, clazz))
112
113#define JRI_GetMethodID(env, clazz, name, sig)	\
114	(((*(env))->GetMethodID)(env, JRI_GetMethodID_op, clazz, name, sig))
115
116#define JRI_CallMethod(env)	((*(env))->CallMethod)
117#define JRI_CallMethodV(env, obj, methodID, args)	\
118	(((*(env))->CallMethodV)(env, JRI_CallMethod_op_va_list, obj, methodID, args))
119#define JRI_CallMethodA(env, obj, methodID, args)	\
120	(((*(env))->CallMethodA)(env, JRI_CallMethod_op_array, obj, methodID, args))
121
122#define JRI_CallMethodBoolean(env)	((*(env))->CallMethodBoolean)
123#define JRI_CallMethodBooleanV(env, obj, methodID, args)	\
124	(((*(env))->CallMethodBooleanV)(env, JRI_CallMethodBoolean_op_va_list, obj, methodID, args))
125#define JRI_CallMethodBooleanA(env, obj, methodID, args)	\
126	(((*(env))->CallMethodBooleanA)(env, JRI_CallMethodBoolean_op_array, obj, methodID, args))
127
128#define JRI_CallMethodByte(env)	((*(env))->CallMethodByte)
129#define JRI_CallMethodByteV(env, obj, methodID, args)	\
130	(((*(env))->CallMethodByteV)(env, JRI_CallMethodByte_op_va_list, obj, methodID, args))
131#define JRI_CallMethodByteA(env, obj, methodID, args)	\
132	(((*(env))->CallMethodByteA)(env, JRI_CallMethodByte_op_array, obj, methodID, args))
133
134#define JRI_CallMethodChar(env)	((*(env))->CallMethodChar)
135#define JRI_CallMethodCharV(env, obj, methodID, args)	\
136	(((*(env))->CallMethodCharV)(env, JRI_CallMethodChar_op_va_list, obj, methodID, args))
137#define JRI_CallMethodCharA(env, obj, methodID, args)	\
138	(((*(env))->CallMethodCharA)(env, JRI_CallMethodChar_op_array, obj, methodID, args))
139
140#define JRI_CallMethodShort(env)	((*(env))->CallMethodShort)
141#define JRI_CallMethodShortV(env, obj, methodID, args)	\
142	(((*(env))->CallMethodShortV)(env, JRI_CallMethodShort_op_va_list, obj, methodID, args))
143#define JRI_CallMethodShortA(env, obj, methodID, args)	\
144	(((*(env))->CallMethodShortA)(env, JRI_CallMethodShort_op_array, obj, methodID, args))
145
146#define JRI_CallMethodInt(env)	((*(env))->CallMethodInt)
147#define JRI_CallMethodIntV(env, obj, methodID, args)	\
148	(((*(env))->CallMethodIntV)(env, JRI_CallMethodInt_op_va_list, obj, methodID, args))
149#define JRI_CallMethodIntA(env, obj, methodID, args)	\
150	(((*(env))->CallMethodIntA)(env, JRI_CallMethodInt_op_array, obj, methodID, args))
151
152#define JRI_CallMethodLong(env)	((*(env))->CallMethodLong)
153#define JRI_CallMethodLongV(env, obj, methodID, args)	\
154	(((*(env))->CallMethodLongV)(env, JRI_CallMethodLong_op_va_list, obj, methodID, args))
155#define JRI_CallMethodLongA(env, obj, methodID, args)	\
156	(((*(env))->CallMethodLongA)(env, JRI_CallMethodLong_op_array, obj, methodID, args))
157
158#define JRI_CallMethodFloat(env)	((*(env))->CallMethodFloat)
159#define JRI_CallMethodFloatV(env, obj, methodID, args)	\
160	(((*(env))->CallMethodFloatV)(env, JRI_CallMethodFloat_op_va_list, obj, methodID, args))
161#define JRI_CallMethodFloatA(env, obj, methodID, args)	\
162	(((*(env))->CallMethodFloatA)(env, JRI_CallMethodFloat_op_array, obj, methodID, args))
163
164#define JRI_CallMethodDouble(env)	((*(env))->CallMethodDouble)
165#define JRI_CallMethodDoubleV(env, obj, methodID, args)	\
166	(((*(env))->CallMethodDoubleV)(env, JRI_CallMethodDouble_op_va_list, obj, methodID, args))
167#define JRI_CallMethodDoubleA(env, obj, methodID, args)	\
168	(((*(env))->CallMethodDoubleA)(env, JRI_CallMethodDouble_op_array, obj, methodID, args))
169
170#define JRI_GetFieldID(env, clazz, name, sig)	\
171	(((*(env))->GetFieldID)(env, JRI_GetFieldID_op, clazz, name, sig))
172
173#define JRI_GetField(env, obj, fieldID)	\
174	(((*(env))->GetField)(env, JRI_GetField_op, obj, fieldID))
175
176#define JRI_GetFieldBoolean(env, obj, fieldID)	\
177	(((*(env))->GetFieldBoolean)(env, JRI_GetFieldBoolean_op, obj, fieldID))
178
179#define JRI_GetFieldByte(env, obj, fieldID)	\
180	(((*(env))->GetFieldByte)(env, JRI_GetFieldByte_op, obj, fieldID))
181
182#define JRI_GetFieldChar(env, obj, fieldID)	\
183	(((*(env))->GetFieldChar)(env, JRI_GetFieldChar_op, obj, fieldID))
184
185#define JRI_GetFieldShort(env, obj, fieldID)	\
186	(((*(env))->GetFieldShort)(env, JRI_GetFieldShort_op, obj, fieldID))
187
188#define JRI_GetFieldInt(env, obj, fieldID)	\
189	(((*(env))->GetFieldInt)(env, JRI_GetFieldInt_op, obj, fieldID))
190
191#define JRI_GetFieldLong(env, obj, fieldID)	\
192	(((*(env))->GetFieldLong)(env, JRI_GetFieldLong_op, obj, fieldID))
193
194#define JRI_GetFieldFloat(env, obj, fieldID)	\
195	(((*(env))->GetFieldFloat)(env, JRI_GetFieldFloat_op, obj, fieldID))
196
197#define JRI_GetFieldDouble(env, obj, fieldID)	\
198	(((*(env))->GetFieldDouble)(env, JRI_GetFieldDouble_op, obj, fieldID))
199
200#define JRI_SetField(env, obj, fieldID, value)	\
201	(((*(env))->SetField)(env, JRI_SetField_op, obj, fieldID, value))
202
203#define JRI_SetFieldBoolean(env, obj, fieldID, value)	\
204	(((*(env))->SetFieldBoolean)(env, JRI_SetFieldBoolean_op, obj, fieldID, value))
205
206#define JRI_SetFieldByte(env, obj, fieldID, value)	\
207	(((*(env))->SetFieldByte)(env, JRI_SetFieldByte_op, obj, fieldID, value))
208
209#define JRI_SetFieldChar(env, obj, fieldID, value)	\
210	(((*(env))->SetFieldChar)(env, JRI_SetFieldChar_op, obj, fieldID, value))
211
212#define JRI_SetFieldShort(env, obj, fieldID, value)	\
213	(((*(env))->SetFieldShort)(env, JRI_SetFieldShort_op, obj, fieldID, value))
214
215#define JRI_SetFieldInt(env, obj, fieldID, value)	\
216	(((*(env))->SetFieldInt)(env, JRI_SetFieldInt_op, obj, fieldID, value))
217
218#define JRI_SetFieldLong(env, obj, fieldID, value)	\
219	(((*(env))->SetFieldLong)(env, JRI_SetFieldLong_op, obj, fieldID, value))
220
221#define JRI_SetFieldFloat(env, obj, fieldID, value)	\
222	(((*(env))->SetFieldFloat)(env, JRI_SetFieldFloat_op, obj, fieldID, value))
223
224#define JRI_SetFieldDouble(env, obj, fieldID, value)	\
225	(((*(env))->SetFieldDouble)(env, JRI_SetFieldDouble_op, obj, fieldID, value))
226
227#define JRI_IsSubclassOf(env, a, b)	\
228	(((*(env))->IsSubclassOf)(env, JRI_IsSubclassOf_op, a, b))
229
230#define JRI_GetStaticMethodID(env, clazz, name, sig)	\
231	(((*(env))->GetStaticMethodID)(env, JRI_GetStaticMethodID_op, clazz, name, sig))
232
233#define JRI_CallStaticMethod(env)	((*(env))->CallStaticMethod)
234#define JRI_CallStaticMethodV(env, clazz, methodID, args)	\
235	(((*(env))->CallStaticMethodV)(env, JRI_CallStaticMethod_op_va_list, clazz, methodID, args))
236#define JRI_CallStaticMethodA(env, clazz, methodID, args)	\
237	(((*(env))->CallStaticMethodA)(env, JRI_CallStaticMethod_op_array, clazz, methodID, args))
238
239#define JRI_CallStaticMethodBoolean(env)	((*(env))->CallStaticMethodBoolean)
240#define JRI_CallStaticMethodBooleanV(env, clazz, methodID, args)	\
241	(((*(env))->CallStaticMethodBooleanV)(env, JRI_CallStaticMethodBoolean_op_va_list, clazz, methodID, args))
242#define JRI_CallStaticMethodBooleanA(env, clazz, methodID, args)	\
243	(((*(env))->CallStaticMethodBooleanA)(env, JRI_CallStaticMethodBoolean_op_array, clazz, methodID, args))
244
245#define JRI_CallStaticMethodByte(env)	((*(env))->CallStaticMethodByte)
246#define JRI_CallStaticMethodByteV(env, clazz, methodID, args)	\
247	(((*(env))->CallStaticMethodByteV)(env, JRI_CallStaticMethodByte_op_va_list, clazz, methodID, args))
248#define JRI_CallStaticMethodByteA(env, clazz, methodID, args)	\
249	(((*(env))->CallStaticMethodByteA)(env, JRI_CallStaticMethodByte_op_array, clazz, methodID, args))
250
251#define JRI_CallStaticMethodChar(env)	((*(env))->CallStaticMethodChar)
252#define JRI_CallStaticMethodCharV(env, clazz, methodID, args)	\
253	(((*(env))->CallStaticMethodCharV)(env, JRI_CallStaticMethodChar_op_va_list, clazz, methodID, args))
254#define JRI_CallStaticMethodCharA(env, clazz, methodID, args)	\
255	(((*(env))->CallStaticMethodCharA)(env, JRI_CallStaticMethodChar_op_array, clazz, methodID, args))
256
257#define JRI_CallStaticMethodShort(env)	((*(env))->CallStaticMethodShort)
258#define JRI_CallStaticMethodShortV(env, clazz, methodID, args)	\
259	(((*(env))->CallStaticMethodShortV)(env, JRI_CallStaticMethodShort_op_va_list, clazz, methodID, args))
260#define JRI_CallStaticMethodShortA(env, clazz, methodID, args)	\
261	(((*(env))->CallStaticMethodShortA)(env, JRI_CallStaticMethodShort_op_array, clazz, methodID, args))
262
263#define JRI_CallStaticMethodInt(env)	((*(env))->CallStaticMethodInt)
264#define JRI_CallStaticMethodIntV(env, clazz, methodID, args)	\
265	(((*(env))->CallStaticMethodIntV)(env, JRI_CallStaticMethodInt_op_va_list, clazz, methodID, args))
266#define JRI_CallStaticMethodIntA(env, clazz, methodID, args)	\
267	(((*(env))->CallStaticMethodIntA)(env, JRI_CallStaticMethodInt_op_array, clazz, methodID, args))
268
269#define JRI_CallStaticMethodLong(env)	((*(env))->CallStaticMethodLong)
270#define JRI_CallStaticMethodLongV(env, clazz, methodID, args)	\
271	(((*(env))->CallStaticMethodLongV)(env, JRI_CallStaticMethodLong_op_va_list, clazz, methodID, args))
272#define JRI_CallStaticMethodLongA(env, clazz, methodID, args)	\
273	(((*(env))->CallStaticMethodLongA)(env, JRI_CallStaticMethodLong_op_array, clazz, methodID, args))
274
275#define JRI_CallStaticMethodFloat(env)	((*(env))->CallStaticMethodFloat)
276#define JRI_CallStaticMethodFloatV(env, clazz, methodID, args)	\
277	(((*(env))->CallStaticMethodFloatV)(env, JRI_CallStaticMethodFloat_op_va_list, clazz, methodID, args))
278#define JRI_CallStaticMethodFloatA(env, clazz, methodID, args)	\
279	(((*(env))->CallStaticMethodFloatA)(env, JRI_CallStaticMethodFloat_op_array, clazz, methodID, args))
280
281#define JRI_CallStaticMethodDouble(env)	((*(env))->CallStaticMethodDouble)
282#define JRI_CallStaticMethodDoubleV(env, clazz, methodID, args)	\
283	(((*(env))->CallStaticMethodDoubleV)(env, JRI_CallStaticMethodDouble_op_va_list, clazz, methodID, args))
284#define JRI_CallStaticMethodDoubleA(env, clazz, methodID, args)	\
285	(((*(env))->CallStaticMethodDoubleA)(env, JRI_CallStaticMethodDouble_op_array, clazz, methodID, args))
286
287#define JRI_GetStaticFieldID(env, clazz, name, sig)	\
288	(((*(env))->GetStaticFieldID)(env, JRI_GetStaticFieldID_op, clazz, name, sig))
289
290#define JRI_GetStaticField(env, clazz, fieldID)	\
291	(((*(env))->GetStaticField)(env, JRI_GetStaticField_op, clazz, fieldID))
292
293#define JRI_GetStaticFieldBoolean(env, clazz, fieldID)	\
294	(((*(env))->GetStaticFieldBoolean)(env, JRI_GetStaticFieldBoolean_op, clazz, fieldID))
295
296#define JRI_GetStaticFieldByte(env, clazz, fieldID)	\
297	(((*(env))->GetStaticFieldByte)(env, JRI_GetStaticFieldByte_op, clazz, fieldID))
298
299#define JRI_GetStaticFieldChar(env, clazz, fieldID)	\
300	(((*(env))->GetStaticFieldChar)(env, JRI_GetStaticFieldChar_op, clazz, fieldID))
301
302#define JRI_GetStaticFieldShort(env, clazz, fieldID)	\
303	(((*(env))->GetStaticFieldShort)(env, JRI_GetStaticFieldShort_op, clazz, fieldID))
304
305#define JRI_GetStaticFieldInt(env, clazz, fieldID)	\
306	(((*(env))->GetStaticFieldInt)(env, JRI_GetStaticFieldInt_op, clazz, fieldID))
307
308#define JRI_GetStaticFieldLong(env, clazz, fieldID)	\
309	(((*(env))->GetStaticFieldLong)(env, JRI_GetStaticFieldLong_op, clazz, fieldID))
310
311#define JRI_GetStaticFieldFloat(env, clazz, fieldID)	\
312	(((*(env))->GetStaticFieldFloat)(env, JRI_GetStaticFieldFloat_op, clazz, fieldID))
313
314#define JRI_GetStaticFieldDouble(env, clazz, fieldID)	\
315	(((*(env))->GetStaticFieldDouble)(env, JRI_GetStaticFieldDouble_op, clazz, fieldID))
316
317#define JRI_SetStaticField(env, clazz, fieldID, value)	\
318	(((*(env))->SetStaticField)(env, JRI_SetStaticField_op, clazz, fieldID, value))
319
320#define JRI_SetStaticFieldBoolean(env, clazz, fieldID, value)	\
321	(((*(env))->SetStaticFieldBoolean)(env, JRI_SetStaticFieldBoolean_op, clazz, fieldID, value))
322
323#define JRI_SetStaticFieldByte(env, clazz, fieldID, value)	\
324	(((*(env))->SetStaticFieldByte)(env, JRI_SetStaticFieldByte_op, clazz, fieldID, value))
325
326#define JRI_SetStaticFieldChar(env, clazz, fieldID, value)	\
327	(((*(env))->SetStaticFieldChar)(env, JRI_SetStaticFieldChar_op, clazz, fieldID, value))
328
329#define JRI_SetStaticFieldShort(env, clazz, fieldID, value)	\
330	(((*(env))->SetStaticFieldShort)(env, JRI_SetStaticFieldShort_op, clazz, fieldID, value))
331
332#define JRI_SetStaticFieldInt(env, clazz, fieldID, value)	\
333	(((*(env))->SetStaticFieldInt)(env, JRI_SetStaticFieldInt_op, clazz, fieldID, value))
334
335#define JRI_SetStaticFieldLong(env, clazz, fieldID, value)	\
336	(((*(env))->SetStaticFieldLong)(env, JRI_SetStaticFieldLong_op, clazz, fieldID, value))
337
338#define JRI_SetStaticFieldFloat(env, clazz, fieldID, value)	\
339	(((*(env))->SetStaticFieldFloat)(env, JRI_SetStaticFieldFloat_op, clazz, fieldID, value))
340
341#define JRI_SetStaticFieldDouble(env, clazz, fieldID, value)	\
342	(((*(env))->SetStaticFieldDouble)(env, JRI_SetStaticFieldDouble_op, clazz, fieldID, value))
343
344#define JRI_NewString(env, unicode, len)	\
345	(((*(env))->NewString)(env, JRI_NewString_op, unicode, len))
346
347#define JRI_GetStringLength(env, string)	\
348	(((*(env))->GetStringLength)(env, JRI_GetStringLength_op, string))
349
350#define JRI_GetStringChars(env, string)	\
351	(((*(env))->GetStringChars)(env, JRI_GetStringChars_op, string))
352
353#define JRI_NewStringUTF(env, utf, len)	\
354	(((*(env))->NewStringUTF)(env, JRI_NewStringUTF_op, utf, len))
355
356#define JRI_GetStringUTFLength(env, string)	\
357	(((*(env))->GetStringUTFLength)(env, JRI_GetStringUTFLength_op, string))
358
359#define JRI_GetStringUTFChars(env, string)	\
360	(((*(env))->GetStringUTFChars)(env, JRI_GetStringUTFChars_op, string))
361
362#define JRI_NewScalarArray(env, length, elementSig, initialElements)	\
363	(((*(env))->NewScalarArray)(env, JRI_NewScalarArray_op, length, elementSig, initialElements))
364
365#define JRI_GetScalarArrayLength(env, array)	\
366	(((*(env))->GetScalarArrayLength)(env, JRI_GetScalarArrayLength_op, array))
367
368#define JRI_GetScalarArrayElements(env, array)	\
369	(((*(env))->GetScalarArrayElements)(env, JRI_GetScalarArrayElements_op, array))
370
371#define JRI_NewObjectArray(env, length, elementClass, initialElement)	\
372	(((*(env))->NewObjectArray)(env, JRI_NewObjectArray_op, length, elementClass, initialElement))
373
374#define JRI_GetObjectArrayLength(env, array)	\
375	(((*(env))->GetObjectArrayLength)(env, JRI_GetObjectArrayLength_op, array))
376
377#define JRI_GetObjectArrayElement(env, array, index)	\
378	(((*(env))->GetObjectArrayElement)(env, JRI_GetObjectArrayElement_op, array, index))
379
380#define JRI_SetObjectArrayElement(env, array, index, value)	\
381	(((*(env))->SetObjectArrayElement)(env, JRI_SetObjectArrayElement_op, array, index, value))
382
383#define JRI_RegisterNatives(env, clazz, nameAndSigArray, nativeProcArray)	\
384	(((*(env))->RegisterNatives)(env, JRI_RegisterNatives_op, clazz, nameAndSigArray, nativeProcArray))
385
386#define JRI_UnregisterNatives(env, clazz)	\
387	(((*(env))->UnregisterNatives)(env, JRI_UnregisterNatives_op, clazz))
388
389#define JRI_NewStringPlatform(env, string, len, encoding, encodingLength)	\
390	(((*(env))->NewStringPlatform)(env, JRI_NewStringPlatform_op, string, len, encoding, encodingLength))
391
392#define JRI_GetStringPlatformChars(env, string, encoding, encodingLength)	\
393	(((*(env))->GetStringPlatformChars)(env, JRI_GetStringPlatformChars_op, string, encoding, encodingLength))
394
395
396/*******************************************************************************
397 * JRIEnv Interface
398 ******************************************************************************/
399
400struct java_lang_ClassLoader;
401struct java_lang_Class;
402struct java_lang_Throwable;
403struct java_lang_Object;
404struct java_lang_String;
405
406struct JRIEnvInterface {
407	void*	reserved0;
408	void*	reserved1;
409	void*	reserved2;
410	void*	reserved3;
411	struct java_lang_Class*	(*FindClass)(JRIEnv* env, jint op, const char* a);
412	void	(*Throw)(JRIEnv* env, jint op, struct java_lang_Throwable* a);
413	void	(*ThrowNew)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b);
414	struct java_lang_Throwable*	(*ExceptionOccurred)(JRIEnv* env, jint op);
415	void	(*ExceptionDescribe)(JRIEnv* env, jint op);
416	void	(*ExceptionClear)(JRIEnv* env, jint op);
417	jglobal	(*NewGlobalRef)(JRIEnv* env, jint op, void* a);
418	void	(*DisposeGlobalRef)(JRIEnv* env, jint op, jglobal a);
419	void*	(*GetGlobalRef)(JRIEnv* env, jint op, jglobal a);
420	void	(*SetGlobalRef)(JRIEnv* env, jint op, jglobal a, void* b);
421	jbool	(*IsSameObject)(JRIEnv* env, jint op, void* a, void* b);
422	void*	(*NewObject)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
423	void*	(*NewObjectV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
424	void*	(*NewObjectA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
425	struct java_lang_Class*	(*GetObjectClass)(JRIEnv* env, jint op, void* a);
426	jbool	(*IsInstanceOf)(JRIEnv* env, jint op, void* a, struct java_lang_Class* b);
427	jint	(*GetMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
428	void*	(*CallMethod)(JRIEnv* env, jint op, void* a, jint b, ...);
429	void*	(*CallMethodV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
430	void*	(*CallMethodA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
431	jbool	(*CallMethodBoolean)(JRIEnv* env, jint op, void* a, jint b, ...);
432	jbool	(*CallMethodBooleanV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
433	jbool	(*CallMethodBooleanA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
434	jbyte	(*CallMethodByte)(JRIEnv* env, jint op, void* a, jint b, ...);
435	jbyte	(*CallMethodByteV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
436	jbyte	(*CallMethodByteA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
437	jchar	(*CallMethodChar)(JRIEnv* env, jint op, void* a, jint b, ...);
438	jchar	(*CallMethodCharV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
439	jchar	(*CallMethodCharA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
440	jshort	(*CallMethodShort)(JRIEnv* env, jint op, void* a, jint b, ...);
441	jshort	(*CallMethodShortV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
442	jshort	(*CallMethodShortA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
443	jint	(*CallMethodInt)(JRIEnv* env, jint op, void* a, jint b, ...);
444	jint	(*CallMethodIntV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
445	jint	(*CallMethodIntA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
446	jlong	(*CallMethodLong)(JRIEnv* env, jint op, void* a, jint b, ...);
447	jlong	(*CallMethodLongV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
448	jlong	(*CallMethodLongA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
449	jfloat	(*CallMethodFloat)(JRIEnv* env, jint op, void* a, jint b, ...);
450	jfloat	(*CallMethodFloatV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
451	jfloat	(*CallMethodFloatA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
452	jdouble	(*CallMethodDouble)(JRIEnv* env, jint op, void* a, jint b, ...);
453	jdouble	(*CallMethodDoubleV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
454	jdouble	(*CallMethodDoubleA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
455	jint	(*GetFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
456	void*	(*GetField)(JRIEnv* env, jint op, void* a, jint b);
457	jbool	(*GetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b);
458	jbyte	(*GetFieldByte)(JRIEnv* env, jint op, void* a, jint b);
459	jchar	(*GetFieldChar)(JRIEnv* env, jint op, void* a, jint b);
460	jshort	(*GetFieldShort)(JRIEnv* env, jint op, void* a, jint b);
461	jint	(*GetFieldInt)(JRIEnv* env, jint op, void* a, jint b);
462	jlong	(*GetFieldLong)(JRIEnv* env, jint op, void* a, jint b);
463	jfloat	(*GetFieldFloat)(JRIEnv* env, jint op, void* a, jint b);
464	jdouble	(*GetFieldDouble)(JRIEnv* env, jint op, void* a, jint b);
465	void	(*SetField)(JRIEnv* env, jint op, void* a, jint b, void* c);
466	void	(*SetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b, jbool c);
467	void	(*SetFieldByte)(JRIEnv* env, jint op, void* a, jint b, jbyte c);
468	void	(*SetFieldChar)(JRIEnv* env, jint op, void* a, jint b, jchar c);
469	void	(*SetFieldShort)(JRIEnv* env, jint op, void* a, jint b, jshort c);
470	void	(*SetFieldInt)(JRIEnv* env, jint op, void* a, jint b, jint c);
471	void	(*SetFieldLong)(JRIEnv* env, jint op, void* a, jint b, jlong c);
472	void	(*SetFieldFloat)(JRIEnv* env, jint op, void* a, jint b, jfloat c);
473	void	(*SetFieldDouble)(JRIEnv* env, jint op, void* a, jint b, jdouble c);
474	jbool	(*IsSubclassOf)(JRIEnv* env, jint op, struct java_lang_Class* a, struct java_lang_Class* b);
475	jint	(*GetStaticMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
476	void*	(*CallStaticMethod)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
477	void*	(*CallStaticMethodV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
478	void*	(*CallStaticMethodA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
479	jbool	(*CallStaticMethodBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
480	jbool	(*CallStaticMethodBooleanV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
481	jbool	(*CallStaticMethodBooleanA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
482	jbyte	(*CallStaticMethodByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
483	jbyte	(*CallStaticMethodByteV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
484	jbyte	(*CallStaticMethodByteA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
485	jchar	(*CallStaticMethodChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
486	jchar	(*CallStaticMethodCharV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
487	jchar	(*CallStaticMethodCharA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
488	jshort	(*CallStaticMethodShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
489	jshort	(*CallStaticMethodShortV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
490	jshort	(*CallStaticMethodShortA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
491	jint	(*CallStaticMethodInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
492	jint	(*CallStaticMethodIntV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
493	jint	(*CallStaticMethodIntA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
494	jlong	(*CallStaticMethodLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
495	jlong	(*CallStaticMethodLongV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
496	jlong	(*CallStaticMethodLongA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
497	jfloat	(*CallStaticMethodFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
498	jfloat	(*CallStaticMethodFloatV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
499	jfloat	(*CallStaticMethodFloatA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
500	jdouble	(*CallStaticMethodDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
501	jdouble	(*CallStaticMethodDoubleV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
502	jdouble	(*CallStaticMethodDoubleA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
503	jint	(*GetStaticFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
504	void*	(*GetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
505	jbool	(*GetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
506	jbyte	(*GetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
507	jchar	(*GetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
508	jshort	(*GetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
509	jint	(*GetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
510	jlong	(*GetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
511	jfloat	(*GetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
512	jdouble	(*GetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
513	void	(*SetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, void* c);
514	void	(*SetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbool c);
515	void	(*SetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbyte c);
516	void	(*SetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jchar c);
517	void	(*SetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jshort c);
518	void	(*SetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jint c);
519	void	(*SetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jlong c);
520	void	(*SetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jfloat c);
521	void	(*SetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jdouble c);
522	struct java_lang_String*	(*NewString)(JRIEnv* env, jint op, const jchar* a, jint b);
523	jint	(*GetStringLength)(JRIEnv* env, jint op, struct java_lang_String* a);
524	const jchar*	(*GetStringChars)(JRIEnv* env, jint op, struct java_lang_String* a);
525	struct java_lang_String*	(*NewStringUTF)(JRIEnv* env, jint op, const jbyte* a, jint b);
526	jint	(*GetStringUTFLength)(JRIEnv* env, jint op, struct java_lang_String* a);
527	const jbyte*	(*GetStringUTFChars)(JRIEnv* env, jint op, struct java_lang_String* a);
528	void*	(*NewScalarArray)(JRIEnv* env, jint op, jint a, const char* b, const jbyte* c);
529	jint	(*GetScalarArrayLength)(JRIEnv* env, jint op, void* a);
530	jbyte*	(*GetScalarArrayElements)(JRIEnv* env, jint op, void* a);
531	void*	(*NewObjectArray)(JRIEnv* env, jint op, jint a, struct java_lang_Class* b, void* c);
532	jint	(*GetObjectArrayLength)(JRIEnv* env, jint op, void* a);
533	void*	(*GetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b);
534	void	(*SetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b, void* c);
535	void	(*RegisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a, char** b, void** c);
536	void	(*UnregisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a);
537	struct java_lang_Class*	(*DefineClass)(JRIEnv* env, jint op, struct java_lang_ClassLoader* a, jbyte* b, jsize bLen);
538	struct java_lang_String*	(*NewStringPlatform)(JRIEnv* env, jint op, const jbyte* a, jint b, const jbyte* c, jint d);
539	const jbyte*	(*GetStringPlatformChars)(JRIEnv* env, jint op, struct java_lang_String* a, const jbyte* b, jint c);
540};
541
542/*
543** ****************************************************************************
544** JRIEnv Operation IDs
545** ***************************************************************************
546*/
547
548typedef enum JRIEnvOperations {
549	JRI_Reserved0_op,
550	JRI_Reserved1_op,
551	JRI_Reserved2_op,
552	JRI_Reserved3_op,
553	JRI_FindClass_op,
554	JRI_Throw_op,
555	JRI_ThrowNew_op,
556	JRI_ExceptionOccurred_op,
557	JRI_ExceptionDescribe_op,
558	JRI_ExceptionClear_op,
559	JRI_NewGlobalRef_op,
560	JRI_DisposeGlobalRef_op,
561	JRI_GetGlobalRef_op,
562	JRI_SetGlobalRef_op,
563	JRI_IsSameObject_op,
564	JRI_NewObject_op,
565	JRI_NewObject_op_va_list,
566	JRI_NewObject_op_array,
567	JRI_GetObjectClass_op,
568	JRI_IsInstanceOf_op,
569	JRI_GetMethodID_op,
570	JRI_CallMethod_op,
571	JRI_CallMethod_op_va_list,
572	JRI_CallMethod_op_array,
573	JRI_CallMethodBoolean_op,
574	JRI_CallMethodBoolean_op_va_list,
575	JRI_CallMethodBoolean_op_array,
576	JRI_CallMethodByte_op,
577	JRI_CallMethodByte_op_va_list,
578	JRI_CallMethodByte_op_array,
579	JRI_CallMethodChar_op,
580	JRI_CallMethodChar_op_va_list,
581	JRI_CallMethodChar_op_array,
582	JRI_CallMethodShort_op,
583	JRI_CallMethodShort_op_va_list,
584	JRI_CallMethodShort_op_array,
585	JRI_CallMethodInt_op,
586	JRI_CallMethodInt_op_va_list,
587	JRI_CallMethodInt_op_array,
588	JRI_CallMethodLong_op,
589	JRI_CallMethodLong_op_va_list,
590	JRI_CallMethodLong_op_array,
591	JRI_CallMethodFloat_op,
592	JRI_CallMethodFloat_op_va_list,
593	JRI_CallMethodFloat_op_array,
594	JRI_CallMethodDouble_op,
595	JRI_CallMethodDouble_op_va_list,
596	JRI_CallMethodDouble_op_array,
597	JRI_GetFieldID_op,
598	JRI_GetField_op,
599	JRI_GetFieldBoolean_op,
600	JRI_GetFieldByte_op,
601	JRI_GetFieldChar_op,
602	JRI_GetFieldShort_op,
603	JRI_GetFieldInt_op,
604	JRI_GetFieldLong_op,
605	JRI_GetFieldFloat_op,
606	JRI_GetFieldDouble_op,
607	JRI_SetField_op,
608	JRI_SetFieldBoolean_op,
609	JRI_SetFieldByte_op,
610	JRI_SetFieldChar_op,
611	JRI_SetFieldShort_op,
612	JRI_SetFieldInt_op,
613	JRI_SetFieldLong_op,
614	JRI_SetFieldFloat_op,
615	JRI_SetFieldDouble_op,
616	JRI_IsSubclassOf_op,
617	JRI_GetStaticMethodID_op,
618	JRI_CallStaticMethod_op,
619	JRI_CallStaticMethod_op_va_list,
620	JRI_CallStaticMethod_op_array,
621	JRI_CallStaticMethodBoolean_op,
622	JRI_CallStaticMethodBoolean_op_va_list,
623	JRI_CallStaticMethodBoolean_op_array,
624	JRI_CallStaticMethodByte_op,
625	JRI_CallStaticMethodByte_op_va_list,
626	JRI_CallStaticMethodByte_op_array,
627	JRI_CallStaticMethodChar_op,
628	JRI_CallStaticMethodChar_op_va_list,
629	JRI_CallStaticMethodChar_op_array,
630	JRI_CallStaticMethodShort_op,
631	JRI_CallStaticMethodShort_op_va_list,
632	JRI_CallStaticMethodShort_op_array,
633	JRI_CallStaticMethodInt_op,
634	JRI_CallStaticMethodInt_op_va_list,
635	JRI_CallStaticMethodInt_op_array,
636	JRI_CallStaticMethodLong_op,
637	JRI_CallStaticMethodLong_op_va_list,
638	JRI_CallStaticMethodLong_op_array,
639	JRI_CallStaticMethodFloat_op,
640	JRI_CallStaticMethodFloat_op_va_list,
641	JRI_CallStaticMethodFloat_op_array,
642	JRI_CallStaticMethodDouble_op,
643	JRI_CallStaticMethodDouble_op_va_list,
644	JRI_CallStaticMethodDouble_op_array,
645	JRI_GetStaticFieldID_op,
646	JRI_GetStaticField_op,
647	JRI_GetStaticFieldBoolean_op,
648	JRI_GetStaticFieldByte_op,
649	JRI_GetStaticFieldChar_op,
650	JRI_GetStaticFieldShort_op,
651	JRI_GetStaticFieldInt_op,
652	JRI_GetStaticFieldLong_op,
653	JRI_GetStaticFieldFloat_op,
654	JRI_GetStaticFieldDouble_op,
655	JRI_SetStaticField_op,
656	JRI_SetStaticFieldBoolean_op,
657	JRI_SetStaticFieldByte_op,
658	JRI_SetStaticFieldChar_op,
659	JRI_SetStaticFieldShort_op,
660	JRI_SetStaticFieldInt_op,
661	JRI_SetStaticFieldLong_op,
662	JRI_SetStaticFieldFloat_op,
663	JRI_SetStaticFieldDouble_op,
664	JRI_NewString_op,
665	JRI_GetStringLength_op,
666	JRI_GetStringChars_op,
667	JRI_NewStringUTF_op,
668	JRI_GetStringUTFLength_op,
669	JRI_GetStringUTFChars_op,
670	JRI_NewScalarArray_op,
671	JRI_GetScalarArrayLength_op,
672	JRI_GetScalarArrayElements_op,
673	JRI_NewObjectArray_op,
674	JRI_GetObjectArrayLength_op,
675	JRI_GetObjectArrayElement_op,
676	JRI_SetObjectArrayElement_op,
677	JRI_RegisterNatives_op,
678	JRI_UnregisterNatives_op,
679	JRI_DefineClass_op,
680	JRI_NewStringPlatform_op,
681	JRI_GetStringPlatformChars_op
682} JRIEnvOperations;
683
684#ifdef __cplusplus
685} /* extern "C" */
686#endif /* __cplusplus */
687
688#endif /* JRI_H */
689/******************************************************************************/
690