Mercurial > hg > octave-nkf
annotate libinterp/octave-value/ov-java.cc @ 20333:8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
* libinterp/octave-value/ov-java.cc (unbox): when calling a java method,
octave core types should be converted automatically into equivalent java
types. In the case of integers, we must pick the closest one but at the
moment all were being converted to Integer (int32_t). This fixes it, even
if it meas to lose data (as is the case in some of the added tests). Also
reduce some code duplication by using macros since the code is similar to
the code for float and doubles.
author | Carnë Draug <carandraug@octave.org> |
---|---|
date | Tue, 21 Apr 2015 00:32:52 +0100 |
parents | 81fcf4aa9e03 |
children | 6ee26f894346 |
rev | line source |
---|---|
15746
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
1 /* |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
2 |
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17281
diff
changeset
|
3 Copyright (C) 2007, 2013 Michael Goffioul |
15746
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
4 |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
5 This file is part of Octave. |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
6 |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
7 Octave is free software; you can redistribute it and/or modify it |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
8 under the terms of the GNU General Public License as published by the |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
9 Free Software Foundation; either version 3 of the License, or (at your |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
10 option) any later version. |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
11 |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but WITHOUT |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
15 for more details. |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
16 |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
18 along with Octave; see the file COPYING. If not, see |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
19 <http://www.gnu.org/licenses/>. |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
20 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
21 */ |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
22 |
15736
6faa01ff2967
build: Add --disable-java option to configure (bug #37838).
Rik <rik@octave.org>
parents:
15625
diff
changeset
|
23 #ifdef HAVE_CONFIG_H |
6faa01ff2967
build: Add --disable-java option to configure (bug #37838).
Rik <rik@octave.org>
parents:
15625
diff
changeset
|
24 #include <config.h> |
6faa01ff2967
build: Add --disable-java option to configure (bug #37838).
Rik <rik@octave.org>
parents:
15625
diff
changeset
|
25 #endif |
6faa01ff2967
build: Add --disable-java option to configure (bug #37838).
Rik <rik@octave.org>
parents:
15625
diff
changeset
|
26 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
27 #include "defun.h" |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
28 #include "error.h" |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
29 #include "fpucw.h" |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
30 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
31 #if HAVE_FPU_CONTROL_H |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
32 #include <fpu_control.h> |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
33 #endif |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
34 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
35 #if defined HAVE_JAVA |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 |
15755
3216dafbbd48
ov-java.cc: Correcty typo HAVE_WINDWOS_H to HAVE_WINDOWS_H
Rik <rik@octave.org>
parents:
15754
diff
changeset
|
37 #if defined (HAVE_WINDOWS_H) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 #include <windows.h> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
40 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
41 #include <algorithm> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
42 #include <map> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
43 #include <iostream> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
44 #include <fstream> |
20238
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
45 #include <string> |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
46 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
47 #include <clocale> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
48 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
49 #include "Cell.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
50 #include "cmd-edit.h" |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
51 #include "defaults.h" |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
52 #include "file-ops.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
53 #include "file-stat.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
54 #include "load-path.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
55 #include "oct-env.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
56 #include "oct-shlib.h" |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
57 #include "ov-java.h" |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
58 #include "parse.h" |
15747
4be890c5527c
* __java__.cc, __java__.h: Clean up lists of include files.
John W. Eaton <jwe@octave.org>
parents:
15746
diff
changeset
|
59 #include "variables.h" |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
60 |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
61 typedef jint (JNICALL *JNI_CreateJavaVM_t) (JavaVM **pvm, JNIEnv **penv, |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
62 void *args); |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
63 typedef jint (JNICALL *JNI_GetCreatedJavaVMs_t) (JavaVM **pvm, jsize bufLen, |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
64 jsize *nVMs); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
65 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
66 extern "C" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
67 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
68 JNIEXPORT jboolean JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
69 Java_org_octave_Octave_call (JNIEnv *, jclass, jstring, jobjectArray, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
70 jobjectArray); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
71 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
72 Java_org_octave_OctaveReference_doFinalize (JNIEnv *, jclass, jint); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
73 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
74 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
75 Java_org_octave_Octave_doInvoke (JNIEnv *, jclass, jint, jobjectArray); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
76 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
77 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
78 Java_org_octave_Octave_doEvalString (JNIEnv *, jclass, jstring); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
79 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
80 JNIEXPORT jboolean JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
81 Java_org_octave_Octave_needThreadedInvokation (JNIEnv *, jclass); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
82 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
83 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
84 static JavaVM *jvm = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
85 static bool jvm_attached = false; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
86 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
87 // Need to keep hold of the shared library handle until exit. |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
88 static octave_shlib jvm_lib; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
89 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
90 static std::map<int,octave_value> listener_map; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
91 static std::map<int,octave_value> octave_ref_map; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
92 static int octave_java_refcount = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
93 static long octave_thread_ID = -1; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
94 |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
95 bool Vjava_matrix_autoconversion = false; |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
96 bool Vjava_unsigned_autoconversion = true; |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
97 bool Vdebug_java = false; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
98 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
99 class JVMArgs |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
100 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
101 public: |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
102 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
103 JVMArgs (void) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
104 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
105 vm_args.version = JNI_VERSION_1_2; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
106 vm_args.nOptions = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
107 vm_args.options = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
108 vm_args.ignoreUnrecognized = false; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
109 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
110 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
111 ~JVMArgs (void) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
112 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
113 clean (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
114 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
115 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
116 JavaVMInitArgs* to_args () |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
117 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
118 update (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
119 return &vm_args; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
120 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
121 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
122 void add (const std::string& opt) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
123 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
124 java_opts.push_back (opt); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
125 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
126 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
127 void read_java_opts (const std::string& filename) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
128 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
129 std::ifstream js (filename.c_str ()); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
130 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
131 if (! js.bad () && ! js.fail ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
132 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
133 std::string line; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
134 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
135 while (! js.eof () && ! js.fail ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
136 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
137 std::getline (js, line); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
138 if (line.length () > 2 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
139 && (line.find ("-D") == 0 || line.find ("-X") == 0)) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
140 java_opts.push_back (line); |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
141 else if (line.length () > 0 && Vdebug_java) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
142 std::cerr << "invalid JVM option, skipping: " << line << std::endl; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
143 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
144 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
145 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
146 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
147 private: |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
148 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
149 void clean (void) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
150 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
151 if (vm_args.options != 0) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
152 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
153 for (int i = 0; i < vm_args.nOptions; i++) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
154 delete [] vm_args.options[i].optionString; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
155 delete [] vm_args.options; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
156 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
157 vm_args.options = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
158 vm_args.nOptions = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
159 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
160 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
161 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
162 void update (void) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
163 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
164 clean (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
165 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
166 if (java_opts.size () > 0) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
167 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
168 int index = 0; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
169 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
170 vm_args.nOptions = java_opts.size (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
171 vm_args.options = new JavaVMOption [vm_args.nOptions]; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
172 for (std::list<std::string>::const_iterator it = java_opts.begin (); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
173 it != java_opts.end (); ++it) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
174 { |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
175 if (Vdebug_java) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
176 std::cout << *it << std::endl; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
177 vm_args.options[index++].optionString = strsave ((*it).c_str ()); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
178 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
179 java_opts.clear (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
180 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
181 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
182 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
183 private: |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
184 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
185 JavaVMInitArgs vm_args; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
186 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
187 std::list<std::string> java_opts; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
188 }; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
189 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
190 #ifdef __WIN32__ |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
191 static std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
192 read_registry_string (const std::string& key, const std::string& value) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
193 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
194 HKEY hkey; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
195 DWORD len; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
196 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
197 std::string retval; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
198 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
199 if (! RegOpenKeyEx (HKEY_LOCAL_MACHINE, key.c_str (), 0, KEY_READ, &hkey)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
200 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
201 if (! RegQueryValueEx (hkey, value.c_str (), 0, 0, 0, &len)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
202 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
203 retval.resize (len); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
204 if (RegQueryValueEx (hkey, value.c_str (), 0, 0, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
205 (LPBYTE)&retval[0], &len)) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
206 retval = ""; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
207 else if (retval[len-1] == '\0') |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
208 retval.resize (--len); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
209 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
210 RegCloseKey (hkey); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
211 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
212 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
213 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
214 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
215 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
216 static std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
217 get_module_filename (HMODULE hMod) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
218 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
219 int n = 1024; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
220 std::string retval (n, '\0'); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
221 bool found = false; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
222 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
223 while (n < 65536) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
224 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
225 int status = GetModuleFileName(hMod, &retval[0], n); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
226 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
227 if (status < n) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
228 { |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
229 retval.resize (n); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
230 found = true; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
231 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
232 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
233 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
234 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
235 n *= 2; |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
236 retval.resize (n); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
237 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
238 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
239 return (found ? retval : ""); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
240 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
241 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
242 static void |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
243 set_dll_directory (const std::string& dir = "") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
244 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
245 typedef BOOL (WINAPI *dllfcn_t) (LPCTSTR path); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
246 |
17898
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
247 static dllfcn_t dllfcn = 0; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
248 static bool first = true; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
249 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
250 if (! dllfcn && first) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
251 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
252 HINSTANCE hKernel32 = GetModuleHandle ("kernel32"); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
253 dllfcn = reinterpret_cast<dllfcn_t> (GetProcAddress (hKernel32, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
254 "SetDllDirectoryA")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
255 first = false; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
256 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
257 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
258 if (dllfcn) |
17898
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
259 dllfcn (dir.empty () ? 0 : dir.c_str ()); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
260 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
261 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
262 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
263 static std::string |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
264 initial_java_dir (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
265 { |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
266 static std::string java_dir; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
267 |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
268 if (java_dir.empty ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
269 { |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
270 java_dir = octave_env::getenv ("OCTAVE_JAVA_DIR"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
271 |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
272 if (java_dir.empty ()) |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
273 java_dir = Vfcn_file_dir + file_ops::dir_sep_str () + "java"; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
274 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
275 |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
276 return java_dir; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
277 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
278 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
279 // Read the content of a file filename (usually "classpath.txt") |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
280 // |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
281 // Returns a string with all lines concatenated and separated |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
282 // by the path separator character. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
283 // The return string also starts with a path separator so that |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
284 // it can be appended easily to a base classpath. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
285 // |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
286 // The file "classpath.txt" must contain single lines, each |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
287 // with a classpath. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
288 // Comment lines starting with a '#' or a '%' in column 1 are allowed. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
289 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
290 static std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
291 read_classpath_txt (const std::string& filepath) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
292 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
293 std::string classpath; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
294 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
295 std::ifstream fs (filepath.c_str ()); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
296 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
297 if (! fs.bad () && ! fs.fail ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
298 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
299 std::string line; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
300 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
301 while (! fs.eof () && ! fs.fail ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
302 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
303 std::getline (fs, line); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
304 |
15798
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
305 if (line.length () > 0) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
306 { |
15798
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
307 if (line[0] == '#' || line[0] == '%') |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
308 ; // skip comments |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
309 else |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
310 { |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
311 // prepend separator character |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
312 classpath.append (dir_path::path_sep_str ()); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
313 |
15798
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
314 // append content of line without whitespace |
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
315 int last = line.find_last_not_of (" \t\f\v\r\n"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
316 |
15798
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
317 classpath.append (file_ops::tilde_expand (line.substr (0, last+1))); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
318 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
319 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
320 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
321 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
322 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
323 return (classpath); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
324 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
325 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
326 static std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
327 initial_class_path (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
328 { |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
329 std::string java_dir = initial_java_dir (); |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
330 |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
331 std::string retval = java_dir; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
332 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
333 // find octave.jar file |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
334 if (! retval.empty ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
335 { |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
336 std::string sep = file_ops::dir_sep_str (); |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
337 |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
338 std::string jar_file = java_dir + sep + "octave.jar"; |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
339 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
340 file_stat jar_exists (jar_file); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
341 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
342 if (jar_exists) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
343 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
344 // initialize static classpath to octave.jar |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
345 retval = jar_file; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
346 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
347 // The base classpath has been set. |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
348 // Try to find an optional file specifying classpaths in 3 places. |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
349 // 1) Current directory |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
350 // 2) User's home directory |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
351 // 3) Octave installation directory where octave.jar resides |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
352 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
353 // The filename is "javaclasspath.txt", but historically |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
354 // has been "classpath.txt" so both are supported. |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
355 std::string cp_list[] = {"javaclasspath.txt", "classpath.txt"}; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
356 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
357 for (int i=0; i<2; i++) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
358 { |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
359 std::string filename = cp_list[i]; |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
360 std::string cp_file = filename; |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
361 file_stat cp_exists; |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
362 |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
363 // Try to find classpath file in the current directory. |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
364 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
365 cp_exists = file_stat (cp_file); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
366 if (cp_exists) |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
367 { |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
368 // File found. Add its contents to the static classpath. |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
369 std::string classpath = read_classpath_txt (cp_file); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
370 retval.append (classpath); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
371 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
372 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
373 // Try to find classpath file in the user's home directory. |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
374 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
375 cp_file = "~" + sep + filename; |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
376 cp_file = file_ops::tilde_expand (cp_file); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
377 cp_exists = file_stat (cp_file); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
378 if (cp_exists) |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
379 { |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
380 // File found. Add its contents to the static classpath. |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
381 std::string classpath = read_classpath_txt (cp_file); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
382 retval.append (classpath); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
383 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
384 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
385 // Try to find classpath file in the Octave install directory. |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
386 |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
387 cp_file = java_dir + sep + filename; |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
388 cp_exists = file_stat (cp_file); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
389 if (cp_exists) |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
390 { |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
391 // File found. Add its contents to the static classpath. |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
392 std::string classpath = read_classpath_txt (cp_file); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
393 retval.append (classpath); |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
394 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
395 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
396 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
397 else |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
398 throw std::string ("octave.jar does not exist: ") + jar_file; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
399 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
400 else |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
401 throw std::string ("initial java dir is empty"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
402 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
403 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
404 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
405 |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
406 #ifndef _FPU_DEFAULT |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
407 #if defined __i386__ || defined __x86_64__ |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
408 #define _FPU_DEFAULT 0x037f |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
409 #else |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
410 #define _FPU_DEFAULT 0 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
411 #endif |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
412 #endif |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
413 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
414 static void |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
415 restore_fpu_state (void) |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
416 { |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
417 fpucw_t cw = GET_FPUCW (); |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
418 if (cw != _FPU_DEFAULT) |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
419 SET_FPUCW (_FPU_DEFAULT); |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
420 } |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
421 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
422 static void |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
423 initialize_jvm (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
424 { |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
425 // Most of the time JVM already exists and has been initialized. |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
426 if (jvm) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
427 return; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
428 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
429 JNIEnv *current_env; |
17898
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
430 const char *static_locale = setlocale (LC_ALL, 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
431 const std::string locale (static_locale); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
432 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
433 #if defined (__WIN32__) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
434 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
435 HMODULE hMod = GetModuleHandle ("jvm.dll"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
436 std::string jvm_lib_path; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
437 std::string old_cwd; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
438 |
17898
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
439 if (hMod) |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
440 { |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
441 // JVM seems to be already loaded, better to use that DLL instead |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
442 // of looking in the registry, to avoid opening a different JVM. |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
443 jvm_lib_path = get_module_filename (hMod); |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
444 |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
445 if (jvm_lib_path.empty ()) |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
446 throw std::string ("unable to find Java Runtime Environment"); |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
447 } |
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
448 else |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
449 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
450 // In windows, find the location of the JRE from the registry |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
451 // and load the symbol from the dll. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
452 std::string key, value; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
453 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
454 key = "software\\javasoft\\java runtime environment"; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
455 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
456 value = octave_env::getenv ("JAVA_VERSION"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
457 if (value.empty ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
458 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
459 value = "Currentversion"; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
460 std::string regval = read_registry_string (key,value); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
461 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
462 if (regval.empty ()) |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
463 throw std::string ("unable to find Java Runtime Environment: ") |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
464 + key + "::" + value; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
465 value = regval; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
466 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
467 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
468 key = key + "\\" + value; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
469 value = "RuntimeLib"; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
470 jvm_lib_path = read_registry_string (key, value); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
471 if (jvm_lib_path.empty ()) |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
472 throw std::string ("unable to find Java Runtime Environment: ") |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
473 + key + "::" + value; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
474 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
475 std::string jvm_bin_path; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
476 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
477 value = "JavaHome"; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
478 jvm_bin_path = read_registry_string (key, value); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
479 if (! jvm_bin_path.empty ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
480 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
481 jvm_bin_path = (jvm_bin_path + std::string ("\\bin")); |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
482 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
483 old_cwd = octave_env::get_current_directory (); |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
484 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
485 set_dll_directory (jvm_bin_path); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
486 octave_env::chdir (jvm_bin_path); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
487 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
488 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
489 |
15763
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
490 #else // Not Win32 system |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
491 |
15763
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
492 // JAVA_LDPATH determined by configure and set in config.h |
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
493 #if defined (__APPLE__) |
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
494 std::string jvm_lib_path = JAVA_LDPATH + std::string ("/libjvm.dylib"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
495 #else |
15763
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
496 std::string jvm_lib_path = JAVA_LDPATH + std::string ("/libjvm.so"); |
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
497 #endif |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
498 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
499 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
500 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
501 jsize nVMs = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
502 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
503 # if !defined (__APPLE__) && !defined (__MACH__) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
504 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
505 octave_shlib lib (jvm_lib_path); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
506 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
507 if (!lib) |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
508 throw std::string ("unable to load Java Runtime Environment from ") |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
509 + jvm_lib_path; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
510 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
511 #if defined (__WIN32__) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
512 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
513 set_dll_directory (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
514 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
515 if (! old_cwd.empty ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
516 octave_env::chdir (old_cwd); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
517 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
518 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
519 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
520 JNI_CreateJavaVM_t create_vm = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
521 reinterpret_cast<JNI_CreateJavaVM_t> (lib.search ("JNI_CreateJavaVM")); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
522 JNI_GetCreatedJavaVMs_t get_vm = |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
523 reinterpret_cast<JNI_GetCreatedJavaVMs_t> (lib.search ("JNI_GetCreatedJavaVMs")); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
524 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
525 if (!create_vm) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
526 throw std::string ("unable to find JNI_CreateJavaVM in ") + jvm_lib_path; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
527 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
528 if (!get_vm) |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
529 throw std::string ("unable to find JNI_GetCreatedJavaVMs in ") |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
530 + jvm_lib_path; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
531 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
532 if (get_vm (&jvm, 1, &nVMs) == 0 && nVMs > 0) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
533 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
534 #else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
535 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
536 // FIXME: There exists a problem on the Mac platform that |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
537 // octave_shlib lib (jvm_lib_path) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
538 // doesn't work with 'not-bundled' *.oct files. |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
539 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
540 if (JNI_GetCreatedJavaVMs (&jvm, 1, &nVMs) == 0 && nVMs > 0) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
541 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
542 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
543 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
544 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
545 // At least one JVM exists, try to attach to it |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
546 |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
547 switch (jvm->GetEnv (reinterpret_cast<void **> (¤t_env), |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
548 JNI_VERSION_1_2)) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
549 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
550 case JNI_EDETACHED: |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
551 // Attach the current thread |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
552 JavaVMAttachArgs vm_args; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
553 vm_args.version = JNI_VERSION_1_2; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
554 vm_args.name = const_cast<char *> ("octave"); |
17898
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
555 vm_args.group = 0; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
556 if (jvm->AttachCurrentThread (reinterpret_cast<void **> (¤t_env), |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
557 &vm_args) < 0) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
558 throw std::string ("JVM internal error, unable to attach octave to existing JVM"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
559 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
560 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
561 case JNI_EVERSION: |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
562 throw std::string ("JVM internal error, the required JNI version is not supported"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
563 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
564 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
565 case JNI_OK: |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
566 // Don't do anything, the current thread is already attached to JVM |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
567 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
568 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
569 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
570 jvm_attached = true; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
571 //printf ("JVM attached\n"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
572 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
573 else |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
574 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
575 // No JVM exists, create one |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
576 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
577 JVMArgs vm_args; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
578 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
579 vm_args.add ("-Djava.class.path=" + initial_class_path ()); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
580 vm_args.add ("-Xrs"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
581 vm_args.add ("-Djava.system.class.loader=org.octave.OctClassLoader"); |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
582 vm_args.read_java_opts (initial_java_dir () + file_ops::dir_sep_str () + |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
583 "java.opts"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
584 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
585 # if !defined (__APPLE__) && !defined (__MACH__) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
586 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
587 if (create_vm (&jvm, ¤t_env, vm_args.to_args ()) != JNI_OK) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
588 throw std::string ("unable to start Java VM in ")+jvm_lib_path; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
589 //printf ("JVM created\n"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
590 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
591 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
592 jvm_lib = lib; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
593 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
594 #else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
595 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
596 if (JNI_CreateJavaVM (&jvm, reinterpret_cast<void **> (¤t_env), |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
597 vm_args.to_args ()) != JNI_OK) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
598 throw std::string ("unable to start Java VM in ")+jvm_lib_path; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
599 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
600 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
601 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
602 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
603 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
604 setlocale (LC_ALL, locale.c_str ()); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
605 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
606 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
607 static void |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
608 terminate_jvm (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
609 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
610 if (jvm) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
611 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
612 if (jvm_attached) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
613 jvm->DetachCurrentThread (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
614 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
615 jvm->DestroyJavaVM (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
616 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
617 jvm = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
618 jvm_attached = false; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
619 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
620 if (jvm_lib) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
621 jvm_lib.close (); |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
622 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
623 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
624 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
625 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
626 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
627 std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
628 jstring_to_string (JNIEnv* jni_env, jstring s) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
629 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
630 std::string retval; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
631 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
632 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
633 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
634 const char *cstr = jni_env->GetStringUTFChars (s, 0); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
635 retval = cstr; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
636 jni_env->ReleaseStringUTFChars (s, cstr); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
637 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
638 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
639 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
640 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
641 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
642 std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
643 jstring_to_string (JNIEnv* jni_env, jobject obj) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
644 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
645 std::string retval; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
646 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
647 if (jni_env && obj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
648 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
649 jclass_ref cls (jni_env, jni_env->FindClass ("java/lang/String")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
650 if (cls) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
651 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
652 if (jni_env->IsInstanceOf (obj, cls)) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
653 retval = jstring_to_string (jni_env, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
654 reinterpret_cast<jstring> (obj)); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
655 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
656 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
657 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
658 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
659 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
660 |
15824
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
661 bool |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
662 octave_java::is_java_string (void) const |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
663 { |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
664 JNIEnv *current_env = thread_jni_env (); |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
665 |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
666 if (current_env && java_object) |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
667 { |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
668 jclass_ref cls (current_env, current_env->FindClass ("java/lang/String")); |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
669 return current_env->IsInstanceOf (java_object, cls); |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
670 } |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
671 |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
672 return false; |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
673 } |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
674 |
20238
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
675 bool |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
676 octave_java::is_instance_of (const std::string& cls_name) const |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
677 { |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
678 JNIEnv *current_env = thread_jni_env (); |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
679 |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
680 std::string cls_cpp = cls_name; |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
681 std::replace (cls_cpp.begin (), cls_cpp.end (), '.', '/'); |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
682 |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
683 if (current_env && java_object) |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
684 { |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
685 jclass_ref cls (current_env, current_env->FindClass (cls_cpp.c_str ())); |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
686 if (current_env->ExceptionCheck ()) |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
687 current_env->ExceptionClear(); |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
688 else |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
689 return current_env->IsInstanceOf (java_object, cls); |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
690 } |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
691 return false; |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
692 } |
107130a0490c
isa: check parent class of java objects (bug #42702)
Carnë Draug <carandraug@octave.org>
parents:
20068
diff
changeset
|
693 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
694 static octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
695 check_exception (JNIEnv* jni_env) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
696 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
697 octave_value retval; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
698 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
699 jthrowable_ref ex (jni_env, jni_env->ExceptionOccurred ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
700 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
701 if (ex) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
702 { |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
703 if (Vdebug_java) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
704 jni_env->ExceptionDescribe (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
705 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
706 jni_env->ExceptionClear (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
707 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
708 jclass_ref jcls (jni_env, jni_env->GetObjectClass (ex)); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
709 jmethodID mID = jni_env->GetMethodID (jcls, "toString", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
710 "()Ljava/lang/String;"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
711 jstring_ref js (jni_env, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
712 reinterpret_cast<jstring> (jni_env->CallObjectMethod (ex, mID))); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
713 std::string msg = jstring_to_string (jni_env, js); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
714 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
715 error ("[java] %s", msg.c_str ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
716 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
717 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
718 retval = Matrix (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
719 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
720 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
721 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
722 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
723 static jclass |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
724 find_octave_class (JNIEnv *jni_env, const char *name) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
725 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
726 static std::string class_loader; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
727 static jclass uiClass = 0; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
728 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
729 jclass jcls = jni_env->FindClass (name); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
730 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
731 if (jcls == 0) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
732 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
733 jni_env->ExceptionClear (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
734 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
735 if (! uiClass) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
736 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
737 if (class_loader.empty ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
738 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
739 jclass_ref syscls (jni_env, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
740 jni_env->FindClass ("java/lang/System")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
741 jmethodID mID = jni_env->GetStaticMethodID (syscls, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
742 jstring_ref js (jni_env, jni_env->NewStringUTF ("octave.class.loader")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
743 js = reinterpret_cast<jstring> (jni_env->CallStaticObjectMethod (syscls, mID, jstring (js))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
744 class_loader = jstring_to_string (jni_env, jstring (js)); |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
745 std::replace (class_loader.begin (), class_loader.end (), |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
746 '.', '/'); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
747 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
748 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
749 jclass_ref uicls (jni_env, jni_env->FindClass (class_loader.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
750 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
751 if (! uicls) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
752 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
753 jni_env->ExceptionClear (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
754 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
755 /* Try the netbeans way */ |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
756 std::replace (class_loader.begin (), class_loader.end (), |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
757 '/', '.'); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
758 jclass_ref jcls2 (jni_env, jni_env->FindClass ("org/openide/util/Lookup")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
759 jmethodID mID = jni_env->GetStaticMethodID (jcls2, "getDefault", "()Lorg/openide/util/Lookup;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
760 jobject_ref lObj (jni_env, jni_env->CallStaticObjectMethod (jcls2, mID)); |
20068
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
761 mID = jni_env->GetMethodID (jcls2, "lookup", |
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19795
diff
changeset
|
762 "(Ljava/lang/Class;)Ljava/lang/Object;"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
763 jclass_ref cLoaderCls (jni_env, jni_env->FindClass ("java/lang/ClassLoader")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
764 jobject_ref cLoader (jni_env, jni_env->CallObjectMethod (lObj, mID, jclass (cLoaderCls))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
765 mID = jni_env->GetMethodID (cLoaderCls, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
766 jstring_ref js (jni_env, jni_env->NewStringUTF (class_loader.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
767 uicls = reinterpret_cast<jclass> (jni_env->CallObjectMethod (cLoader, mID, jstring (js))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
768 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
769 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
770 if (uicls) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
771 uiClass = reinterpret_cast<jclass> (jni_env->NewGlobalRef (jclass (uicls))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
772 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
773 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
774 if (uiClass) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
775 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
776 jmethodID mID = jni_env->GetStaticMethodID (uiClass, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
777 jstring_ref js (jni_env, jni_env->NewStringUTF (name)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
778 jcls = reinterpret_cast<jclass> (jni_env->CallStaticObjectMethod (uiClass, mID, jstring (js))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
779 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
780 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
781 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
782 return jcls; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
783 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
784 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
785 static dim_vector |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
786 compute_array_dimensions (JNIEnv* jni_env, jobject obj) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
787 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
788 jobjectArray_ref jobj (jni_env, reinterpret_cast<jobjectArray> (obj)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
789 jclass_ref jcls (jni_env, jni_env->GetObjectClass (obj)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
790 jclass_ref ccls (jni_env, jni_env->GetObjectClass (jcls)); |
15859
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
791 jmethodID isArray_ID = jni_env->GetMethodID (ccls, "isArray", "()Z"); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
792 jmethodID getComponentType_ID = jni_env->GetMethodID (ccls, "getComponentType", "()Ljava/lang/Class;"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
793 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
794 dim_vector dv (1, 1); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
795 int idx = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
796 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
797 jobj.detach (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
798 while (jcls && jni_env->CallBooleanMethod (jcls, isArray_ID)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
799 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
800 int len = (jobj ? jni_env->GetArrayLength (jobj) : 0); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
801 if (idx >= dv.length ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
802 dv.resize (idx+1); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
803 dv(idx) = len; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
804 jcls = reinterpret_cast<jclass> (jni_env->CallObjectMethod (jcls, getComponentType_ID)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
805 jobj = (len > 0 ? reinterpret_cast<jobjectArray> (jni_env->GetObjectArrayElement (jobj, 0)) : 0); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
806 idx++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
807 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
808 |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
809 restore_fpu_state (); |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
810 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
811 return dv; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
812 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
813 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
814 static jobject |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
815 make_java_index (JNIEnv* jni_env, const octave_value_list& idx) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
816 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
817 jclass_ref ocls (jni_env, jni_env->FindClass ("[I")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
818 jobjectArray retval = jni_env->NewObjectArray (idx.length (), ocls, 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
819 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
820 for (int i = 0; i < idx.length (); i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
821 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
822 idx_vector v = idx(i).index_vector (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
823 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
824 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
825 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
826 jintArray_ref i_array (jni_env, jni_env->NewIntArray (v.length ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
827 jint *buf = jni_env->GetIntArrayElements (i_array, 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
828 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
829 for (int k = 0; k < v.length (); k++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
830 buf[k] = v(k); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
831 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
832 jni_env->ReleaseIntArrayElements (i_array, buf, 0); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
833 jni_env->SetObjectArrayElement (retval, i, i_array); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
834 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
835 check_exception (jni_env); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
836 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
837 if (error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
838 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
839 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
840 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
841 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
842 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
843 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
844 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
845 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
846 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
847 static octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
848 get_array_elements (JNIEnv* jni_env, jobject jobj, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
849 const octave_value_list& idx) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
850 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
851 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
852 jobject_ref resObj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
853 jobject_ref java_idx (jni_env, make_java_index (jni_env, idx)); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
854 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
855 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
856 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
857 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
858 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "arraySubsref", "(Ljava/lang/Object;[[I)Ljava/lang/Object;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
859 resObj = jni_env->CallStaticObjectMethod (helperClass, mID, jobj, jobject (java_idx)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
860 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
861 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
862 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
863 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
864 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
865 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
866 |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
867 restore_fpu_state (); |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
868 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
869 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
870 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
871 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
872 static octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
873 set_array_elements (JNIEnv* jni_env, jobject jobj, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
874 const octave_value_list& idx, const octave_value& rhs) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
875 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
876 octave_value retval; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
877 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
878 jclass_ref rhsCls (jni_env); |
15859
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
879 jobject_ref resObj (jni_env); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
880 jobject_ref rhsObj (jni_env); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
881 jobject_ref java_idx (jni_env, make_java_index (jni_env, idx)); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
882 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
883 if (! error_state && unbox (jni_env, rhs, rhsObj, rhsCls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
884 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
885 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
886 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "arraySubsasgn", |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
887 "(Ljava/lang/Object;[[ILjava/lang/Object;)Ljava/lang/Object;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
888 resObj = jni_env->CallStaticObjectMethod (helperClass, mID, |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
889 jobj, jobject (java_idx), jobject (rhsObj)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
890 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
891 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
892 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
893 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
894 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
895 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
896 |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
897 restore_fpu_state (); |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
898 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
899 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
900 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
901 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
902 static string_vector |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
903 get_invoke_list (JNIEnv* jni_env, jobject jobj) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
904 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
905 std::list<std::string> name_list; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
906 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
907 if (jni_env) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
908 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
909 jclass_ref cls (jni_env, jni_env->GetObjectClass (jobj)); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
910 jclass_ref ccls (jni_env, jni_env->GetObjectClass (cls)); |
15859
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
911 jmethodID getMethods_ID = jni_env->GetMethodID (ccls, "getMethods", "()[Ljava/lang/reflect/Method;"); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
912 jmethodID getFields_ID = jni_env->GetMethodID (ccls, "getFields", "()[Ljava/lang/reflect/Field;"); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
913 jobjectArray_ref mList (jni_env, reinterpret_cast<jobjectArray> (jni_env->CallObjectMethod (cls, getMethods_ID))); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
914 jobjectArray_ref fList (jni_env, reinterpret_cast<jobjectArray> (jni_env->CallObjectMethod (cls, getFields_ID))); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
915 int mLen = jni_env->GetArrayLength (mList); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
916 int fLen = jni_env->GetArrayLength (fList); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
917 jclass_ref mCls (jni_env, jni_env->FindClass ("java/lang/reflect/Method")); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
918 jclass_ref fCls (jni_env, jni_env->FindClass ("java/lang/reflect/Field")); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
919 jmethodID m_getName_ID = jni_env->GetMethodID (mCls, "getName", "()Ljava/lang/String;"); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
920 jmethodID f_getName_ID = jni_env->GetMethodID (fCls, "getName", "()Ljava/lang/String;"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
921 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
922 for (int i = 0; i < mLen; i++) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
923 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
924 jobject_ref meth (jni_env, jni_env->GetObjectArrayElement (mList, i)); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
925 jstring_ref methName (jni_env, reinterpret_cast<jstring> (jni_env->CallObjectMethod (meth, m_getName_ID))); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
926 name_list.push_back (jstring_to_string (jni_env, methName)); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
927 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
928 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
929 for (int i = 0; i < fLen; i++) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
930 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
931 jobject_ref field (jni_env, jni_env->GetObjectArrayElement (fList, i)); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
932 jstring_ref fieldName (jni_env, reinterpret_cast<jstring> (jni_env->CallObjectMethod (field, f_getName_ID))); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
933 name_list.push_back (jstring_to_string (jni_env, fieldName)); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
934 } |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
935 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
936 restore_fpu_state (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
937 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
938 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
939 string_vector v (name_list); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
940 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
941 return v.sort (true); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
942 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
943 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
944 static octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
945 convert_to_string (JNIEnv *jni_env, jobject java_object, bool force, char type) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
946 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
947 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
948 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
949 if (jni_env && java_object) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
950 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
951 jclass_ref cls (jni_env, jni_env->FindClass ("java/lang/String")); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
952 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
953 if (jni_env->IsInstanceOf (java_object, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
954 retval = octave_value (jstring_to_string (jni_env, java_object), type); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
955 else if (force) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
956 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
957 cls = jni_env->FindClass ("[Ljava/lang/String;"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
958 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
959 if (jni_env->IsInstanceOf (java_object, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
960 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
961 jobjectArray array = reinterpret_cast<jobjectArray> (java_object); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
962 int len = jni_env->GetArrayLength (array); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
963 Cell c (len, 1); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
964 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
965 for (int i = 0; i < len; i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
966 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
967 jstring_ref js (jni_env, reinterpret_cast<jstring> (jni_env->GetObjectArrayElement (array, i))); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
968 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
969 if (js) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
970 c(i) = octave_value (jstring_to_string (jni_env, js), type); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
971 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
972 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
973 c(i) = check_exception (jni_env); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
974 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
975 if (error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
976 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
977 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
978 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
979 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
980 retval = octave_value (c); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
981 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
982 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
983 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
984 cls = jni_env->FindClass ("java/lang/Object"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
985 jmethodID mID = jni_env->GetMethodID (cls, "toString", "()Ljava/lang/String;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
986 jstring_ref js (jni_env, reinterpret_cast<jstring> (jni_env->CallObjectMethod (java_object, mID))); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
987 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
988 if (js) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
989 retval = octave_value (jstring_to_string (jni_env, js), type); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
990 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
991 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
992 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
993 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
994 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
995 error ("unable to convert Java object to string"); |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
996 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
997 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
998 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
999 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1000 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1001 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1002 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1003 #define TO_JAVA(obj) dynamic_cast<octave_java*> ((obj).internal_rep ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1004 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1005 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1006 box (JNIEnv* jni_env, jobject jobj, jclass jcls) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1007 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1008 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1009 jclass_ref cls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1010 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1011 if (! jobj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1012 retval = Matrix (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1013 |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1014 while (retval.is_undefined ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1015 { |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1016 // Convert a scalar of any numeric class (byte, short, integer, long, |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1017 // float, double) to a double value. Matlab does the same thing. |
15820
00172e5c2302
Add autoconversion of Java numeric types (byte, short, integer, long, float) to Octave double.
Rik <rik@octave.org>
parents:
15816
diff
changeset
|
1018 cls = jni_env->FindClass ("java/lang/Number"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1019 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1020 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1021 jmethodID m = jni_env->GetMethodID (cls, "doubleValue", "()D"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1022 retval = jni_env->CallDoubleMethod (jobj, m); |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1023 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1024 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1025 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1026 cls = jni_env->FindClass ("java/lang/Boolean"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1027 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1028 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1029 jmethodID m = jni_env->GetMethodID (cls, "booleanValue", "()Z"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1030 retval = (jni_env->CallBooleanMethod (jobj, m) ? true : false); |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1031 break; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1032 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1033 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1034 cls = jni_env->FindClass ("java/lang/String"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1035 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1036 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1037 retval = jstring_to_string (jni_env, jobj); |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1038 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1039 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1040 |
15815
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
1041 cls = jni_env->FindClass ("java/lang/Character"); |
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
1042 if (jni_env->IsInstanceOf (jobj, cls)) |
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
1043 { |
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
1044 jmethodID m = jni_env->GetMethodID (cls, "charValue", "()C"); |
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
1045 retval = jni_env->CallCharMethod (jobj, m); |
19790
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
17898
diff
changeset
|
1046 retval = retval.convert_to_str (false, true); |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1047 break; |
15815
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
1048 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1049 |
20330
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1050 #define BOX_PRIMITIVE_ARRAY(JAVA_TYPE, JAVA_ID, JAVA_TYPE_CAP, OCTAVE_ID) \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1051 cls = jni_env->FindClass (JAVA_ID); \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1052 if (jni_env->IsInstanceOf (jobj, cls)) \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1053 { \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1054 const JAVA_TYPE ## Array jarr = reinterpret_cast<JAVA_TYPE ## Array> (jobj); \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1055 const jsize len = jni_env->GetArrayLength (jarr); \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1056 OCTAVE_ID ## NDArray d (dim_vector (len, 1)); \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1057 JAVA_TYPE * buffer = reinterpret_cast<JAVA_TYPE *> (d.fortran_vec ()); \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1058 jni_env->Get ## JAVA_TYPE_CAP ## ArrayRegion (jarr, 0, len, buffer); \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1059 retval = d; \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1060 break; \ |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1061 } |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1062 |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1063 BOX_PRIMITIVE_ARRAY (jboolean, "[Z", Boolean, bool) |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1064 BOX_PRIMITIVE_ARRAY (jchar, "[C", Char, char) |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1065 BOX_PRIMITIVE_ARRAY (jbyte, "[B", Byte, int8) |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1066 BOX_PRIMITIVE_ARRAY (jshort, "[S", Short, int16) |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1067 BOX_PRIMITIVE_ARRAY (jint, "[I", Int, int32) |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1068 BOX_PRIMITIVE_ARRAY (jlong, "[J", Long, int64) |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1069 BOX_PRIMITIVE_ARRAY (jfloat, "[F", Float, Float) |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1070 BOX_PRIMITIVE_ARRAY (jdouble, "[D", Double, ) |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1071 |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1072 #undef BOX_PRIMITIVE_ARRAY |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
1073 |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1074 if (Vjava_matrix_autoconversion) |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1075 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1076 cls = find_octave_class (jni_env, "org/octave/Matrix"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1077 |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1078 if (jni_env->IsInstanceOf (jobj, cls)) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1079 { |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1080 jmethodID mID = jni_env->GetMethodID (cls, "getDims", "()[I"); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1081 jintArray_ref iv (jni_env, reinterpret_cast<jintArray> (jni_env->CallObjectMethod (jobj, mID))); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1082 jint *iv_data = jni_env->GetIntArrayElements (jintArray (iv), 0); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1083 dim_vector dims; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1084 dims.resize (jni_env->GetArrayLength (jintArray (iv))); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1085 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1086 for (int i = 0; i < dims.length (); i++) |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1087 dims(i) = iv_data[i]; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1088 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1089 jni_env->ReleaseIntArrayElements (jintArray (iv), iv_data, 0); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1090 mID = jni_env->GetMethodID (cls, "getClassName", "()Ljava/lang/String;"); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1091 jstring_ref js (jni_env, reinterpret_cast<jstring> (jni_env->CallObjectMethod (jobj, mID))); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1092 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1093 std::string s = jstring_to_string (jni_env, js); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1094 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1095 if (s == "double") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1096 { |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1097 NDArray m (dims); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1098 mID = jni_env->GetMethodID (cls, "toDouble", "()[D"); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1099 jdoubleArray_ref dv (jni_env, reinterpret_cast<jdoubleArray> (jni_env->CallObjectMethod (jobj, mID))); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1100 jni_env->GetDoubleArrayRegion (dv, 0, m.length (), m.fortran_vec ()); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1101 retval = m; |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1102 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1103 } |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1104 else if (s == "byte") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1105 { |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1106 if (Vjava_unsigned_autoconversion) |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1107 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1108 uint8NDArray m (dims); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1109 mID = jni_env->GetMethodID (cls, "toByte", "()[B"); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1110 jbyteArray_ref dv (jni_env, reinterpret_cast<jbyteArray> (jni_env->CallObjectMethod (jobj, mID))); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1111 jni_env->GetByteArrayRegion (dv, 0, m.length (), reinterpret_cast<jbyte *> (m.fortran_vec ())); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1112 retval = m; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1113 break; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1114 } |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1115 else |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1116 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1117 int8NDArray m (dims); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1118 mID = jni_env->GetMethodID (cls, "toByte", "()[B"); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1119 jbyteArray_ref dv (jni_env, reinterpret_cast<jbyteArray> (jni_env->CallObjectMethod (jobj, mID))); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1120 jni_env->GetByteArrayRegion (dv, 0, m.length (), reinterpret_cast<jbyte *> (m.fortran_vec ())); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1121 retval = m; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1122 break; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1123 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1124 } |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1125 else if (s == "integer") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1126 { |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1127 if (Vjava_unsigned_autoconversion) |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1128 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1129 uint32NDArray m (dims); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1130 mID = jni_env->GetMethodID (cls, "toInt", "()[I"); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1131 jintArray_ref dv (jni_env, reinterpret_cast<jintArray> (jni_env->CallObjectMethod (jobj, mID))); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1132 jni_env->GetIntArrayRegion (dv, 0, m.length (), reinterpret_cast<jint *> (m.fortran_vec ())); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1133 retval = m; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1134 break; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1135 } |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1136 else |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1137 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1138 int32NDArray m (dims); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1139 mID = jni_env->GetMethodID (cls, "toInt", "()[I"); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1140 jintArray_ref dv (jni_env, reinterpret_cast<jintArray> (jni_env->CallObjectMethod (jobj, mID))); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1141 jni_env->GetIntArrayRegion (dv, 0, m.length (), reinterpret_cast<jint *> (m.fortran_vec ())); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1142 retval = m; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1143 break; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1144 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1145 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1146 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1147 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1148 |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1149 cls = find_octave_class (jni_env, "org/octave/OctaveReference"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1150 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1151 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1152 jmethodID mID = jni_env->GetMethodID (cls, "getID", "()I"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1153 int ID = jni_env->CallIntMethod (jobj, mID); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1154 std::map<int,octave_value>::iterator it = octave_ref_map.find (ID); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1155 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1156 if (it != octave_ref_map.end ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1157 retval = it->second; |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1158 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1159 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1160 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1161 |
15821
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1162 // No suitable class found. Return a generic octave_java object |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1163 retval = octave_value (new octave_java (jobj, jcls)); |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1164 break; |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1165 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1166 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1167 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1168 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1169 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1170 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1171 box_more (JNIEnv* jni_env, jobject jobj, jclass jcls) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1172 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1173 octave_value retval = box (jni_env, jobj, jcls); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1174 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1175 if (retval.is_java ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1176 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1177 retval = octave_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1178 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1179 jclass_ref cls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1180 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1181 if (retval.is_undefined ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1182 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1183 cls = jni_env->FindClass ("[D"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1184 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1185 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1186 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1187 jdoubleArray jarr = reinterpret_cast<jdoubleArray> (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1188 int len = jni_env->GetArrayLength (jarr); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1189 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1190 if (len > 0) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1191 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1192 Matrix m (1, len); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1193 jni_env->GetDoubleArrayRegion (jarr, 0, len, m.fortran_vec ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1194 retval = m; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1195 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1196 else |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1197 retval = Matrix (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1198 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1199 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1200 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1201 if (retval.is_undefined ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1202 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1203 cls = jni_env->FindClass ("[[D"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1204 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1205 if (jni_env->IsInstanceOf (jobj, cls)) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1206 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1207 jobjectArray jarr = reinterpret_cast<jobjectArray> (jobj); |
18099
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17898
diff
changeset
|
1208 int rows = jni_env->GetArrayLength (jarr); |
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17898
diff
changeset
|
1209 int cols = 0; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1210 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1211 if (rows > 0) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1212 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1213 Matrix m; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1214 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1215 for (int r = 0; r < rows; r++) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1216 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1217 jdoubleArray_ref row (jni_env, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1218 reinterpret_cast<jdoubleArray> (jni_env->GetObjectArrayElement (jarr, r))); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1219 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1220 if (m.length () == 0) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1221 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1222 cols = jni_env->GetArrayLength (row); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1223 m.resize (cols, rows); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1224 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1225 jni_env->GetDoubleArrayRegion (row, 0, cols, m.fortran_vec () + r * cols); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1226 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1227 retval = m.transpose (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1228 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1229 else |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1230 retval = Matrix (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1231 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1232 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1233 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1234 if (retval.is_undefined ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1235 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1236 cls = jni_env->FindClass ("[Ljava/lang/String;"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1237 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1238 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1239 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1240 jobjectArray jarr = reinterpret_cast<jobjectArray> (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1241 int len = jni_env->GetArrayLength (jarr); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1242 Cell m (len, 1); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1243 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1244 for (int i = 0; i < len; i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1245 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1246 jstring_ref js (jni_env, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1247 reinterpret_cast<jstring> (jni_env->GetObjectArrayElement (jarr, i))); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1248 m(i) = jstring_to_string (jni_env, js); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1249 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1250 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1251 retval = m; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1252 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1253 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1254 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1255 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1256 if (retval.is_undefined ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1257 retval = octave_value (new octave_java (jobj, jcls)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1258 |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1259 restore_fpu_state (); |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1260 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1261 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1262 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1263 |
20331
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1264 bool |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1265 unbox (JNIEnv* jni_env, const octave_value& val, jobject_ref& jobj, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1266 jclass_ref& jcls) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1267 { |
20331
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1268 bool found = true; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1269 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1270 if (val.is_java ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1271 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1272 octave_java *ovj = TO_JAVA (val); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1273 jobj = ovj->to_java (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1274 jobj.detach (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1275 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1276 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1277 else if (val.is_string ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1278 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1279 std::string s = val.string_value (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1280 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1281 jobj = jni_env->NewStringUTF (s.c_str ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1282 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1283 } |
20332
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1284 else if (val.numel () > 1 && val.dims ().is_vector ()) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1285 { |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1286 #define IF_UNBOX_PRIMITIVE_ARRAY(CHECK_TYPE, METHOD_TYPE, OCTAVE_TYPE, JAVA_TYPE, JAVA_TYPE_CAP) \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1287 if (val.is_ ## CHECK_TYPE ## _type ()) \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1288 { \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1289 const OCTAVE_TYPE ## NDArray v = val.METHOD_TYPE ## array_value (); \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1290 JAVA_TYPE ## Array jarr = jni_env->New ## JAVA_TYPE_CAP ## Array (v.numel ()); \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1291 const JAVA_TYPE* jv = reinterpret_cast<const JAVA_TYPE*> (v.data ()); \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1292 jni_env->Set ## JAVA_TYPE_CAP ## ArrayRegion (jarr, 0, v.numel (), jv); \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1293 jobj = reinterpret_cast<jobject> (jarr); \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1294 jcls = jni_env->GetObjectClass (jobj); \ |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1295 } |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1296 |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1297 // Note that we do NOT handle char here because they are unboxed |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1298 // into a String[], not into a char array |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1299 IF_UNBOX_PRIMITIVE_ARRAY(bool, bool_, bool, jboolean, Boolean) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1300 else IF_UNBOX_PRIMITIVE_ARRAY(float, float_, Float, jfloat, Float) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1301 else IF_UNBOX_PRIMITIVE_ARRAY(int8, int8_, int8, jbyte, Byte) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1302 else IF_UNBOX_PRIMITIVE_ARRAY(uint8, uint8_, uint8, jbyte, Byte) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1303 else IF_UNBOX_PRIMITIVE_ARRAY(int16, int16_, int16, jshort, Short) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1304 else IF_UNBOX_PRIMITIVE_ARRAY(uint16, uint16_, uint16, jshort, Short) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1305 else IF_UNBOX_PRIMITIVE_ARRAY(int32, int32_, int32, jint, Int) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1306 else IF_UNBOX_PRIMITIVE_ARRAY(uint32, uint32_, uint32, jint, Int) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1307 else IF_UNBOX_PRIMITIVE_ARRAY(int64, int64_, int64, jlong, Long) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1308 else IF_UNBOX_PRIMITIVE_ARRAY(uint64, uint64_, uint64, jlong, Long) |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1309 |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1310 #undef IF_UNBOX_PRIMITIVE_ARRAY |
81fcf4aa9e03
Automatically convert octave vectors into java primitive arrays (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20331
diff
changeset
|
1311 } |
20333
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1312 else if (val.is_real_scalar () || val.is_bool_scalar ()) |
15822
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1313 { |
20333
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1314 #define IF_UNBOX_PRIMITIVE_SCALAR(CHECK_TYPE, OCTAVE_TYPE, METHOD_TYPE, JAVA_TYPE, JAVA_CON) \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1315 if (val.is_ ## CHECK_TYPE ## _type ()) \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1316 { \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1317 const OCTAVE_TYPE ov = val.METHOD_TYPE ## _value (); \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1318 jclass_ref dcls (jni_env, jni_env->FindClass (JAVA_TYPE)); \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1319 const jfieldID fid = jni_env->GetStaticFieldID (dcls, "TYPE", "Ljava/lang/Class;"); \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1320 const jmethodID mid = jni_env->GetMethodID (dcls, "<init>", JAVA_CON); \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1321 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (dcls, fid)); \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1322 jobj = jni_env->NewObject (dcls, mid, ov); \ |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1323 } |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1324 |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1325 IF_UNBOX_PRIMITIVE_SCALAR(double, double, double, "java/lang/Double", "(D)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1326 else IF_UNBOX_PRIMITIVE_SCALAR(float, float, float, "java/lang/Float", "(F)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1327 else IF_UNBOX_PRIMITIVE_SCALAR(bool, bool, bool, "java/lang/Boolean", "(Z)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1328 else IF_UNBOX_PRIMITIVE_SCALAR(int8, int8_t, int8_scalar, "java/lang/Byte", "(B)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1329 else IF_UNBOX_PRIMITIVE_SCALAR(uint8, uint8_t, uint8_scalar, "java/lang/Byte", "(B)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1330 else IF_UNBOX_PRIMITIVE_SCALAR(int16, int16_t, int16_scalar, "java/lang/Short", "(S)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1331 else IF_UNBOX_PRIMITIVE_SCALAR(uint16, uint16_t, uint16_scalar, "java/lang/Short", "(S)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1332 else IF_UNBOX_PRIMITIVE_SCALAR(int32, int32_t, int32_scalar, "java/lang/Int", "(I)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1333 else IF_UNBOX_PRIMITIVE_SCALAR(uint32, uint32_t, uint32_scalar, "java/lang/Int", "(I)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1334 else IF_UNBOX_PRIMITIVE_SCALAR(int64, int64_t, int64_scalar, "java/lang/Long", "(L)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1335 else IF_UNBOX_PRIMITIVE_SCALAR(uint64, uint64_t, uint64_scalar, "java/lang/Long", "(L)V") |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1336 |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
1337 #undef IF_UNBOX_PRIMITIVE_SCALAR |
15822
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1338 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1339 else if (val.is_empty ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1340 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1341 jobj = 0; |
15822
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1342 jcls = 0; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1343 //jcls = jni_env->FindClass ("java/lang/Object"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1344 } |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
1345 else if (!Vjava_matrix_autoconversion |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1346 && ((val.is_real_matrix () |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1347 && (val.rows () == 1 || val.columns () == 1)) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1348 || val.is_range ())) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1349 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1350 Matrix m = val.matrix_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1351 jdoubleArray dv = jni_env->NewDoubleArray (m.length ()); |
15859
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1352 jni_env->SetDoubleArrayRegion (dv, 0, m.length (), m.fortran_vec ()); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1353 jobj = dv; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1354 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1355 } |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
1356 else if (Vjava_matrix_autoconversion |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1357 && (val.is_matrix_type () || val.is_range ()) && val.is_real_type ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1358 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1359 jclass_ref mcls (jni_env, find_octave_class (jni_env, "org/octave/Matrix")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1360 dim_vector dims = val.dims (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1361 jintArray_ref iv (jni_env, jni_env->NewIntArray (dims.length ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1362 jint *iv_data = jni_env->GetIntArrayElements (jintArray (iv), 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1363 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1364 for (int i = 0; i < dims.length (); i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1365 iv_data[i] = dims(i); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1366 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1367 jni_env->ReleaseIntArrayElements (jintArray (iv), iv_data, 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1368 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1369 if (val.is_double_type ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1370 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1371 NDArray m = val.array_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1372 jdoubleArray_ref dv (jni_env, jni_env->NewDoubleArray (m.length ())); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1373 jni_env->SetDoubleArrayRegion (jdoubleArray (dv), 0, m.length (), |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1374 m.fortran_vec ()); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1375 jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([D[I)V"); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1376 jobj = jni_env->NewObject (jclass (mcls), mID, jdoubleArray (dv), |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1377 jintArray (iv)); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1378 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1379 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1380 else if (val.is_int8_type ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1381 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1382 int8NDArray m = val.int8_array_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1383 jbyteArray_ref bv (jni_env, jni_env->NewByteArray (m.length ())); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1384 jni_env->SetByteArrayRegion (jbyteArray (bv), 0, m.length (), |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1385 reinterpret_cast <jbyte *> (m.fortran_vec ())); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1386 jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([B[I)V"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1387 jobj = jni_env->NewObject (jclass (mcls), mID, jbyteArray (bv), jintArray (iv)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1388 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1389 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1390 else if (val.is_uint8_type ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1391 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1392 uint8NDArray m = val.uint8_array_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1393 jbyteArray_ref bv (jni_env, jni_env->NewByteArray (m.length ())); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1394 jni_env->SetByteArrayRegion (jbyteArray (bv), 0, m.length (), |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1395 reinterpret_cast<jbyte *> (m.fortran_vec ())); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1396 jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([B[I)V"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1397 jobj = jni_env->NewObject (jclass (mcls), mID, jbyteArray (bv), jintArray (iv)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1398 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1399 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1400 else if (val.is_int32_type ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1401 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1402 int32NDArray m = val.int32_array_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1403 jintArray_ref v (jni_env, jni_env->NewIntArray (m.length ())); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1404 jni_env->SetIntArrayRegion (jintArray (v), 0, m.length (), |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1405 reinterpret_cast<jint *> (m.fortran_vec ())); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1406 jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([I[I)V"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1407 jobj = jni_env->NewObject (jclass (mcls), mID, jintArray (v), jintArray (iv)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1408 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1409 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1410 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1411 { |
20331
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1412 found = false; |
16766
7268845c0a1e
avoid backquote in error messages, some uses in doc strings
John W. Eaton <jwe@octave.org>
parents:
16295
diff
changeset
|
1413 error ("cannot convert matrix of type '%s'", val.class_name ().c_str ()); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1414 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1415 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1416 else if (val.is_cellstr ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1417 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1418 Cell cellStr = val.cell_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1419 jclass_ref scls (jni_env, jni_env->FindClass ("java/lang/String")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1420 jobjectArray array = jni_env->NewObjectArray (cellStr.length (), scls, 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1421 for (int i = 0; i < cellStr.length (); i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1422 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1423 jstring_ref jstr (jni_env, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1424 jni_env->NewStringUTF (cellStr(i).string_value().c_str ())); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1425 jni_env->SetObjectArrayElement (array, i, jstr); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1426 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1427 jobj = array; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1428 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1429 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1430 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1431 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1432 jclass rcls = find_octave_class (jni_env, "org/octave/OctaveReference"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1433 jmethodID mID = jni_env->GetMethodID (rcls, "<init>", "(I)V"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1434 int ID = octave_java_refcount++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1435 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1436 jobj = jni_env->NewObject (rcls, mID, ID); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1437 jcls = rcls; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1438 octave_ref_map[ID] = val; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1439 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1440 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1441 return found; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1442 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1443 |
20331
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1444 bool |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1445 unbox (JNIEnv* jni_env, const octave_value_list& args, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1446 jobjectArray_ref& jobjs, jobjectArray_ref& jclss) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1447 { |
20331
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1448 bool found = true; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1449 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1450 jclass_ref ocls (jni_env, jni_env->FindClass ("java/lang/Object")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1451 jclass_ref ccls (jni_env, jni_env->FindClass ("java/lang/Class")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1452 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1453 if (! jobjs) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1454 jobjs = jni_env->NewObjectArray (args.length (), ocls, 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1455 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1456 if (! jclss) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1457 jclss = jni_env->NewObjectArray (args.length (), ccls, 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1458 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1459 for (int i = 0; i < args.length (); i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1460 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1461 jobject_ref jobj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1462 jclass_ref jcls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1463 |
20331
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1464 found = unbox (jni_env, args(i), jobj, jcls); |
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1465 if (! found) |
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1466 break; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1467 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1468 jni_env->SetObjectArrayElement (jobjs, i, jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1469 jni_env->SetObjectArrayElement (jclss, i, jcls); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1470 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1471 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1472 return found; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1473 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1474 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1475 static long |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1476 get_current_thread_ID (JNIEnv *jni_env) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1477 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1478 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1479 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1480 jclass_ref cls (jni_env, jni_env->FindClass ("java/lang/Thread")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1481 jmethodID mID = jni_env->GetStaticMethodID (cls, "currentThread", "()Ljava/lang/Thread;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1482 jobject_ref jthread (jni_env, jni_env->CallStaticObjectMethod (cls, mID)); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1483 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1484 if (jthread) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1485 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1486 jclass_ref jth_cls (jni_env, jni_env->GetObjectClass (jthread)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1487 mID = jni_env->GetMethodID (jth_cls, "getId", "()J"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1488 long result = jni_env->CallLongMethod (jthread, mID); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1489 //printf ("current java thread ID = %ld\n", result); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1490 return result; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1491 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1492 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1493 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1494 return -1; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1495 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1496 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1497 static int |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1498 java_event_hook (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1499 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1500 JNIEnv *current_env = octave_java::thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1501 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1502 if (current_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1503 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1504 jclass_ref cls (current_env, find_octave_class (current_env, "org/octave/Octave")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1505 jmethodID mID = current_env->GetStaticMethodID (cls, "checkPendingAction", "()V"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1506 current_env->CallStaticVoidMethod (cls, mID); |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1507 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1508 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1509 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1510 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1511 return 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1512 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1513 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1514 static void |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1515 initialize_java (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1516 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1517 if (! jvm) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1518 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1519 try |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1520 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1521 initialize_jvm (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1522 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1523 JNIEnv *current_env = octave_java::thread_jni_env (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1524 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1525 command_editor::add_event_hook (java_event_hook); |
15754
bf77f7f66bdf
register octave_java type at Octave startup
John W. Eaton <jwe@octave.org>
parents:
15752
diff
changeset
|
1526 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1527 octave_thread_ID = get_current_thread_ID (current_env); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1528 //printf ("octave thread ID=%ld\n", octave_thread_ID); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1529 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1530 catch (std::string msg) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1531 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1532 error (msg.c_str ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1533 } |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1534 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1535 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1536 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1537 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1538 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1539 JNIEXPORT jboolean JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1540 Java_org_octave_Octave_call (JNIEnv *env, jclass, jstring funcName, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1541 jobjectArray argin, jobjectArray argout) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1542 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1543 std::string fname = jstring_to_string (env, funcName); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1544 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1545 int nargout = env->GetArrayLength (argout); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1546 int nargin = env->GetArrayLength (argin); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1547 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1548 octave_value_list varargin, varargout; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1549 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1550 for (int i = 0; i < nargin; i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1551 varargin(i) = box (env, env->GetObjectArrayElement (argin, i), 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1552 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1553 varargout = feval (fname, varargin, nargout); |
20331
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1554 if (error_state) |
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1555 return false; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1556 |
20331
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1557 jobjectArray_ref out_objs (env, argout), out_clss (env); |
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1558 out_objs.detach (); |
41064c150724
Return bools instead of ints in oc-java box and unbox internal functions.
Carnë Draug <carandraug@octave.org>
parents:
20330
diff
changeset
|
1559 return unbox (env, varargout, out_objs, out_clss); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1560 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1561 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1562 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1563 Java_org_octave_OctaveReference_doFinalize (JNIEnv *, jclass, jint ID) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1564 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1565 octave_ref_map.erase (ID); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1566 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1567 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1568 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1569 Java_org_octave_Octave_doInvoke (JNIEnv *env, jclass, jint ID, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1570 jobjectArray args) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1571 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1572 std::map<int,octave_value>::iterator it = octave_ref_map.find (ID); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1573 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1574 if (it != octave_ref_map.end ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1575 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1576 octave_value val = it->second; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1577 int len = env->GetArrayLength (args); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1578 octave_value_list oct_args; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1579 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1580 for (int i = 0; i < len; i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1581 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1582 jobject_ref jobj (env, env->GetObjectArrayElement (args, i)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1583 oct_args(i) = box (env, jobj, 0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1584 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1585 if (error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1586 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1587 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1588 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1589 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1590 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1591 BEGIN_INTERRUPT_WITH_EXCEPTIONS; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1592 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1593 if (val.is_function_handle ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1594 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1595 octave_function *fcn = val.function_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1596 feval (fcn, oct_args); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1597 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1598 else if (val.is_cell () && val.length () > 0 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1599 && (val.rows () == 1 || val.columns () == 1) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1600 && val.cell_value()(0).is_function_handle ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1601 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1602 Cell c = val.cell_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1603 octave_function *fcn = c(0).function_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1604 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1605 for (int i=1; i<c.length (); i++) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1606 oct_args(len+i-1) = c(i); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1607 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1608 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1609 feval (fcn, oct_args); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1610 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1611 else |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1612 error ("trying to invoke non-invocable object"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1613 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1614 END_INTERRUPT_WITH_EXCEPTIONS; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1615 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1616 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1617 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1618 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1619 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1620 Java_org_octave_Octave_doEvalString (JNIEnv *env, jclass, jstring cmd) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1621 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1622 std::string s = jstring_to_string (env, cmd); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1623 int pstatus; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1624 eval_string (s, false, pstatus, 0); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1625 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1626 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1627 JNIEXPORT jboolean JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1628 Java_org_octave_Octave_needThreadedInvokation (JNIEnv *env, jclass) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1629 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1630 return (get_current_thread_ID (env) != octave_thread_ID); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1631 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1632 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1633 // octave_java class definition |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1634 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1635 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1636 int octave_java::t_id (-1); |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1637 |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1638 const std::string octave_java::t_name ("octave_java"); |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1639 |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1640 void |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1641 octave_java::register_type (void) |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1642 { |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1643 t_id = octave_value_typeinfo::register_type |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1644 (octave_java::t_name, "<unknown>", octave_value (new octave_java ())); |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1645 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1646 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1647 dim_vector |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1648 octave_java::dims (void) const |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1649 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1650 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1651 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1652 if (current_env && java_object) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1653 return compute_array_dimensions (current_env, java_object); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1654 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1655 return dim_vector (1, 1); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1656 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1657 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1658 JNIEnv * |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1659 octave_java::thread_jni_env (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1660 { |
17898
8c33abdd2f9a
maint: Avoid using NULL in C++ code.
John W. Eaton <jwe@octave.org>
parents:
17787
diff
changeset
|
1661 JNIEnv *env = 0; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1662 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1663 if (jvm) |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1664 jvm->GetEnv (reinterpret_cast<void **> (&env), JNI_VERSION_1_2); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1665 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1666 return env; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1667 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1668 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1669 octave_value_list |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1670 octave_java::subsref (const std::string& type, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1671 const std::list<octave_value_list>& idx, int nargout) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1672 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1673 octave_value_list retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1674 int skip = 1; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1675 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1676 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1677 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1678 switch (type[0]) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1679 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1680 case '.': |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1681 if (type.length () > 1 && type[1] == '(') |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1682 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1683 octave_value_list ovl; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1684 count++; |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1685 ovl(1) = octave_value (this); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1686 ovl(0) = (idx.front ())(0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1687 std::list<octave_value_list>::const_iterator it = idx.begin (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1688 ovl.append (*++it); |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1689 retval = feval (std::string ("javaMethod"), ovl, 1); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1690 skip++; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1691 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1692 else |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1693 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1694 octave_value_list ovl; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1695 count++; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1696 ovl(0) = octave_value (this); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1697 ovl(1) = (idx.front ())(0); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1698 retval = feval (std::string ("__java_get__"), ovl, 1); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1699 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1700 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1701 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1702 case '(': |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1703 if (current_env) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1704 retval = get_array_elements (current_env, to_java (), idx.front ()); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1705 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1706 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1707 default: |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1708 error ("subsref: Java object cannot be indexed with %c", type[0]); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1709 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1710 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1711 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1712 if (idx.size () > 1 && type.length () > 1) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1713 retval = retval(0).next_subsref (nargout, type, idx, skip); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1714 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1715 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1716 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1717 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1718 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1719 octave_java::subsasgn (const std::string& type, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1720 const std::list<octave_value_list>&idx, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1721 const octave_value &rhs) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1722 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1723 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1724 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1725 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1726 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1727 switch (type[0]) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1728 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1729 case '.': |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1730 if (type.length () == 1) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1731 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1732 // field assignment |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1733 octave_value_list ovl; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1734 count++; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1735 ovl(0) = octave_value (this); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1736 ovl(1) = (idx.front ())(0); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1737 ovl(2) = rhs; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1738 feval ("__java_set__", ovl, 0); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1739 if (! error_state) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1740 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1741 count++; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1742 retval = octave_value (this); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1743 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1744 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1745 else if (type.length () > 2 && type[1] == '(') |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1746 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1747 std::list<octave_value_list> new_idx; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1748 std::list<octave_value_list>::const_iterator it = idx.begin (); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1749 new_idx.push_back (*it++); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1750 new_idx.push_back (*it++); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1751 octave_value_list u = subsref (type.substr (0, 2), new_idx, 1); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1752 if (! error_state) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1753 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1754 std::list<octave_value_list> next_idx (idx); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1755 next_idx.erase (next_idx.begin ()); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1756 next_idx.erase (next_idx.begin ()); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1757 u(0).subsasgn (type.substr (2), next_idx, rhs); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1758 if (! error_state) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1759 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1760 count++; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1761 retval = octave_value (this); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1762 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1763 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1764 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1765 else if (type[1] == '.') |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1766 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1767 octave_value_list u = subsref (type.substr (0, 1), idx, 1); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1768 if (! error_state) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1769 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1770 std::list<octave_value_list> next_idx (idx); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1771 next_idx.erase (next_idx.begin ()); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1772 u(0).subsasgn (type.substr (1), next_idx, rhs); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1773 if (! error_state) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1774 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1775 count++; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1776 retval = octave_value (this); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1777 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1778 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1779 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1780 else |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1781 error ("invalid indexing/assignment on Java object"); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1782 break; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1783 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1784 case '(': |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1785 if (current_env) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1786 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1787 set_array_elements (current_env, to_java (), idx.front (), rhs); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1788 if (! error_state) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1789 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1790 count++; |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1791 retval = octave_value (this); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1792 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1793 } |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1794 break; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1795 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1796 default: |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1797 error ("Java object cannot be indexed with %c", type[0]); |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1798 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1799 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1800 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1801 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1802 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1803 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1804 string_vector |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1805 octave_java::map_keys (void) const |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1806 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1807 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1808 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1809 if (current_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1810 return get_invoke_list (current_env, to_java ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1811 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1812 return string_vector (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1813 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1814 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1815 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1816 octave_java::convert_to_str_internal (bool, bool force, char type) const |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1817 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1818 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1819 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1820 if (current_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1821 return convert_to_string (current_env, to_java (), force, type); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1822 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1823 return octave_value (""); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1824 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1825 |
15859
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1826 void |
18484
bcd71a2531d3
Support disp/display overloading in classdef
Michael Goffioul <michael.goffioul@gmail.com>
parents:
18099
diff
changeset
|
1827 octave_java::print (std::ostream& os, bool) |
15859
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1828 { |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1829 print_raw (os); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1830 newline (os); |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1831 } |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1832 |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1833 void |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1834 octave_java::print_raw (std::ostream& os, bool) const |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1835 { |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1836 os << "<Java object: " << java_classname << ">"; |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1837 } |
0e393e744e5e
ov-java.cc: Replace instances of comma operator for code clarity.
Rik <rik@octave.org>
parents:
15858
diff
changeset
|
1838 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1839 octave_value |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1840 octave_java::do_javaMethod (JNIEnv* jni_env, const std::string& name, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1841 const octave_value_list& args) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1842 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1843 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1844 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1845 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1846 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1847 jobjectArray_ref arg_objs (jni_env), arg_types (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1848 if (unbox (jni_env, args, arg_objs, arg_types)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1849 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1850 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1851 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "invokeMethod", |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1852 "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Class;)Ljava/lang/Object;"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1853 jstring_ref methName (jni_env, jni_env->NewStringUTF (name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1854 jobjectArray_ref resObj (jni_env, reinterpret_cast<jobjectArray> (jni_env->CallStaticObjectMethod (helperClass, mID, |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1855 to_java (), jstring (methName), jobjectArray (arg_objs), jobjectArray (arg_types)))); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1856 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1857 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1858 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1859 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1860 } |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1861 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1862 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1863 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1864 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1865 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1866 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1867 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1868 octave_value |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1869 octave_java:: do_javaMethod (JNIEnv* jni_env, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1870 const std::string& class_name, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1871 const std::string& name, |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1872 const octave_value_list& args) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1873 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1874 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1875 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1876 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1877 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1878 jobjectArray_ref arg_objs (jni_env), arg_types (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1879 if (unbox (jni_env, args, arg_objs, arg_types)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1880 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1881 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1882 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "invokeStaticMethod", |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1883 "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Class;)Ljava/lang/Object;"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1884 jstring_ref methName (jni_env, jni_env->NewStringUTF (name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1885 jstring_ref clsName (jni_env, jni_env->NewStringUTF (class_name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1886 jobject_ref resObj (jni_env, jni_env->CallStaticObjectMethod (helperClass, mID, |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1887 jstring (clsName), jstring (methName), jobjectArray (arg_objs), jobjectArray (arg_types))); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1888 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1889 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1890 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1891 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1892 } |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1893 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1894 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1895 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1896 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1897 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1898 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1899 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1900 octave_value |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1901 octave_java::do_javaObject (JNIEnv* jni_env, const std::string& name, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1902 const octave_value_list& args) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1903 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1904 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1905 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1906 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1907 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1908 jobjectArray_ref arg_objs (jni_env), arg_types (jni_env); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1909 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1910 if (unbox (jni_env, args, arg_objs, arg_types)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1911 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1912 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1913 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "invokeConstructor", |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1914 "(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Class;)Ljava/lang/Object;"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1915 jstring_ref clsName (jni_env, jni_env->NewStringUTF (name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1916 jobject_ref resObj (jni_env, jni_env->CallStaticObjectMethod (helperClass, mID, |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1917 jstring (clsName), jobjectArray (arg_objs), jobjectArray (arg_types))); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1918 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1919 if (resObj) |
15816
59b6c6aee042
Don't box return values from javaObject. Always return a Java object.
Rik <rik@octave.org>
parents:
15815
diff
changeset
|
1920 retval = octave_value (new octave_java (resObj, 0)); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1921 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1922 check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1923 } |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1924 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1925 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1926 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1927 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1928 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1929 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1930 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1931 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1932 octave_java::do_java_get (JNIEnv* jni_env, const std::string& name) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1933 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1934 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1935 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1936 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1937 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1938 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1939 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "getField", |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1940 "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1941 jstring_ref fName (jni_env, jni_env->NewStringUTF (name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1942 jobject_ref resObj (jni_env, jni_env->CallStaticObjectMethod (helperClass, mID, |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1943 to_java (), jstring (fName))); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1944 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1945 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1946 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1947 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1948 retval = check_exception (jni_env); |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1949 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1950 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1951 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1952 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1953 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1954 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1955 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1956 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1957 octave_java::do_java_get (JNIEnv* jni_env, const std::string& class_name, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1958 const std::string& name) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1959 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1960 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1961 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1962 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1963 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1964 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1965 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "getStaticField", |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1966 "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1967 jstring_ref cName (jni_env, jni_env->NewStringUTF (class_name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1968 jstring_ref fName (jni_env, jni_env->NewStringUTF (name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1969 jobject_ref resObj (jni_env, jni_env->CallStaticObjectMethod (helperClass, mID, |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1970 jstring (cName), jstring (fName))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1971 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1972 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1973 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1974 retval = check_exception (jni_env); |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1975 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
1976 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1977 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1978 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1979 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1980 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1981 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1982 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1983 octave_java::do_java_set (JNIEnv* jni_env, const std::string& name, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1984 const octave_value& val) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1985 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1986 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1987 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1988 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1989 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1990 jobject_ref jobj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1991 jclass_ref jcls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1992 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1993 if (unbox (jni_env, val, jobj, jcls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1994 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1995 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1996 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "setField", |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1997 "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1998 jstring_ref fName (jni_env, jni_env->NewStringUTF (name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1999 jni_env->CallStaticObjectMethod (helperClass, mID, to_java (), jstring (fName), jobject (jobj)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2000 check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2001 } |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
2002 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
2003 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2004 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
2005 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2006 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2007 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2008 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
2009 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
2010 octave_java::do_java_set (JNIEnv* jni_env, const std::string& class_name, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
2011 const std::string& name, const octave_value& val) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2012 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2013 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2014 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2015 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2016 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2017 jobject_ref jobj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2018 jclass_ref jcls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2019 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2020 if (unbox (jni_env, val, jobj, jcls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2021 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
2022 jclass_ref helperClass (jni_env, find_octave_class (jni_env, "org/octave/ClassHelper")); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2023 jmethodID mID = jni_env->GetStaticMethodID (helperClass, "setStaticField", |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
2024 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2025 jstring_ref cName (jni_env, jni_env->NewStringUTF (class_name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2026 jstring_ref fName (jni_env, jni_env->NewStringUTF (name.c_str ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2027 jni_env->CallStaticObjectMethod (helperClass, mID, jstring (cName), jstring (fName), jobject (jobj)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2028 check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2029 } |
16078
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
2030 |
9439f3b5c5fa
Restore default floating point state after calling Java
Mike Miller <mtmiller@ieee.org>
parents:
15879
diff
changeset
|
2031 restore_fpu_state (); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2032 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
2033 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2034 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2035 } |
15736
6faa01ff2967
build: Add --disable-java option to configure (bug #37838).
Rik <rik@octave.org>
parents:
15625
diff
changeset
|
2036 |
15806
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2037 #endif // endif on HAVE_JAVA |
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2038 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2039 // DEFUN blocks below must be outside of HAVE_JAVA block so that |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2040 // documentation strings are always available, even when functions are not. |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2041 |
15879
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2042 DEFUN (__java_init__, , , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2043 "-*- texinfo -*-\n\ |
15879
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2044 @deftypefn {Built-in Function} {} java_init ()\n\ |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2045 Internal function used @strong{only} when debugging Java interface.\n\ |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2046 Function will directly call initialize_java() to create an instance of a JVM.\n\ |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2047 @end deftypefn") |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2048 { |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2049 |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2050 #ifdef HAVE_JAVA |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2051 octave_value retval; |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2052 |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2053 retval = 0; |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2054 |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2055 initialize_java (); |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2056 |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2057 if (! error_state) |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2058 retval = 1; |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2059 |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2060 return retval; |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2061 #else |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2062 error ("__java_init__: Octave was not compiled with Java interface"); |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2063 return octave_value (); |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2064 #endif |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2065 } |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2066 |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2067 DEFUN (__java_exit__, , , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2068 "-*- texinfo -*-\n\ |
15879
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2069 @deftypefn {Built-in Function} {} java_exit ()\n\ |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2070 Internal function used @strong{only} when debugging Java interface.\n\ |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2071 Function will directly call terminate_jvm() to destroy the current JVM\n\ |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2072 instance.\n\ |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2073 @end deftypefn") |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2074 { |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2075 #ifdef HAVE_JAVA |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2076 terminate_jvm (); |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2077 #else |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2078 error ("__java_init__: Octave was not compiled with Java interface"); |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2079 #endif |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2080 |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2081 return octave_value (); |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2082 } |
f69530e3600d
make docstrings for __java_init__ and __java_exit__ available unconditionally
John W. Eaton <jwe@octave.org>
parents:
15859
diff
changeset
|
2083 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2084 DEFUN (javaObject, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2085 "-*- texinfo -*-\n\ |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
2086 @deftypefn {Built-in Function} {@var{jobj} =} javaObject (@var{classname})\n\ |
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
2087 @deftypefnx {Built-in Function} {@var{jobj} =} javaObject (@var{classname}, @var{arg1}, @dots{})\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2088 Create a Java object of class @var{classsname}, by calling the class\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2089 constructor with the arguments @var{arg1}, @dots{}\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2090 \n\ |
15806
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2091 The first example below creates an uninitialized object,\n\ |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
2092 while the second example supplies an initial argument to the constructor.\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2093 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2094 @example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2095 @group\n\ |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
2096 x = javaObject (\"java.lang.StringBuffer\")\n\ |
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
2097 x = javaObject (\"java.lang.StringBuffer\", \"Initial string\")\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2098 @end group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2099 @end example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2100 \n\ |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
2101 @seealso{javaMethod, javaArray}\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2102 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2103 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2104 #ifdef HAVE_JAVA |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2105 octave_value retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2106 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2107 initialize_java (); |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2108 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2109 if (! error_state) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2110 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2111 JNIEnv *current_env = octave_java::thread_jni_env (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2112 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2113 if (args.length () > 0) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2114 { |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2115 if (args(0).is_string ()) |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2116 { |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2117 std::string classname = args(0).string_value (); |
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2118 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2119 octave_value_list tmp; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2120 for (int i=1; i<args.length (); i++) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2121 tmp(i-1) = args(i); |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2122 retval = octave_java::do_javaObject (current_env, classname, tmp); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2123 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2124 else |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
2125 error ("javaObject: CLASSNAME must be a string"); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2126 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2127 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2128 print_usage (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2129 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2130 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2131 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2132 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2133 error ("javaObject: Octave was not compiled with Java interface"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2134 return octave_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2135 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2136 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2137 |
15825
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2138 /* |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2139 %!testif HAVE_JAVA |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2140 %% The tests below merely check if javaObject works at all. Whether it works |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2141 %% properly, i.e. creates the right values, is a matter of Java itself |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2142 %% Create a Short and check if it really is a short, i.e. whether it overflows |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2143 %! assert (javaObject ("java.lang.Short", 40000).doubleValue < 0); |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2144 */ |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2145 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2146 DEFUN (javaMethod, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2147 "-*- texinfo -*-\n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2148 @deftypefn {Built-in Function} {@var{ret} =} javaMethod (@var{methodname}, @var{obj})\n\ |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2149 @deftypefnx {Built-in Function} {@var{ret} =} javaMethod (@var{methodname}, @var{obj}, @var{arg1}, @dots{})\n\ |
15806
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2150 Invoke the method @var{methodname} on the Java object @var{obj} with the\n\ |
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2151 arguments @var{arg1}, @dots{} For static methods, @var{obj} can be a string\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2152 representing the fully qualified name of the corresponding class. The\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2153 function returns the result of the method invocation.\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2154 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2155 When @var{obj} is a regular Java object, structure-like indexing can be\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2156 used as a shortcut syntax. For instance, the two following statements are\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2157 equivalent\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2158 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2159 @example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2160 @group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2161 ret = javaMethod (\"method1\", x, 1.0, \"a string\")\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2162 ret = x.method1 (1.0, \"a string\")\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2163 @end group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2164 @end example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2165 \n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2166 @seealso{methods, javaObject}\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2167 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2168 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2169 #ifdef HAVE_JAVA |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2170 octave_value retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2171 |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2172 initialize_java (); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2173 |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2174 if (! error_state) |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2175 { |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2176 JNIEnv *current_env = octave_java::thread_jni_env (); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2177 |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2178 if (args.length () > 1) |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2179 { |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2180 if (args(0).is_string ()) |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2181 { |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2182 std::string methodname = args(0).string_value (); |
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2183 |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2184 octave_value_list tmp; |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2185 for (int i=2; i<args.length (); i++) |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2186 tmp(i-2) = args(i); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2187 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
2188 if (args(1).is_java ()) |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2189 { |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2190 octave_java *jobj = TO_JAVA (args(1)); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2191 retval = jobj->do_javaMethod (current_env, methodname, tmp); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2192 } |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2193 else if (args(1).is_string ()) |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2194 { |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2195 std::string cls = args(1).string_value (); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2196 retval = octave_java::do_javaMethod (current_env, cls, methodname, tmp); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2197 } |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2198 else |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2199 error ("javaMethod: OBJ must be a Java object or a string"); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2200 } |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2201 else |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2202 error ("javaMethod: METHODNAME must be a string"); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2203 } |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2204 else |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2205 print_usage (); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2206 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2207 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2208 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2209 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2210 error ("javaMethod: Octave was not compiled with Java interface"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2211 return octave_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2212 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2213 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2214 |
15825
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2215 /* |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2216 %!testif HAVE_JAVA |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2217 %% Check for valid first two Java version numbers |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2218 %! jver = strsplit (javaMethod ('getProperty', 'java.lang.System', 'java.version'), '.'); |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2219 %! assert (isfinite (str2double (jver{1})) && isfinite (str2double (jver{2}))); |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2220 */ |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2221 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2222 DEFUN (__java_get__, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2223 "-*- texinfo -*-\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2224 @deftypefn {Built-in Function} {@var{val} =} __java_get__ (@var{obj}, @var{name})\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2225 Get the value of the field @var{name} of the Java object @var{obj}. For\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2226 static fields, @var{obj} can be a string representing the fully qualified\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2227 name of the corresponding class.\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2228 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2229 When @var{obj} is a regular Java object, structure-like indexing can be\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2230 used as a shortcut syntax. For instance, the two following statements are\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2231 equivalent\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2232 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2233 @example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2234 @group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2235 __java_get__ (x, \"field1\")\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2236 x.field1\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2237 @end group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2238 @end example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2239 \n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2240 @seealso{__java_set__, javaMethod, javaObject}\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2241 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2242 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2243 #ifdef HAVE_JAVA |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2244 octave_value retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2245 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2246 initialize_java (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2247 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2248 if (! error_state) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2249 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2250 JNIEnv *current_env = octave_java::thread_jni_env (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2251 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2252 if (args.length () == 2) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2253 { |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2254 if (args(1).is_string ()) |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2255 { |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2256 std::string name = args(1).string_value (); |
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2257 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
2258 if (args(0).is_java ()) |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2259 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2260 octave_java *jobj = TO_JAVA (args(0)); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2261 retval = jobj->do_java_get (current_env, name); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2262 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2263 else if (args(0).is_string ()) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2264 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2265 std::string cls = args(0).string_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2266 retval = octave_java::do_java_get (current_env, cls, name); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2267 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2268 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2269 error ("__java_get__: OBJ must be a Java object or a string"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2270 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2271 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2272 error ("__java_get__: NAME must be a string"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2273 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2274 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2275 print_usage (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2276 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2277 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2278 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2279 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2280 error ("__java_get__: Octave was not compiled with Java interface"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2281 return octave_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2282 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2283 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2284 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2285 DEFUN (__java_set__, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2286 "-*- texinfo -*-\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2287 @deftypefn {Built-in Function} {@var{obj} =} __java_set__ (@var{obj}, @var{name}, @var{val})\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2288 Set the value of the field @var{name} of the Java object @var{obj} to\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2289 @var{val}. For static fields, @var{obj} can be a string representing the\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2290 fully qualified named of the corresponding Java class.\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2291 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2292 When @var{obj} is a regular Java object, structure-like indexing can be\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2293 used as a shortcut syntax. For instance, the two following statements are\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2294 equivalent\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2295 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2296 @example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2297 @group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2298 __java_set__ (x, \"field1\", val)\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2299 x.field1 = val\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2300 @end group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2301 @end example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2302 \n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2303 @seealso{__java_get__, javaMethod, javaObject}\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2304 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2305 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2306 #ifdef HAVE_JAVA |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2307 octave_value retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2308 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2309 initialize_java (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2310 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2311 if (! error_state) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2312 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2313 JNIEnv *current_env = octave_java::thread_jni_env (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2314 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2315 if (args.length () == 3) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2316 { |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2317 if (args(1).is_string ()) |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2318 { |
19600
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2319 std::string name = args(1).string_value (); |
03067dab10ca
Use stricter input validation when looking for a string as input (bug #42651).
Rik <rik@octave.org>
parents:
18484
diff
changeset
|
2320 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
2321 if (args(0).is_java ()) |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2322 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2323 octave_java *jobj = TO_JAVA (args(0)); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2324 retval = jobj->do_java_set (current_env, name, args(2)); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2325 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2326 else if (args(0).is_string ()) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2327 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2328 std::string cls = args(0).string_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2329 retval = octave_java::do_java_set (current_env, cls, name, args(2)); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2330 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2331 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2332 error ("__java_set__: OBJ must be a Java object or a string"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2333 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2334 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2335 error ("__java_set__: NAME must be a string"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2336 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2337 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2338 print_usage (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2339 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2340 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2341 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2342 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2343 error ("__java_set__: Octave was not compiled with Java interface"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2344 return octave_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2345 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2346 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2347 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2348 DEFUN (java2mat, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2349 "-*- texinfo -*-\n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2350 @deftypefn {Built-in Function} {} java2mat (@var{javaobj})\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2351 Undocumented internal function.\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2352 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2353 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2354 #ifdef HAVE_JAVA |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2355 octave_value_list retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2356 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2357 initialize_java (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2358 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2359 if (! error_state) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2360 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2361 JNIEnv *current_env = octave_java::thread_jni_env (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2362 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2363 if (args.length () == 1) |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2364 { |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
2365 if (args(0).is_java ()) |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2366 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2367 octave_java *jobj = TO_JAVA (args(0)); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2368 retval(0) = box_more (current_env, jobj->to_java (), 0); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2369 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2370 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2371 retval(0) = args(0); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2372 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2373 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2374 print_usage (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2375 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2376 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2377 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2378 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2379 error ("java2mat: Octave was not compiled with Java interface"); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2380 return octave_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2381 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2382 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2383 |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2384 DEFUN (java_matrix_autoconversion, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2385 "-*- texinfo -*-\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2386 @deftypefn {Built-in Function} {@var{val} =} java_matrix_autoconversion ()\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2387 @deftypefnx {Built-in Function} {@var{old_val} =} java_matrix_autoconversion (@var{new_val})\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2388 @deftypefnx {Built-in Function} {} java_matrix_autoconversion (@var{new_val}, \"local\")\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2389 Query or set the internal variable that controls whether Java arrays are\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2390 automatically converted to Octave matrices. The default value is false.\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2391 \n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2392 When called from inside a function with the @qcode{\"local\"} option, the\n\ |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2393 variable is changed locally for the function and any subroutines it calls. \n\ |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2394 The original variable value is restored when exiting the function.\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2395 @seealso{java_unsigned_autoconversion, debug_java}\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2396 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2397 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2398 #ifdef HAVE_JAVA |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2399 return SET_INTERNAL_VARIABLE (java_matrix_autoconversion); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2400 #else |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2401 error ("java_matrix_autoconversion: Octave was not compiled with Java interface"); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2402 return octave_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2403 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2404 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2405 |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2406 DEFUN (java_unsigned_autoconversion, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2407 "-*- texinfo -*-\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2408 @deftypefn {Built-in Function} {@var{val} =} java_unsigned_autoconversion ()\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2409 @deftypefnx {Built-in Function} {@var{old_val} =} java_unsigned_autoconversion (@var{new_val})\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2410 @deftypefnx {Built-in Function} {} java_unsigned_autoconversion (@var{new_val}, \"local\")\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2411 Query or set the internal variable that controls how integer classes are\n\ |
15806
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2412 converted when @code{java_matrix_autoconversion} is enabled. When enabled,\n\ |
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2413 Java arrays of class Byte or Integer are converted to matrices of class\n\ |
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2414 uint8 or uint32 respectively. The default value is true.\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2415 \n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2416 When called from inside a function with the @qcode{\"local\"} option, the\n\ |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2417 variable is changed locally for the function and any subroutines it calls. \n\ |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2418 The original variable value is restored when exiting the function.\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2419 @seealso{java_matrix_autoconversion, debug_java}\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2420 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2421 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2422 #ifdef HAVE_JAVA |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2423 return SET_INTERNAL_VARIABLE (java_unsigned_autoconversion); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2424 #else |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2425 error ("java_unsigned_autoconversion: Octave was not compiled with Java interface"); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2426 return octave_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2427 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2428 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2429 |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2430 DEFUN (debug_java, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2431 "-*- texinfo -*-\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2432 @deftypefn {Built-in Function} {@var{val} =} debug_java ()\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2433 @deftypefnx {Built-in Function} {@var{old_val} =} debug_java (@var{new_val})\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2434 @deftypefnx {Built-in Function} {} debug_java (@var{new_val}, \"local\")\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2435 Query or set the internal variable that determines whether extra debugging\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2436 information regarding the initialization of the JVM and any Java exceptions\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2437 is printed.\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2438 \n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2439 When called from inside a function with the @qcode{\"local\"} option, the\n\ |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2440 variable is changed locally for the function and any subroutines it calls. \n\ |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16766
diff
changeset
|
2441 The original variable value is restored when exiting the function.\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2442 @seealso{java_matrix_autoconversion, java_unsigned_autoconversion}\n\ |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2443 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2444 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2445 #ifdef HAVE_JAVA |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2446 return SET_INTERNAL_VARIABLE (debug_java); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2447 #else |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2448 error ("debug_java: Octave was not compiled with Java interface"); |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2449 return octave_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2450 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2451 } |
15736
6faa01ff2967
build: Add --disable-java option to configure (bug #37838).
Rik <rik@octave.org>
parents:
15625
diff
changeset
|
2452 |
15770 | 2453 // Outside of #ifdef HAVE_JAVA because it is desirable to be able to |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2454 // test for the presence of a Java object without having Java installed. |
15770 | 2455 DEFUN (isjava, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
2456 "-*- texinfo -*-\n\ |
15770 | 2457 @deftypefn {Built-in Function} {} isjava (@var{x})\n\ |
2458 Return true if @var{x} is a Java object.\n\ | |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2459 @seealso{class, typeinfo, isa, javaObject}\n\ |
15770 | 2460 @end deftypefn") |
2461 { | |
2462 octave_value retval; | |
2463 | |
2464 if (args.length () != 1) | |
2465 print_usage (); | |
2466 else | |
2467 retval = args(0).is_java (); | |
2468 | |
2469 return retval; | |
2470 } | |
2471 | |
20330
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
2472 /* |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
2473 ## Check automatic conversion of java primitive arrays into octave types |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
2474 %!assert (javaObject ("java.lang.String", "hello").getBytes (), |
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
2475 %! int8 ([104 101 108 108 111]')) |
20333
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
2476 |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
2477 ## Check automatic conversion of octave types into java primitive arrays |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
2478 ## Note that uint8 are casted into int8 |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
2479 %!assert (javaMethod ("binarySearch", "java.util.Arrays", [90 100 255], 255), 2) |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
2480 %!assert (javaMethod ("binarySearch", "java.util.Arrays", uint8 ([90 100 255]), uint8 (255)) < 0) |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
2481 %!assert (javaMethod ("binarySearch", "java.util.Arrays", uint8 ([90 100 128]), uint8 (128)) < 0) |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
2482 %!assert (javaMethod ("binarySearch", "java.util.Arrays", uint8 ([90 100 127]), uint8 (127)), 2) |
8261c4a11250
Convert octave integer scalars into closest java type (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20332
diff
changeset
|
2483 %!assert (javaMethod ("binarySearch", "java.util.Arrays", uint16 ([90 100 128]), uint16 (128)), 2) |
20330
2db2db2df55b
Automatically convert arrays of java primitives into Octave types (bug #44882)
Carnë Draug <carandraug@octave.org>
parents:
20238
diff
changeset
|
2484 */ |