EO: insert/extract 'list()' and '$+1' is now handled
[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 class GIWSEXPORT ScilabJavaObject {
74
75 private:
76 JavaVM * jvm;
77
78 protected:
79 jmethodID jintinvokejintintjstringjava_lang_StringjintArray_intintID; // cache method id
80 jmethodID jintextractjintintjintArray_intintID; // cache method id
81 jmethodID voidinsertjintintjintArray_intintjintintID; // cache method id
82 jmethodID jobjectArray_getInfosID; // cache method id
83 jmethodID voidinitScilabJavaObjectID; // cache method id
84 jmethodID voidgarbageCollectID; // cache method id
85 jmethodID jstringgetRepresentationjintintID; // cache method id
86 jmethodID jbooleanisValidJavaObjectjintintID; // cache method id
87 jmethodID voidenableTracejstringjava_lang_StringID; // cache method id
88 jmethodID voiddisableTraceID; // cache method id
89 jmethodID voidwriteLogjstringjava_lang_StringID; // cache method id
90 jmethodID voidsetFieldjintintjstringjava_lang_StringjintintID; // cache method id
91 jmethodID jintgetFieldjintintjstringjava_lang_StringID; // cache method id
92 jmethodID jintgetFieldTypejintintjstringjava_lang_StringID; // cache method id
93 jmethodID jintjavaCastjintintjstringjava_lang_StringID; // cache method id
94 jmethodID jintjavaCastjintintjintintID; // cache method id
95 jmethodID jstringgetClassNamejintintID; // cache method id
96 jmethodID jintgetArrayElementjintintjintArray_intintID; // cache method id
97 jmethodID voidsetArrayElementjintintjintArray_intintjintintID; // cache method id
98 jmethodID voidremoveScilabJavaObjectjintintID; // cache method id
99 jmethodID voidremoveScilabJavaObjectjintArray_intintID; // cache method id
100 jmethodID voidlimitDirectBufferjintintID; // cache method id
101 jmethodID jintisUnwrappablejintintID; // cache method id
102 jmethodID jintwrapjdoubledoubleID; // cache method id
103 jmethodID jintwrapjdoubleArray_doubledoubleID; // cache method id
104 jmethodID jintwrapjobjectArray__doubledoubleID; // cache method id
105 jmethodID jintwrapjintintID; // cache method id
106 jmethodID jintwrapjintArray_intintID; // cache method id
107 jmethodID jintwrapjobjectArray__intintID; // cache method id
108 jmethodID jintwrapjbytebyteID; // cache method id
109 jmethodID jintwrapjbyteArray_bytebyteID; // cache method id
110 jmethodID jintwrapjobjectArray__bytebyteID; // cache method id
111 jmethodID jintwrapjshortshortID; // cache method id
112 jmethodID jintwrapjshortArray_shortshortID; // cache method id
113 jmethodID jintwrapjobjectArray__shortshortID; // cache method id
114 jmethodID jintwrapjstringjava_lang_StringID; // cache method id
115 jmethodID jintwrapjobjectArray_java_lang_Stringjava_lang_StringID; // cache method id
116 jclass stringArrayClass;
117 jmethodID jintwrapjobjectArray__java_lang_Stringjava_lang_StringID; // cache method id
118 jmethodID jintwrapjbooleanbooleanID; // cache method id
119 jmethodID jintwrapjbooleanArray_booleanbooleanID; // cache method id
120 jmethodID jintwrapjobjectArray__booleanbooleanID; // cache method id
121 jmethodID jintwrapjcharcharID; // cache method id
122 jmethodID jintwrapjcharArray_charcharID; // cache method id
123 jmethodID jintwrapjobjectArray__charcharID; // cache method id
124 jmethodID jintwrapjfloatfloatID; // cache method id
125 jmethodID jintwrapjfloatArray_floatfloatID; // cache method id
126 jmethodID jintwrapjobjectArray__floatfloatID; // cache method id
127 jmethodID jintwrapjlonglongID; // cache method id
128 jmethodID jintwrapjlongArray_longlongID; // cache method id
129 jmethodID jintwrapjobjectArray__longlongID; // cache method id
130 jmethodID jintwrapListjintArray_intintID; // cache method id
131 jmethodID jintwrapPolyjdoubleArray_doubledoubleID; // 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 int wrapList(JavaVM * jvm_, int const* ids, int idsSize);
295
296 static int wrapPoly(JavaVM * jvm_, double const* coefs, int coefsSize);
297
298 static char** getAccessibleFields(JavaVM * jvm_, int id, int *lenRow);
299
300 static char** getAccessibleMethods(JavaVM * jvm_, int id, int *lenRow);
301
302 static char** getCompletion(JavaVM * jvm_, int id, char const* const* fieldPath, int fieldPathSize, int *lenRow);
303
304
305                         /**
306                         * Get class name to use for static methods
307                         * @return class name to use for static methods
308                         */
309                         
310                 static const std::string className()
311                 {
312                 return "org/scilab/modules/external_objects_java/ScilabJavaObject";
313                 }
314                 
315
316                         /**
317                         * Get class to use for static methods
318                         * @return class to use for static methods
319                         */
320                         
321                 static jclass initClass(JNIEnv * curEnv)
322                 {
323                     static jclass cls = 0;
324
325                     if (cls == 0)
326                     {
327                         jclass _cls = curEnv->FindClass(className().c_str());
328                         if (_cls)
329                         {
330                             cls = static_cast<jclass>(curEnv->NewGlobalRef(_cls));
331                         }
332                     }
333
334                     return cls;
335                  }
336                 
337 };
338
339
340 }
341 #endif