Update giws files with version 2.0.2 to improve performances:
[scilab.git] / scilab / modules / external_objects_java / src / jni / ScilabJavaObject.hxx
1 /* Generated by GIWS (version 2.0.2) with command:
2 giws --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/ScilabObjects.giws.xml
3 */
4 /*
5
6 This is generated code.
7
8 This software is a computer program whose purpose is to hide the complexity
9 of accessing Java objects/methods from C++ code.
10
11 This software is governed by the CeCILL-B license under French law and
12 abiding by the rules of distribution of free software.  You can  use,
13 modify and/ or redistribute the software under the terms of the CeCILL-B
14 license as circulated by CEA, CNRS and INRIA at the following URL
15 "http://www.cecill.info".
16
17 As a counterpart to the access to the source code and  rights to copy,
18 modify and redistribute granted by the license, users are provided only
19 with a limited warranty  and the software's author,  the holder of the
20 economic rights,  and the successive licensors  have only  limited
21 liability.
22
23 In this respect, the user's attention is drawn to the risks associated
24 with loading,  using,  modifying and/or developing or reproducing the
25 software by the user in light of its specific status of free software,
26 that may mean  that it is complicated to manipulate,  and  that  also
27 therefore means  that it is reserved for developers  and  experienced
28 professionals having in-depth computer knowledge. Users are therefore
29 encouraged to load and test the software's suitability as regards their
30 requirements in conditions enabling the security of their systems and/or
31 data to be ensured and,  more generally, to use and operate it in the
32 same conditions as regards security.
33
34 The fact that you are presently reading this means that you have had
35 knowledge of the CeCILL-B license and that you accept its terms.
36 */
37
38
39 #ifndef __ORG_SCILAB_MODULES_EXTERNAL_OBJECTS_JAVA_SCILABJAVAOBJECT__
40 #define __ORG_SCILAB_MODULES_EXTERNAL_OBJECTS_JAVA_SCILABJAVAOBJECT__
41 #include <iostream>
42 #include <string>
43 #include <string.h>
44 #include <stdlib.h>
45 #include <jni.h>
46
47 #include "GiwsException.hxx"
48
49 #if defined(_MSC_VER) /* Defined anyway with Visual */
50 #include <Windows.h>
51 #else
52 typedef signed char byte;
53 #endif
54
55
56 #ifndef GIWSEXPORT
57 # if defined(_MSC_VER) || defined(__WIN32__) || defined(__CYGWIN__)
58 #   if defined(STATIC_LINKED)
59 #     define GIWSEXPORT
60 #   else
61 #     define GIWSEXPORT __declspec(dllexport)
62 #   endif
63 # else
64 #   if __GNUC__ >= 4
65 #     define GIWSEXPORT __attribute__ ((visibility ("default")))
66 #   else
67 #     define GIWSEXPORT
68 #   endif
69 # endif
70 #endif
71
72 namespace org_scilab_modules_external_objects_java
73 {
74 class GIWSEXPORT ScilabJavaObject
75 {
76
77 private:
78     JavaVM * jvm;
79
80 protected:
81     jmethodID jintinvokejintintjstringjava_lang_StringjintArray_intintID; // cache method id
82     jmethodID jintextractjintintjintArray_intintID; // cache method id
83     jmethodID voidinsertjintintjintArray_intintjintintID; // cache method id
84     jmethodID jobjectArray_getInfosID; // cache method id
85     jmethodID voidinitScilabJavaObjectID; // cache method id
86     jmethodID voidgarbageCollectID; // cache method id
87     jmethodID jstringgetRepresentationjintintID; // cache method id
88     jmethodID jbooleanisValidJavaObjectjintintID; // cache method id
89     jmethodID voidenableTracejstringjava_lang_StringID; // cache method id
90     jmethodID voiddisableTraceID; // cache method id
91     jmethodID voidwriteLogjstringjava_lang_StringID; // cache method id
92     jmethodID voidsetFieldjintintjstringjava_lang_StringjintintID; // cache method id
93     jmethodID jintgetFieldjintintjstringjava_lang_StringID; // cache method id
94     jmethodID jintgetFieldTypejintintjstringjava_lang_StringID; // cache method id
95     jmethodID jintjavaCastjintintjstringjava_lang_StringID; // cache method id
96     jmethodID jintjavaCastjintintjintintID; // cache method id
97     jmethodID jstringgetClassNamejintintID; // cache method id
98     jmethodID jintgetArrayElementjintintjintArray_intintID; // cache method id
99     jmethodID voidsetArrayElementjintintjintArray_intintjintintID; // cache method id
100     jmethodID voidremoveScilabJavaObjectjintintID; // cache method id
101     jmethodID voidremoveScilabJavaObjectjintArray_intintID; // cache method id
102     jmethodID voidlimitDirectBufferjintintID; // cache method id
103     jmethodID jintisUnwrappablejintintID; // cache method id
104     jmethodID jintwrapjdoubledoubleID; // cache method id
105     jmethodID jintwrapjdoubleArray_doubledoubleID; // cache method id
106     jmethodID jintwrapjobjectArray__doubledoubleID; // cache method id
107     jmethodID jintwrapjintintID; // cache method id
108     jmethodID jintwrapjintArray_intintID; // cache method id
109     jmethodID jintwrapjobjectArray__intintID; // cache method id
110     jmethodID jintwrapjbytebyteID; // cache method id
111     jmethodID jintwrapjbyteArray_bytebyteID; // cache method id
112     jmethodID jintwrapjobjectArray__bytebyteID; // cache method id
113     jmethodID jintwrapjshortshortID; // cache method id
114     jmethodID jintwrapjshortArray_shortshortID; // cache method id
115     jmethodID jintwrapjobjectArray__shortshortID; // cache method id
116     jmethodID jintwrapjstringjava_lang_StringID; // cache method id
117     jmethodID jintwrapjobjectArray_java_lang_Stringjava_lang_StringID; // cache method id
118     jclass stringArrayClass;
119     jmethodID jintwrapjobjectArray__java_lang_Stringjava_lang_StringID; // cache method id
120     jmethodID jintwrapjbooleanbooleanID; // cache method id
121     jmethodID jintwrapjbooleanArray_booleanbooleanID; // cache method id
122     jmethodID jintwrapjobjectArray__booleanbooleanID; // cache method id
123     jmethodID jintwrapjcharcharID; // cache method id
124     jmethodID jintwrapjcharArray_charcharID; // cache method id
125     jmethodID jintwrapjobjectArray__charcharID; // cache method id
126     jmethodID jintwrapjfloatfloatID; // cache method id
127     jmethodID jintwrapjfloatArray_floatfloatID; // cache method id
128     jmethodID jintwrapjobjectArray__floatfloatID; // cache method id
129     jmethodID jintwrapjlonglongID; // cache method id
130     jmethodID jintwrapjlongArray_longlongID; // cache method id
131     jmethodID jintwrapjobjectArray__longlongID; // cache method id
132     jmethodID jobjectArray_getAccessibleFieldsjintintID; // cache method id
133     jmethodID jobjectArray_getAccessibleMethodsjintintID; // cache method id
134     jmethodID jobjectArray_getCompletionjintintjobjectArray_java_lang_Stringjava_lang_StringID; // cache method id
135
136
137
138     jobject instance;
139     jclass instanceClass; // cache class
140
141
142     // Caching (if any)
143
144
145     /**
146     * Get the environment matching to the current thread.
147     */
148     virtual JNIEnv * getCurrentEnv();
149
150 public:
151     // Constructor
152     /**
153     * Create a wrapping of the object from a JNIEnv.
154     * It will call the default constructor
155     * @param JEnv_ the Java Env
156     */
157     ScilabJavaObject(JavaVM * jvm_);
158
159     /**
160     * Create a wrapping of an already existing object from a JNIEnv.
161     * The object must have already been instantiated
162     * @param JEnv_ the Java Env
163     * @param JObj the object
164     */
165     ScilabJavaObject(JavaVM * jvm_, jobject JObj);
166
167
168     /**
169     * This is a fake constructor to avoid the constructor
170     * chaining when dealing with extended giws classes
171     */
172 #ifdef FAKEGIWSDATATYPE
173     ScilabJavaObject(fakeGiwsDataType::fakeGiwsDataType /* unused */) {}
174 #endif
175
176     // Destructor
177     ~ScilabJavaObject();
178
179     // Generic method
180     // Synchronization methods
181     /**
182     * Enter monitor associated with the object.
183     * Equivalent of creating a "synchronized(obj)" scope in Java.
184     */
185     void synchronize();
186
187     /**
188     * Exit monitor associated with the object.
189     * Equivalent of ending a "synchronized(obj)" scope.
190     */
191     void endSynchronize();
192
193     // Methods
194     static int invoke(JavaVM * jvm_, int id, char const* methodName, int const* args, int argsSize);
195
196     static int extract(JavaVM * jvm_, int id, int const* args, int argsSize);
197
198     static void insert(JavaVM * jvm_, int id, int const* keys, int keysSize, int value);
199
200     static char** getInfos(JavaVM * jvm_, int *lenRow);
201
202     static void initScilabJavaObject(JavaVM * jvm_);
203
204     static void garbageCollect(JavaVM * jvm_);
205
206     static char* getRepresentation(JavaVM * jvm_, int id);
207
208     static bool isValidJavaObject(JavaVM * jvm_, int id);
209
210     static void enableTrace(JavaVM * jvm_, char const* filename);
211
212     static void disableTrace(JavaVM * jvm_);
213
214     static void writeLog(JavaVM * jvm_, char const* s);
215
216     static void setField(JavaVM * jvm_, int id, char const* fieldName, int idarg);
217
218     static int getField(JavaVM * jvm_, int id, char const* fieldName);
219
220     static int getFieldType(JavaVM * jvm_, int id, char const* fieldName);
221
222     static int javaCast(JavaVM * jvm_, int id, char const* objName);
223
224     static int javaCast(JavaVM * jvm_, int id, int classId);
225
226     static char* getClassName(JavaVM * jvm_, int id);
227
228     static int getArrayElement(JavaVM * jvm_, int id, int const* index, int indexSize);
229
230     static void setArrayElement(JavaVM * jvm_, int id, int const* index, int indexSize, int idArg);
231
232     static void removeScilabJavaObject(JavaVM * jvm_, int id);
233
234     static void removeScilabJavaObject(JavaVM * jvm_, int const* id, int idSize);
235
236     static void limitDirectBuffer(JavaVM * jvm_, int id);
237
238     static int isUnwrappable(JavaVM * jvm_, int id);
239
240     static int wrap(JavaVM * jvm_, double x);
241
242     static int wrap(JavaVM * jvm_, double const* x, int xSize);
243
244     static int wrap(JavaVM * jvm_, double const* const* x, int xSize, int xSizeCol);
245
246     static int wrap(JavaVM * jvm_, int x);
247
248     static int wrap(JavaVM * jvm_, int const* x, int xSize);
249
250     static int wrap(JavaVM * jvm_, int const* const* x, int xSize, int xSizeCol);
251
252     static int wrap(JavaVM * jvm_, byte x);
253
254     static int wrap(JavaVM * jvm_, byte const* x, int xSize);
255
256     static int wrap(JavaVM * jvm_, byte const* const* x, int xSize, int xSizeCol);
257
258     static int wrap(JavaVM * jvm_, short x);
259
260     static int wrap(JavaVM * jvm_, short const* x, int xSize);
261
262     static int wrap(JavaVM * jvm_, short const* const* x, int xSize, int xSizeCol);
263
264     static int wrap(JavaVM * jvm_, char const* x);
265
266     static int wrap(JavaVM * jvm_, char const* const* x, int xSize);
267
268     static int wrap(JavaVM * jvm_, char const* const* const* x, int xSize, int xSizeCol);
269
270     static int wrap(JavaVM * jvm_, bool x);
271
272     static int wrap(JavaVM * jvm_, bool const* x, int xSize);
273
274     static int wrap(JavaVM * jvm_, bool const* const* x, int xSize, int xSizeCol);
275
276     static int wrap(JavaVM * jvm_, unsigned short x);
277
278     static int wrap(JavaVM * jvm_, unsigned short const* x, int xSize);
279
280     static int wrap(JavaVM * jvm_, unsigned short const* const* x, int xSize, int xSizeCol);
281
282     static int wrap(JavaVM * jvm_, float x);
283
284     static int wrap(JavaVM * jvm_, float const* x, int xSize);
285
286     static int wrap(JavaVM * jvm_, float const* const* x, int xSize, int xSizeCol);
287
288     static int wrap(JavaVM * jvm_, long long x);
289
290     static int wrap(JavaVM * jvm_, long long const* x, int xSize);
291
292     static int wrap(JavaVM * jvm_, long long const* const* x, int xSize, int xSizeCol);
293
294     static char** getAccessibleFields(JavaVM * jvm_, int id, int *lenRow);
295
296     static char** getAccessibleMethods(JavaVM * jvm_, int id, int *lenRow);
297
298     static char** getCompletion(JavaVM * jvm_, int id, char const* const* fieldPath, int fieldPathSize, int *lenRow);
299
300
301     /**
302     * Get class name to use for static methods
303     * @return class name to use for static methods
304     */
305
306     static const std::string className()
307     {
308         return "org/scilab/modules/external_objects_java/ScilabJavaObject";
309     }
310
311
312     /**
313     * Get class to use for static methods
314     * @return class to use for static methods
315     */
316
317     static jclass initClass(JNIEnv * curEnv)
318     {
319         static jclass cls = 0;
320
321         if (cls == 0)
322         {
323             jclass _cls = curEnv->FindClass(className().c_str());
324             if (_cls)
325             {
326                 cls = static_cast<jclass>(curEnv->NewGlobalRef(_cls));
327             }
328         }
329
330         return cls;
331     }
332
333 };
334
335
336 }
337 #endif