Mercurial > hg > octave-lojdl
annotate libinterp/octave-value/ov-java.cc @ 15858:fb756e8d6620
Silence compilation warning in ov-java.h.
* libinterp/octave-value/ov-java.h(print, print_raw): Move function
bodies to ov-java.cc. Leave only prototypes in .h file.
* libinterp/octave-value/ov-java.cc(print, print_raw): Function bodies
moved from ov-java.h.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 27 Dec 2012 21:43:35 -0800 |
parents | 9854666df787 |
children | 0e393e744e5e |
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 |
da26f72408a7
update copyright statements in newly added java files
John W. Eaton <jwe@octave.org>
parents:
15745
diff
changeset
|
3 Copyright (C) 2007 Michael Goffioul |
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" |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
29 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
30 #if defined HAVE_JAVA |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
31 |
15755
3216dafbbd48
ov-java.cc: Correcty typo HAVE_WINDWOS_H to HAVE_WINDOWS_H
Rik <rik@octave.org>
parents:
15754
diff
changeset
|
32 #if defined (HAVE_WINDOWS_H) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
33 #include <windows.h> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
35 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 #include <algorithm> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
37 #include <map> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 #include <iostream> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 #include <fstream> |
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 <clocale> |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
42 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
43 #include "Cell.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
44 #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
|
45 #include "defaults.h" |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
46 #include "file-ops.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
47 #include "file-stat.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
48 #include "load-path.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
49 #include "oct-env.h" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
50 #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
|
51 #include "ov-java.h" |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
52 #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
|
53 #include "variables.h" |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
54 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
55 typedef jint (JNICALL *JNI_CreateJavaVM_t) (JavaVM **pvm, JNIEnv **penv, void *args); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
56 typedef jint (JNICALL *JNI_GetCreatedJavaVMs_t) (JavaVM **pvm, jsize bufLen, jsize *nVMs); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
57 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
58 extern "C" |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
59 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
60 JNIEXPORT jboolean JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
61 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
|
62 jobjectArray); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
63 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
64 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
|
65 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
66 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
67 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
|
68 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
69 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
70 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
|
71 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
72 JNIEXPORT jboolean JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
73 Java_org_octave_Octave_needThreadedInvokation (JNIEnv *, jclass); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
74 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
75 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
76 static JavaVM *jvm = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
77 static bool jvm_attached = false; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
78 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
79 // 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
|
80 static octave_shlib jvm_lib; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
81 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
82 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
|
83 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
|
84 static int octave_java_refcount = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
85 static long octave_thread_ID = -1; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
86 |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
87 bool Vjava_matrix_autoconversion = false; |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
88 bool Vjava_unsigned_autoconversion = true; |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
89 bool Vdebug_java = false; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
90 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
91 class JVMArgs |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
92 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
93 public: |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
94 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
95 JVMArgs (void) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
96 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
97 vm_args.version = JNI_VERSION_1_2; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
98 vm_args.nOptions = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
99 vm_args.options = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
100 vm_args.ignoreUnrecognized = false; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
101 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
102 |
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 clean (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
106 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
107 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
108 JavaVMInitArgs* to_args () |
15745
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 update (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
111 return &vm_args; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
112 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
113 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
114 void add (const std::string& opt) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
115 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
116 java_opts.push_back (opt); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
117 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
118 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
119 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
|
120 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
121 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
|
122 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
123 if (! js.bad () && ! js.fail ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
124 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
125 std::string line; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
126 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
127 while (! js.eof () && ! js.fail ()) |
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::getline (js, line); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
130 if (line.length () > 2 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
131 && (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
|
132 java_opts.push_back (line); |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
133 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
|
134 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
|
135 } |
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 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
138 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
139 private: |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
140 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
141 void clean (void) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
142 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
143 if (vm_args.options != 0) |
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 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
|
146 delete [] vm_args.options[i].optionString; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
147 delete [] vm_args.options; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
148 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
149 vm_args.options = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
150 vm_args.nOptions = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
151 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
152 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
153 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
154 void update (void) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
155 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
156 clean (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
157 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
158 if (java_opts.size () > 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 int index = 0; |
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 vm_args.nOptions = java_opts.size (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
163 vm_args.options = new JavaVMOption [vm_args.nOptions]; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
164 for (std::list<std::string>::const_iterator it = java_opts.begin (); it != java_opts.end (); ++it) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
165 { |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
166 if (Vdebug_java) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
167 std::cout << *it << std::endl; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
168 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
|
169 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
170 java_opts.clear (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
171 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
172 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
173 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
174 private: |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
175 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
176 JavaVMInitArgs vm_args; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
177 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
178 std::list<std::string> java_opts; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
179 }; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
180 |
15858
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
181 void |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
182 octave_java::print (std::ostream& os, bool) const |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
183 { |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
184 print_raw (os); |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
185 newline (os); |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
186 } |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
187 |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
188 void |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
189 octave_java::print_raw (std::ostream& os, bool) const |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
190 { |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
191 os << "<Java object: " << java_classname << ">"; |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
192 } |
fb756e8d6620
Silence compilation warning in ov-java.h.
Rik <rik@octave.org>
parents:
15825
diff
changeset
|
193 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
194 static dim_vector compute_array_dimensions (JNIEnv* jni_env, jobject obj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
195 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
196 #ifdef __WIN32__ |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
197 static std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
198 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
|
199 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
200 HKEY hkey; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
201 DWORD len; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
202 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
203 std::string retval; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
204 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
205 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
|
206 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
207 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
|
208 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
209 retval.resize (len); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
210 if (RegQueryValueEx (hkey, value.c_str (), 0, 0, (LPBYTE)&retval[0], &len)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
211 retval = ""; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
212 else if (retval[len-1] == '\0') |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
213 retval.resize (--len); |
15625
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 RegCloseKey (hkey); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
216 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
217 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
218 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
219 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
220 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
221 static std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
222 get_module_filename (HMODULE hMod) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
223 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
224 int n = 1024; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
225 std::string retval (n, '\0'); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
226 bool found = false; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
227 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
228 while (n < 65536) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
229 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
230 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
|
231 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
232 if (status < n) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
233 { |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
234 retval.resize (n); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
235 found = true; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
236 break; |
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 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
239 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
240 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
|
241 retval.resize (n); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
242 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
243 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
244 return (found ? retval : ""); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
245 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
246 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
247 static void |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
248 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
|
249 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
250 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
|
251 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
252 static dllfcn_t dllfcn = NULL; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
253 static bool first = true; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
254 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
255 if (! dllfcn && first) |
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 HINSTANCE hKernel32 = GetModuleHandle ("kernel32"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
258 dllfcn = reinterpret_cast<dllfcn_t> (GetProcAddress (hKernel32, "SetDllDirectoryA")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
259 first = false; |
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 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
262 if (dllfcn) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
263 dllfcn (dir.empty () ? NULL : dir.c_str ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
264 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
265 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
266 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
267 static std::string |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
268 initial_java_dir (void) |
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 static std::string java_dir; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
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 ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
273 { |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
274 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
|
275 |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
276 if (java_dir.empty ()) |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
277 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
|
278 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
279 |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
280 return java_dir; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
281 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
282 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
283 // 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
|
284 // |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
285 // 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
|
286 // by the path separator character. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
287 // 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
|
288 // 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
|
289 // |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
290 // 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
|
291 // with a classpath. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
292 // 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
|
293 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
294 static std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
295 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
|
296 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
297 std::string classpath; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
298 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
299 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
|
300 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
301 if (! fs.bad () && ! 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::string line; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
304 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
305 while (! fs.eof () && ! fs.fail ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
306 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
307 std::getline (fs, line); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
308 |
15798
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
309 if (line.length () > 0) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
310 { |
15798
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
311 if (line[0] == '#' || line[0] == '%') |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
312 ; // skip comments |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
313 else |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
314 { |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
315 // prepend separator character |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
316 classpath.append (dir_path::path_sep_str ()); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
317 |
15798
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
318 // append content of line without whitespace |
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
319 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
|
320 |
15798
ac9e34f83522
Allow one char paths, like '/', in javaclasspath.txt
Rik <rik@octave.org>
parents:
15797
diff
changeset
|
321 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
|
322 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
323 } |
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 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
327 return (classpath); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
328 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
329 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
330 static std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
331 initial_class_path (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
332 { |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
333 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
|
334 |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
335 std::string retval = java_dir; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
336 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
337 // find octave.jar file |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
338 if (! retval.empty ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
339 { |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
340 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
|
341 |
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
342 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
|
343 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
344 file_stat jar_exists (jar_file); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
345 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
346 if (jar_exists) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
347 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
348 // initialize static classpath to octave.jar |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
349 retval = jar_file; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
350 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
351 // 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
|
352 // 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
|
353 // 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
|
354 // 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
|
355 // 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
|
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 // 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
|
358 // 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
|
359 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
|
360 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
361 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
|
362 { |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
363 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
|
364 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
|
365 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
|
366 |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
367 // 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
|
368 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
369 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
|
370 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
|
371 { |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
372 // 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
|
373 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
|
374 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
|
375 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
376 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
377 // 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
|
378 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
379 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
|
380 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
|
381 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
|
382 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
|
383 { |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
384 // 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
|
385 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
|
386 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
|
387 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
388 |
15797
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
389 // 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
|
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 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
|
392 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
|
393 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
|
394 { |
492893b98eef
Search for "javaclasspath.txt" as well as "classpath.txt" to set static class path.
Rik <rik@octave.org>
parents:
15792
diff
changeset
|
395 // 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
|
396 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
|
397 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
|
398 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
399 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
400 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
401 else |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
402 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
|
403 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
404 else |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
405 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
|
406 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
407 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
408 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
409 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
410 static void |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
411 initialize_jvm (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
412 { |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
413 // 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
|
414 if (jvm) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
415 return; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
416 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
417 JNIEnv *current_env; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
418 const char *static_locale = setlocale (LC_ALL, NULL); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
419 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
|
420 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
421 #if defined (__WIN32__) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
422 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
423 HMODULE hMod = GetModuleHandle ("jvm.dll"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
424 std::string jvm_lib_path; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
425 std::string old_cwd; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
426 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
427 if (hMod == NULL) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
428 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
429 // 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
|
430 // and load the symbol from the dll. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
431 std::string key, value; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
432 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
433 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
|
434 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
435 value = octave_env::getenv ("JAVA_VERSION"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
436 if (value.empty ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
437 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
438 value = "Currentversion"; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
439 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
|
440 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
441 if (regval.empty ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
442 throw std::string ("unable to find Java Runtime Environment: ") + key + "::" + value; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
443 value = regval; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
444 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
445 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
446 key = key + "\\" + value; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
447 value = "RuntimeLib"; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
448 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
|
449 if (jvm_lib_path.empty ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
450 throw std::string ("unable to find Java Runtime Environment: ") + key + "::" + value; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
451 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
452 std::string jvm_bin_path; |
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 value = "JavaHome"; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
455 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
|
456 if (! jvm_bin_path.empty ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
457 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
458 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
|
459 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
460 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
|
461 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
462 set_dll_directory (jvm_bin_path); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
463 octave_env::chdir (jvm_bin_path); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
464 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
465 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
466 else |
15745
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 // JVM seems to be already loaded, better to use that DLL instead |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
469 // of looking in the registry, to avoid opening a different JVM. |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
470 jvm_lib_path = get_module_filename (hMod); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
471 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
472 if (jvm_lib_path.empty ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
473 throw std::string ("unable to find Java Runtime Environment"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
474 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
475 |
15763
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
476 #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
|
477 |
15763
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
478 // 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
|
479 #if defined (__APPLE__) |
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
480 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
|
481 #else |
15763
56239ff815a3
build: Overhaul auto-detection of Java when JAVA_HOME is not set.
Rik <rik@octave.org>
parents:
15755
diff
changeset
|
482 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
|
483 #endif |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
484 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
485 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
486 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
487 jsize nVMs = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
488 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
489 # if !defined (__APPLE__) && !defined (__MACH__) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
490 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
491 octave_shlib lib (jvm_lib_path); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
492 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
493 if (!lib) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
494 throw std::string ("unable to load Java Runtime Environment from ") + jvm_lib_path; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
495 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
496 #if defined (__WIN32__) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
497 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
498 set_dll_directory (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
499 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
500 if (! old_cwd.empty ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
501 octave_env::chdir (old_cwd); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
502 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
503 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
504 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
505 JNI_CreateJavaVM_t create_vm = reinterpret_cast<JNI_CreateJavaVM_t> (lib.search ("JNI_CreateJavaVM")); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
506 JNI_GetCreatedJavaVMs_t get_vm = reinterpret_cast<JNI_GetCreatedJavaVMs_t> (lib.search ("JNI_GetCreatedJavaVMs")); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
507 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
508 if (!create_vm) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
509 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
|
510 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
511 if (!get_vm) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
512 throw std::string ("unable to find JNI_GetCreatedJavaVMs in ") + jvm_lib_path; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
513 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
514 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
|
515 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
516 #else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
517 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
518 // 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
|
519 // octave_shlib lib (jvm_lib_path) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
520 // 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
|
521 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
522 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
|
523 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
524 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
525 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
526 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
527 // 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
|
528 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
529 switch (jvm->GetEnv (reinterpret_cast<void **> (¤t_env), JNI_VERSION_1_2)) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
530 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
531 case JNI_EDETACHED: |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
532 // Attach the current thread |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
533 JavaVMAttachArgs vm_args; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
534 vm_args.version = JNI_VERSION_1_2; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
535 vm_args.name = const_cast<char *> ("octave"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
536 vm_args.group = NULL; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
537 if (jvm->AttachCurrentThread (reinterpret_cast<void **> (¤t_env), &vm_args) < 0) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
538 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
|
539 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
540 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
541 case JNI_EVERSION: |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
542 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
|
543 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
544 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
545 case JNI_OK: |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
546 // 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
|
547 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
548 } |
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 jvm_attached = true; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
551 //printf ("JVM attached\n"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
552 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
553 else |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
554 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
555 // No JVM exists, create one |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
556 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
557 JVMArgs vm_args; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
558 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
559 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
|
560 vm_args.add ("-Xrs"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
561 vm_args.add ("-Djava.system.class.loader=org.octave.OctClassLoader"); |
15752
f96faf028d90
make java functions part of core octave_value classes
John W. Eaton <jwe@octave.org>
parents:
15747
diff
changeset
|
562 vm_args.read_java_opts (initial_java_dir () + file_ops::dir_sep_str () + "java.opts"); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
563 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
564 # if !defined (__APPLE__) && !defined (__MACH__) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
565 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
566 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
|
567 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
|
568 //printf ("JVM created\n"); |
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 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
571 jvm_lib = lib; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
572 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
573 #else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
574 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
575 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
|
576 vm_args.to_args ()) != JNI_OK) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
577 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
|
578 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
579 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
580 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
581 #endif |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
582 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
583 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
|
584 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
585 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
586 static void |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
587 terminate_jvm (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
588 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
589 if (jvm) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
590 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
591 if (jvm_attached) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
592 jvm->DetachCurrentThread (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
593 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
594 jvm->DestroyJavaVM (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
595 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
596 jvm = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
597 jvm_attached = false; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
598 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
599 if (jvm_lib) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
600 jvm_lib.close (); |
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 } |
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 std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
605 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
|
606 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
607 std::string retval; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
608 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
609 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
610 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
611 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
|
612 retval = cstr; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
613 jni_env->ReleaseStringUTFChars (s, cstr); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
614 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
615 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
616 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
617 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
618 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
619 std::string |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
620 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
|
621 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
622 std::string retval; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
623 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
624 if (jni_env && obj) |
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 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
|
627 if (cls) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
628 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
629 if (jni_env->IsInstanceOf (obj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
630 retval = jstring_to_string (jni_env, reinterpret_cast<jstring> (obj)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
631 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
632 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
633 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
634 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
635 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
636 |
15824
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
637 bool |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
638 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
|
639 { |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
640 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
|
641 |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
642 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
|
643 { |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
644 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
|
645 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
|
646 } |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
647 |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
648 return false; |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
649 } |
abc9e5f3c661
Return correct value for ischar() predicate test on octave_java objects.
Rik <rik@octave.org>
parents:
15822
diff
changeset
|
650 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
651 static octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
652 check_exception (JNIEnv* jni_env) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
653 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
654 octave_value retval; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
655 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
656 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
|
657 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
658 if (ex) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
659 { |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
660 if (Vdebug_java) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
661 jni_env->ExceptionDescribe (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
662 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
663 jni_env->ExceptionClear (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
664 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
665 jclass_ref jcls (jni_env, jni_env->GetObjectClass (ex)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
666 jmethodID mID = jni_env->GetMethodID (jcls, "toString", "()Ljava/lang/String;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
667 jstring_ref js (jni_env, reinterpret_cast<jstring> (jni_env->CallObjectMethod (ex, mID))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
668 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
|
669 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
670 error ("[java] %s", msg.c_str ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
671 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
672 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
673 retval = Matrix (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
674 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
675 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
676 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
677 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
678 static jclass |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
679 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
|
680 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
681 static std::string class_loader; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
682 static jclass uiClass = 0; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
683 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
684 jclass jcls = jni_env->FindClass (name); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
685 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
686 if (jcls == 0) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
687 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
688 jni_env->ExceptionClear (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
689 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
690 if (! uiClass) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
691 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
692 if (class_loader.empty ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
693 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
694 jclass_ref syscls (jni_env, jni_env->FindClass ("java/lang/System")); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
695 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
|
696 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
|
697 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
|
698 class_loader = jstring_to_string (jni_env, jstring (js)); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
699 std::replace (class_loader.begin (), class_loader.end (), '.', '/'); |
15625
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 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
702 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
|
703 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
704 if (! uicls) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
705 { |
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 /* Try the netbeans way */ |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
709 std::replace (class_loader.begin (), class_loader.end (), '/', '.'); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
710 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
|
711 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
|
712 jobject_ref lObj (jni_env, jni_env->CallStaticObjectMethod (jcls2, mID)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
713 mID = jni_env->GetMethodID (jcls2, "lookup", "(Ljava/lang/Class;)Ljava/lang/Object;"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
714 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
|
715 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
|
716 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
|
717 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
|
718 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
|
719 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
720 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
721 if (uicls) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
722 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
|
723 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
724 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
725 if (uiClass) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
726 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
727 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
|
728 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
|
729 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
|
730 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
731 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
732 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
733 return jcls; |
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 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
736 static dim_vector |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
737 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
|
738 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
739 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
|
740 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
|
741 jclass_ref ccls (jni_env, jni_env->GetObjectClass (jcls)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
742 jmethodID isArray_ID = jni_env->GetMethodID (ccls, "isArray", "()Z"), |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
743 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
|
744 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
745 dim_vector dv (1, 1); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
746 int idx = 0; |
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 jobj.detach (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
749 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
|
750 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
751 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
|
752 if (idx >= dv.length ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
753 dv.resize (idx+1); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
754 dv(idx) = len; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
755 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
|
756 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
|
757 idx++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
758 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
759 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
760 return dv; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
761 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
762 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
763 static jobject |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
764 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
|
765 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
766 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
|
767 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
|
768 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
769 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
|
770 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
771 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
|
772 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
773 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
774 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
775 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
|
776 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
|
777 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
778 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
|
779 buf[k] = v(k); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
780 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
781 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
|
782 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
|
783 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
784 check_exception (jni_env); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
785 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
786 if (error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
787 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
788 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
789 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
790 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
791 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
792 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
793 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
794 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
795 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
796 static octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
797 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
|
798 const octave_value_list& idx) |
15625
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 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
801 jobject_ref resObj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
802 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
|
803 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
804 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
805 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
806 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
|
807 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
|
808 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
|
809 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
810 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
811 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
812 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
813 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
814 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
815 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
816 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
817 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
818 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
819 static octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
820 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
|
821 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
|
822 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
823 octave_value retval; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
824 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
825 jclass_ref rhsCls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
826 jobject_ref resObj (jni_env), rhsObj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
827 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
|
828 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
829 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
|
830 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
831 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
|
832 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
|
833 "(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
|
834 resObj = jni_env->CallStaticObjectMethod (helperClass, mID, |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
835 jobj, jobject (java_idx), jobject (rhsObj)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
836 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
837 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
838 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
839 retval = box (jni_env, resObj); |
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 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
842 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
843 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
844 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
845 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
846 static string_vector |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
847 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
|
848 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
849 std::list<std::string> name_list; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
850 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
851 if (jni_env) |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
852 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
853 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
|
854 jclass_ref ccls (jni_env, jni_env->GetObjectClass (cls)); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
855 jmethodID getMethods_ID = jni_env->GetMethodID (ccls, "getMethods", "()[Ljava/lang/reflect/Method;"), |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
856 getFields_ID = jni_env->GetMethodID (ccls, "getFields", "()[Ljava/lang/reflect/Field;"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
857 jobjectArray_ref mList (jni_env, reinterpret_cast<jobjectArray> (jni_env->CallObjectMethod (cls, getMethods_ID))), |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
858 fList (jni_env, reinterpret_cast<jobjectArray> (jni_env->CallObjectMethod (cls, getFields_ID))); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
859 int mLen = jni_env->GetArrayLength (mList), fLen = jni_env->GetArrayLength (fList); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
860 jclass_ref mCls (jni_env, jni_env->FindClass ("java/lang/reflect/Method")), |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
861 fCls (jni_env, jni_env->FindClass ("java/lang/reflect/Field")); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
862 jmethodID m_getName_ID = jni_env->GetMethodID (mCls, "getName", "()Ljava/lang/String;"), |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
863 f_getName_ID = jni_env->GetMethodID (fCls, "getName", "()Ljava/lang/String;"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
864 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
865 for (int i = 0; i < mLen; i++) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
866 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
867 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
|
868 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
|
869 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
|
870 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
871 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
872 for (int i = 0; i < fLen; i++) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
873 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
874 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
|
875 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
|
876 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
|
877 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
878 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
879 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
880 string_vector v (name_list); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
881 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
882 return v.sort (true); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
883 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
884 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
885 static octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
886 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
|
887 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
888 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
889 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
890 if (jni_env && java_object) |
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 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
|
893 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
894 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
|
895 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
|
896 else if (force) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
897 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
898 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
|
899 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
900 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
|
901 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
902 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
|
903 int len = jni_env->GetArrayLength (array); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
904 Cell c (len, 1); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
905 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
906 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
|
907 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
908 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
|
909 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
910 if (js) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
911 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
|
912 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
913 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
914 c(i) = check_exception (jni_env); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
915 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
916 if (error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
917 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
918 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
919 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
920 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
921 retval = octave_value (c); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
922 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
923 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
924 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
925 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
|
926 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
|
927 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
|
928 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
929 if (js) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
930 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
|
931 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
932 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
933 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
934 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
935 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
936 error ("unable to convert Java object to string"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
937 } |
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 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
940 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
941 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
942 #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
|
943 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
944 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
945 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
|
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 jclass_ref cls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
949 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
950 if (! jobj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
951 retval = Matrix (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
952 |
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
|
953 while (retval.is_undefined ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
954 { |
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
|
955 // 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
|
956 // 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
|
957 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
|
958 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
959 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
960 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
|
961 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
|
962 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
963 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
964 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
965 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
|
966 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
967 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
968 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
|
969 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
|
970 break; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
971 } |
15625
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 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
|
974 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
975 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
976 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
|
977 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
978 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
979 |
15815
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
980 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
|
981 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
|
982 { |
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
983 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
|
984 retval = jni_env->CallCharMethod (jobj, m); |
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
985 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
|
986 break; |
15815
f28b3dcbaa9a
Add autoconversion between java.lang.Character class and Octave string class.
Rik <rik@octave.org>
parents:
15813
diff
changeset
|
987 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
988 |
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
|
989 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
|
990 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
991 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
|
992 |
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
|
993 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
|
994 { |
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
|
995 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
|
996 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
|
997 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
|
998 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
|
999 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
|
1000 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1001 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
|
1002 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
|
1003 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1004 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
|
1005 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
|
1006 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
|
1007 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1008 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
|
1009 |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1010 if (s == "double") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1011 { |
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
|
1012 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
|
1013 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
|
1014 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
|
1015 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
|
1016 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
|
1017 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1018 } |
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
|
1019 else if (s == "byte") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1020 { |
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
|
1021 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
|
1022 { |
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 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
|
1024 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
|
1025 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
|
1026 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
|
1027 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
|
1028 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
|
1029 } |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1030 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
|
1031 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1032 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
|
1033 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
|
1034 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
|
1035 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
|
1036 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
|
1037 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
|
1038 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1039 } |
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
|
1040 else if (s == "integer") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1041 { |
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
|
1042 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
|
1043 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1044 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
|
1045 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
|
1046 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
|
1047 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
|
1048 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
|
1049 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
|
1050 } |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1051 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
|
1052 { |
72661fe4b9e5
Short-circuit out of Java box code as soon as valid class has been found.
Rik <rik@octave.org>
parents:
15820
diff
changeset
|
1053 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
|
1054 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
|
1055 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
|
1056 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
|
1057 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
|
1058 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
|
1059 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1060 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1061 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1062 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1063 |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1064 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
|
1065 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1066 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1067 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
|
1068 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
|
1069 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
|
1070 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1071 if (it != octave_ref_map.end ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1072 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
|
1073 |
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 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1075 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1076 |
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
|
1077 // 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
|
1078 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
|
1079 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
|
1080 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1081 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1082 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1083 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1084 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1085 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1086 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
|
1087 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1088 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
|
1089 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1090 if (retval.is_java ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1091 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1092 retval = octave_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1093 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1094 jclass_ref cls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1095 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1096 if (retval.is_undefined ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1097 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1098 cls = jni_env->FindClass ("[D"); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1099 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1100 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1101 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1102 jdoubleArray jarr = reinterpret_cast<jdoubleArray> (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1103 int len = jni_env->GetArrayLength (jarr); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1104 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1105 if (len > 0) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1106 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1107 Matrix m (1, len); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1108 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
|
1109 retval = m; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1110 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1111 else |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1112 retval = Matrix (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1113 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1114 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1115 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1116 if (retval.is_undefined ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1117 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1118 cls = jni_env->FindClass ("[[D"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1119 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1120 if (jni_env->IsInstanceOf (jobj, cls)) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1121 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1122 jobjectArray jarr = reinterpret_cast<jobjectArray> (jobj); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1123 int rows = jni_env->GetArrayLength (jarr), cols = 0; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1124 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1125 if (rows > 0) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1126 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1127 Matrix m; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1128 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1129 for (int r = 0; r < rows; r++) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1130 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1131 jdoubleArray_ref row (jni_env, reinterpret_cast<jdoubleArray> (jni_env->GetObjectArrayElement (jarr, r))); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1132 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1133 if (m.length () == 0) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1134 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1135 cols = jni_env->GetArrayLength (row); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1136 m.resize (cols, rows); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1137 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1138 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
|
1139 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1140 retval = m.transpose (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1141 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1142 else |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1143 retval = Matrix (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1144 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1145 } |
15625
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 if (retval.is_undefined ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1148 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1149 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
|
1150 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1151 if (jni_env->IsInstanceOf (jobj, cls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1152 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1153 jobjectArray jarr = reinterpret_cast<jobjectArray> (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1154 int len = jni_env->GetArrayLength (jarr); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1155 Cell m (len, 1); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1156 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1157 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
|
1158 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1159 jstring_ref js (jni_env, reinterpret_cast<jstring> (jni_env->GetObjectArrayElement (jarr, i))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1160 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
|
1161 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1162 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1163 retval = m; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1164 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1165 } |
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 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1168 if (retval.is_undefined ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1169 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
|
1170 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1171 return retval; |
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 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1174 int |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1175 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
|
1176 jclass_ref& jcls) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1177 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1178 int found = 1; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1179 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1180 if (val.is_java ()) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1181 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1182 octave_java *ovj = TO_JAVA (val); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1183 jobj = ovj->to_java (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1184 jobj.detach (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1185 jcls = jni_env->GetObjectClass (jobj); |
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 else if (val.is_string ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1188 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1189 std::string s = val.string_value (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1190 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1191 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
|
1192 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1193 } |
15822
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1194 else if (val.is_real_scalar ()) |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1195 { |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1196 if (val.is_double_type ()) |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1197 { |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1198 double dval = val.double_value (); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1199 jclass_ref dcls (jni_env, jni_env->FindClass ("java/lang/Double")); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1200 jfieldID fid = jni_env->GetStaticFieldID (dcls, "TYPE", "Ljava/lang/Class;"); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1201 jmethodID mid = jni_env->GetMethodID (dcls, "<init>", "(D)V"); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1202 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (dcls, fid)); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1203 jobj = jni_env->NewObject (dcls, mid, dval); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1204 } |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1205 else |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1206 { |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1207 float fval = val.float_scalar_value (); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1208 jclass_ref fcls (jni_env, jni_env->FindClass ("java/lang/Float")); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1209 jfieldID fid = jni_env->GetStaticFieldID (fcls, "TYPE", "Ljava/lang/Class;"); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1210 jmethodID mid = jni_env->GetMethodID (fcls, "<init>", "(F)V"); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1211 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (fcls, fid)); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1212 jobj = jni_env->NewObject (fcls, mid, fval); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1213 } |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1214 } |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1215 else if (val.is_integer_type () && val.is_scalar_type ()) |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1216 { |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1217 int32_t ival = val.int32_scalar_value (); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1218 jclass_ref icls (jni_env, jni_env->FindClass ("java/lang/Integer")); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1219 jfieldID fid = jni_env->GetStaticFieldID (icls, "TYPE", "Ljava/lang/Class;"); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1220 jmethodID mid = jni_env->GetMethodID (icls, "<init>", "(I)V"); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1221 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (icls, fid)); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1222 jobj = jni_env->NewObject (icls, mid, ival); |
e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
Rik <rik@octave.org>
parents:
15821
diff
changeset
|
1223 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1224 else if (val.is_bool_scalar ()) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1225 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1226 bool bval = val.bool_value (); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1227 jclass_ref bcls (jni_env, jni_env->FindClass ("java/lang/Boolean")); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1228 jfieldID fid = jni_env->GetStaticFieldID (bcls, "TYPE", "Ljava/lang/Class;"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1229 jmethodID mid = jni_env->GetMethodID (bcls, "<init>", "(Z)V"); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1230 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (bcls, fid)); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1231 jobj = jni_env->NewObject (bcls, mid, bval); |
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 else if (val.is_empty ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1234 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1235 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
|
1236 jcls = 0; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1237 //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
|
1238 } |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
1239 else if (!Vjava_matrix_autoconversion |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1240 && ((val.is_real_matrix () |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1241 && (val.rows () == 1 || val.columns () == 1)) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1242 || val.is_range ())) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1243 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1244 Matrix m = val.matrix_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1245 jdoubleArray dv = jni_env->NewDoubleArray (m.length ()); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1246 //for (int i = 0; i < m.length (); i++) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1247 jni_env->SetDoubleArrayRegion (dv, 0, m.length (), m.fortran_vec ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1248 jobj = dv; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1249 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1250 } |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
1251 else if (Vjava_matrix_autoconversion |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1252 && (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
|
1253 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1254 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
|
1255 dim_vector dims = val.dims (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1256 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
|
1257 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
|
1258 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1259 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
|
1260 iv_data[i] = dims(i); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1261 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1262 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
|
1263 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1264 if (val.is_double_type ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1265 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1266 NDArray m = val.array_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1267 jdoubleArray_ref dv (jni_env, jni_env->NewDoubleArray (m.length ())); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1268 jni_env->SetDoubleArrayRegion (jdoubleArray (dv), 0, m.length (), m.fortran_vec ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1269 jmethodID mID = jni_env->GetMethodID (mcls, "<init>", "([D[I)V"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1270 jobj = jni_env->NewObject (jclass (mcls), mID, jdoubleArray (dv), jintArray (iv)); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1271 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1272 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1273 else if (val.is_int8_type ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1274 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1275 int8NDArray m = val.int8_array_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1276 jbyteArray_ref bv (jni_env, jni_env->NewByteArray (m.length ())); |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1277 jni_env->SetByteArrayRegion (jbyteArray (bv), 0, m.length (), 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
|
1278 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
|
1279 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
|
1280 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1281 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1282 else if (val.is_uint8_type ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1283 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1284 uint8NDArray m = val.uint8_array_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1285 jbyteArray_ref bv (jni_env, jni_env->NewByteArray (m.length ())); |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1286 jni_env->SetByteArrayRegion (jbyteArray (bv), 0, m.length (), 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
|
1287 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
|
1288 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
|
1289 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1290 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1291 else if (val.is_int32_type ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1292 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1293 int32NDArray m = val.int32_array_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1294 jintArray_ref v (jni_env, jni_env->NewIntArray (m.length ())); |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1295 jni_env->SetIntArrayRegion (jintArray (v), 0, m.length (), 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
|
1296 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
|
1297 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
|
1298 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1299 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1300 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1301 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1302 found = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1303 error ("cannot convert matrix of type `%s'", val.class_name ().c_str ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1304 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1305 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1306 else if (val.is_cellstr ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1307 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1308 Cell cellStr = val.cell_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1309 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
|
1310 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
|
1311 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
|
1312 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1313 jstring_ref jstr (jni_env, 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
|
1314 jni_env->SetObjectArrayElement (array, i, jstr); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1315 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1316 jobj = array; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1317 jcls = jni_env->GetObjectClass (jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1318 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1319 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1320 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1321 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
|
1322 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
|
1323 int ID = octave_java_refcount++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1324 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1325 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
|
1326 jcls = rcls; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1327 octave_ref_map[ID] = val; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1328 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1329 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1330 return found; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1331 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1332 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1333 int |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1334 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
|
1335 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
|
1336 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1337 int found = 1; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1338 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1339 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
|
1340 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
|
1341 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1342 if (! jobjs) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1343 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
|
1344 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1345 if (! jclss) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1346 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
|
1347 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1348 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
|
1349 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1350 jobject_ref jobj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1351 jclass_ref jcls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1352 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1353 if (! unbox (jni_env, args(i), jobj, jcls)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1354 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1355 found = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1356 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1357 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1358 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1359 jni_env->SetObjectArrayElement (jobjs, i, jobj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1360 jni_env->SetObjectArrayElement (jclss, i, jcls); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1361 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1362 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1363 return found; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1364 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1365 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1366 static long |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1367 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
|
1368 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1369 if (jni_env) |
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 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
|
1372 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
|
1373 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
|
1374 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1375 if (jthread) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1376 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1377 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
|
1378 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
|
1379 long result = jni_env->CallLongMethod (jthread, mID); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1380 //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
|
1381 return result; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1382 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1383 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1384 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1385 return -1; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1386 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1387 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1388 static int |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1389 java_event_hook (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1390 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1391 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
|
1392 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1393 if (current_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1394 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1395 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
|
1396 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
|
1397 current_env->CallStaticVoidMethod (cls, mID); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1398 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1399 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1400 return 0; |
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 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1403 static void |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1404 initialize_java (void) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1405 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1406 if (! jvm) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1407 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1408 try |
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 initialize_jvm (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1411 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1412 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
|
1413 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1414 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
|
1415 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1416 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
|
1417 //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
|
1418 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1419 catch (std::string msg) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1420 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1421 error (msg.c_str ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1422 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1423 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1424 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1425 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1426 DEFUN (__java_init__, , , |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1427 "-*- 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
|
1428 @deftypefn {Built-in Function} {} java_init ()\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1429 Internal function used @strong{only} when debugging Java interface.\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1430 Function will directly call initialize_java() to create an instance of a JVM.\n\ |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1431 @end deftypefn") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1432 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1433 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1434 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1435 retval = 0; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1436 initialize_java (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1437 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1438 retval = 1; |
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 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1441 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1442 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1443 DEFUN (__java_exit__, , , |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1444 "-*- 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
|
1445 @deftypefn {Built-in Function} {} java_exit ()\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1446 Internal function used @strong{only} when debugging Java interface.\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1447 Function will directly call terminate_jvm() to destroy the current JVM\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1448 instance.\n\ |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1449 @end deftypefn") |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1450 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1451 octave_value retval; |
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 terminate_jvm (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1454 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1455 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1456 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1457 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1458 JNIEXPORT jboolean JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1459 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
|
1460 jobjectArray argin, jobjectArray argout) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1461 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1462 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
|
1463 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1464 int nargout = env->GetArrayLength (argout); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1465 int nargin = env->GetArrayLength (argin); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1466 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1467 octave_value_list varargin, varargout; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1468 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1469 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
|
1470 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
|
1471 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1472 varargout = feval (fname, varargin, nargout); |
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 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1475 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1476 jobjectArray_ref out_objs (env, argout), out_clss (env); |
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 out_objs.detach (); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1479 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1480 if (unbox (env, varargout, out_objs, out_clss)) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1481 return true; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1482 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1483 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1484 return false; |
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 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1487 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1488 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
|
1489 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1490 octave_ref_map.erase (ID); |
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 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1494 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
|
1495 jobjectArray args) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1496 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1497 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
|
1498 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1499 if (it != octave_ref_map.end ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1500 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1501 octave_value val = it->second; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1502 int len = env->GetArrayLength (args); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1503 octave_value_list oct_args; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1504 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1505 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
|
1506 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1507 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
|
1508 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
|
1509 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1510 if (error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1511 break; |
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 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1514 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1515 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1516 BEGIN_INTERRUPT_WITH_EXCEPTIONS; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1517 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1518 if (val.is_function_handle ()) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1519 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1520 octave_function *fcn = val.function_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1521 feval (fcn, oct_args); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1522 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1523 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
|
1524 && (val.rows () == 1 || val.columns () == 1) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1525 && 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
|
1526 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1527 Cell c = val.cell_value (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1528 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
|
1529 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1530 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
|
1531 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
|
1532 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1533 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1534 feval (fcn, oct_args); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1535 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1536 else |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1537 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
|
1538 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1539 END_INTERRUPT_WITH_EXCEPTIONS; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1540 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1541 } |
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 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1544 JNIEXPORT void JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1545 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
|
1546 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1547 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
|
1548 int pstatus; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1549 eval_string (s, false, pstatus, 0); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1550 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1551 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1552 JNIEXPORT jboolean JNICALL |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1553 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
|
1554 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1555 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
|
1556 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1557 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1558 // octave_java class definition |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1559 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1560 DEFINE_OCTAVE_ALLOCATOR (octave_java); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1561 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1562 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
|
1563 |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1564 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
|
1565 |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1566 void |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1567 octave_java::register_type (void) |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1568 { |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1569 t_id = octave_value_typeinfo::register_type |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1570 (octave_java::t_name, "<unknown>", octave_value (new octave_java ())); |
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
1571 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1572 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1573 dim_vector |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1574 octave_java::dims (void) const |
15625
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 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1577 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1578 if (current_env && java_object) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1579 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
|
1580 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1581 return dim_vector (1, 1); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1582 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1583 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1584 JNIEnv * |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1585 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
|
1586 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1587 JNIEnv *env = NULL; |
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 (jvm) |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1590 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
|
1591 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1592 return env; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1593 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1594 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1595 octave_value_list |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1596 octave_java::subsref (const std::string& type, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1597 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
|
1598 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1599 octave_value_list retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1600 int skip = 1; |
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 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1603 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1604 switch (type[0]) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1605 { |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1606 case '.': |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1607 if (type.length () > 1 && type[1] == '(') |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1608 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1609 octave_value_list ovl; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1610 count++; |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1611 ovl(1) = octave_value (this); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1612 ovl(0) = (idx.front ())(0); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1613 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
|
1614 ovl.append (*++it); |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1615 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
|
1616 skip++; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1617 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1618 else |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1619 { |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1620 octave_value_list ovl; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1621 count++; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1622 ovl(0) = octave_value (this); |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1623 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
|
1624 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
|
1625 } |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1626 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1627 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1628 case '(': |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1629 if (current_env) |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1630 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
|
1631 break; |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1632 |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1633 default: |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1634 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
|
1635 break; |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1636 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1637 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1638 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
|
1639 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
|
1640 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1641 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1642 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1643 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1644 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1645 octave_java::subsasgn (const std::string& type, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1646 const std::list<octave_value_list>&idx, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1647 const octave_value &rhs) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1648 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1649 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1650 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1651 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1652 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1653 switch (type[0]) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1654 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1655 case '.': |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1656 if (type.length () == 1) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1657 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1658 // field assignment |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1659 octave_value_list ovl; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1660 count++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1661 ovl(0) = octave_value (this); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1662 ovl(1) = (idx.front ())(0); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1663 ovl(2) = rhs; |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1664 feval ("__java_set__", ovl, 0); |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1665 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1666 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1667 count++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1668 retval = octave_value (this); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1669 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1670 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1671 else if (type.length () > 2 && type[1] == '(') |
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 std::list<octave_value_list> new_idx; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1674 std::list<octave_value_list>::const_iterator it = idx.begin (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1675 new_idx.push_back (*it++); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1676 new_idx.push_back (*it++); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1677 octave_value_list u = subsref (type.substr (0, 2), new_idx, 1); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1678 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1679 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1680 std::list<octave_value_list> next_idx (idx); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1681 next_idx.erase (next_idx.begin ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1682 next_idx.erase (next_idx.begin ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1683 u(0).subsasgn (type.substr (2), next_idx, rhs); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1684 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1685 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1686 count++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1687 retval = octave_value (this); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1688 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1689 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1690 } |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1691 else if (type[1] == '.') |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1692 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1693 octave_value_list u = subsref (type.substr (0, 1), idx, 1); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1694 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1695 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1696 std::list<octave_value_list> next_idx (idx); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1697 next_idx.erase (next_idx.begin ()); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1698 u(0).subsasgn (type.substr (1), next_idx, rhs); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1699 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1700 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1701 count++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1702 retval = octave_value (this); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1703 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1704 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1705 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1706 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1707 error ("invalid indexing/assignment on Java object"); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1708 break; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1709 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1710 case '(': |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1711 if (current_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1712 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1713 set_array_elements (current_env, to_java (), idx.front (), rhs); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1714 if (! error_state) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1715 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1716 count++; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1717 retval = octave_value (this); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1718 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1719 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1720 break; |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1721 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1722 default: |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1723 error ("Java object cannot be indexed with %c", type[0]); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1724 break; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1725 } |
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 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1728 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1729 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1730 string_vector |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1731 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
|
1732 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1733 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1734 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1735 if (current_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1736 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
|
1737 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1738 return string_vector (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1739 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1740 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1741 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1742 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
|
1743 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1744 JNIEnv *current_env = thread_jni_env (); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1745 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1746 if (current_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1747 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
|
1748 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1749 return octave_value (""); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1750 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1751 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1752 octave_value |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1753 octave_java::do_javaMethod (JNIEnv* jni_env, const std::string& name, |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1754 const octave_value_list& args) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1755 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1756 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1757 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1758 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1759 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1760 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
|
1761 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
|
1762 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1763 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
|
1764 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
|
1765 "(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
|
1766 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
|
1767 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
|
1768 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
|
1769 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1770 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1771 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1772 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1773 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1774 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1775 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1776 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1777 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1778 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1779 octave_value |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1780 octave_java:: do_javaMethod (JNIEnv* jni_env, |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1781 const std::string& class_name, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1782 const std::string& name, |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1783 const octave_value_list& args) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1784 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1785 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1786 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1787 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1788 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1789 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
|
1790 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
|
1791 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1792 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
|
1793 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
|
1794 "(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
|
1795 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
|
1796 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
|
1797 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
|
1798 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
|
1799 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1800 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1801 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1802 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1803 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1804 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1805 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1806 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1807 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1808 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1809 octave_value |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1810 octave_java::do_javaObject (JNIEnv* jni_env, const std::string& name, |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1811 const octave_value_list& args) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1812 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1813 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1814 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1815 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1816 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1817 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
|
1818 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1819 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
|
1820 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1821 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
|
1822 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
|
1823 "(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
|
1824 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
|
1825 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
|
1826 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
|
1827 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1828 if (resObj) |
15816
59b6c6aee042
Don't box return values from javaObject. Always return a Java object.
Rik <rik@octave.org>
parents:
15815
diff
changeset
|
1829 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
|
1830 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1831 check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1832 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1833 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1834 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1835 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1836 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1837 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1838 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1839 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
|
1840 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1841 octave_value retval; |
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 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1844 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1845 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
|
1846 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
|
1847 "(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
|
1848 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
|
1849 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
|
1850 to_java (), jstring (fName))); |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1851 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1852 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1853 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1854 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1855 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1856 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1857 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1858 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1859 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1860 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1861 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1862 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
|
1863 const std::string& name) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1864 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1865 octave_value 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 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1868 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1869 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
|
1870 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
|
1871 "(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
|
1872 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
|
1873 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
|
1874 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
|
1875 jstring (cName), jstring (fName))); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1876 if (resObj) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1877 retval = box (jni_env, resObj); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1878 else |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1879 retval = check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1880 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1881 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1882 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1883 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1884 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1885 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1886 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
|
1887 const octave_value& val) |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1888 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1889 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1890 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1891 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1892 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1893 jobject_ref jobj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1894 jclass_ref jcls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1895 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1896 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
|
1897 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1898 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
|
1899 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
|
1900 "(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
|
1901 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
|
1902 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
|
1903 check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1904 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1905 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1906 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1907 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1908 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1909 |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1910 octave_value |
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1911 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
|
1912 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
|
1913 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1914 octave_value retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1915 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1916 if (jni_env) |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1917 { |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1918 jobject_ref jobj (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1919 jclass_ref jcls (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1920 |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1921 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
|
1922 { |
15744
686580b1a934
eliminate most compilation warnings for __java__.cc
John W. Eaton <jwe@octave.org>
parents:
15743
diff
changeset
|
1923 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
|
1924 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
|
1925 "(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
|
1926 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
|
1927 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
|
1928 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
|
1929 check_exception (jni_env); |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1930 } |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1931 } |
15745
19850dfc2f88
* __java__.h, __java__.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
15744
diff
changeset
|
1932 |
15625
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1933 return retval; |
acf0addfc610
include Octave Forge java package in core Octave
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1934 } |
15736
6faa01ff2967
build: Add --disable-java option to configure (bug #37838).
Rik <rik@octave.org>
parents:
15625
diff
changeset
|
1935 |
15806
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
1936 #endif // endif on HAVE_JAVA |
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
1937 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1938 // 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
|
1939 // 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
|
1940 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1941 DEFUN (javaObject, args, , |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1942 "-*- texinfo -*-\n\ |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
1943 @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
|
1944 @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
|
1945 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
|
1946 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
|
1947 \n\ |
15806
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
1948 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
|
1949 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
|
1950 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1951 @example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1952 @group\n\ |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
1953 x = javaObject (\"java.lang.StringBuffer\")\n\ |
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
1954 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
|
1955 @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
|
1956 @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
|
1957 \n\ |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
1958 @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
|
1959 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1960 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1961 #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
|
1962 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
|
1963 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1964 initialize_java (); |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1965 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1966 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
|
1967 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1968 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
|
1969 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1970 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
|
1971 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1972 std::string classname = 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
|
1973 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
|
1974 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1975 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
|
1976 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
|
1977 tmp(i-1) = args(i); |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
1978 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
|
1979 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1980 else |
15792
12394261da0f
doc: tweak docstrings for javaObject and javaArray.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
1981 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
|
1982 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1983 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1984 print_usage (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1985 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1986 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1987 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1988 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1989 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
|
1990 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
|
1991 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1992 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
1993 |
15825
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
1994 /* |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
1995 %!testif HAVE_JAVA |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
1996 %% 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
|
1997 %% 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
|
1998 %% 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
|
1999 %! 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
|
2000 */ |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2001 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2002 DEFUN (javaMethod, args, , |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2003 "-*- texinfo -*-\n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2004 @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
|
2005 @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
|
2006 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
|
2007 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
|
2008 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
|
2009 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
|
2010 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2011 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
|
2012 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
|
2013 equivalent\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2014 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2015 @example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2016 @group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2017 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
|
2018 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
|
2019 @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
|
2020 @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
|
2021 \n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2022 @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
|
2023 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2024 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2025 #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
|
2026 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
|
2027 |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2028 initialize_java (); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2029 |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2030 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
|
2031 { |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2032 JNIEnv *current_env = octave_java::thread_jni_env (); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2033 |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2034 if (args.length () > 1) |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2035 { |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2036 std::string methodname = args(0).string_value (); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2037 if (! error_state) |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2038 { |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2039 octave_value_list tmp; |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2040 for (int i=2; i<args.length (); i++) |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2041 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
|
2042 |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
2043 if (args(1).is_java ()) |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2044 { |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2045 octave_java *jobj = TO_JAVA (args(1)); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2046 retval = jobj->do_javaMethod (current_env, methodname, tmp); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2047 } |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2048 else if (args(1).is_string ()) |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2049 { |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2050 std::string cls = args(1).string_value (); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2051 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
|
2052 } |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2053 else |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2054 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
|
2055 } |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2056 else |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2057 error ("javaMethod: METHODNAME must be a string"); |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2058 } |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2059 else |
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2060 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
|
2061 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2062 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2063 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2064 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2065 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
|
2066 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
|
2067 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2068 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2069 |
15825
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2070 /* |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2071 %!testif HAVE_JAVA |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2072 %% 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
|
2073 %! 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
|
2074 %! 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
|
2075 */ |
9854666df787
ov-java.cc: tests added for javaObject and javaMethod
Philip Nienhuis <prnienhuis@users.sf.net>
parents:
15824
diff
changeset
|
2076 |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2077 DEFUN (__java_get__, args, , |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2078 "-*- texinfo -*-\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2079 @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
|
2080 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
|
2081 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
|
2082 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
|
2083 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2084 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
|
2085 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
|
2086 equivalent\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2087 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2088 @example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2089 @group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2090 __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
|
2091 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
|
2092 @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
|
2093 @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
|
2094 \n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2095 @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
|
2096 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2097 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2098 #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
|
2099 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
|
2100 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2101 initialize_java (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2102 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2103 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
|
2104 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2105 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
|
2106 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2107 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
|
2108 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2109 std::string name = args(1).string_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2110 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
|
2111 { |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
2112 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
|
2113 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2114 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
|
2115 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
|
2116 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2117 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
|
2118 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2119 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
|
2120 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
|
2121 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2122 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2123 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
|
2124 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2125 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2126 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
|
2127 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2128 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2129 print_usage (); |
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 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2132 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2133 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2134 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
|
2135 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
|
2136 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2137 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2138 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2139 DEFUN (__java_set__, args, , |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2140 "-*- texinfo -*-\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2141 @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
|
2142 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
|
2143 @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
|
2144 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
|
2145 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2146 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
|
2147 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
|
2148 equivalent\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2149 \n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2150 @example\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2151 @group\n\ |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2152 __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
|
2153 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
|
2154 @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
|
2155 @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
|
2156 \n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2157 @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
|
2158 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2159 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2160 #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
|
2161 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
|
2162 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2163 initialize_java (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2164 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2165 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
|
2166 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2167 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
|
2168 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2169 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
|
2170 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2171 std::string name = args(1).string_value (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2172 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
|
2173 { |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
2174 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
|
2175 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2176 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
|
2177 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
|
2178 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2179 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
|
2180 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2181 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
|
2182 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
|
2183 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2184 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2185 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
|
2186 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2187 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2188 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
|
2189 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2190 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2191 print_usage (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2192 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2193 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2194 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2195 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2196 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
|
2197 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
|
2198 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2199 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2200 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2201 DEFUN (java2mat, args, , |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2202 "-*- texinfo -*-\n\ |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15771
diff
changeset
|
2203 @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
|
2204 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
|
2205 @end deftypefn") |
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 #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
|
2208 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
|
2209 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2210 initialize_java (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2211 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2212 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
|
2213 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2214 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
|
2215 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2216 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
|
2217 { |
15813
10d6ab9b1b4f
Implement octave_value function class_name() for class "octave_java"
Rik <rik@octave.org>
parents:
15806
diff
changeset
|
2218 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
|
2219 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2220 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
|
2221 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
|
2222 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2223 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2224 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
|
2225 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2226 else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2227 print_usage (); |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2228 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2229 |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2230 return retval; |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2231 #else |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2232 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
|
2233 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
|
2234 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2235 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2236 |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2237 DEFUN (java_matrix_autoconversion, args, nargout, |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2238 "-*- texinfo -*-\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2239 @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
|
2240 @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
|
2241 @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
|
2242 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
|
2243 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
|
2244 \n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2245 When called from inside a function with the \"local\" option, the variable is\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2246 changed locally for the function and any subroutines it calls. The original\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2247 variable value is restored when exiting the function.\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2248 @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
|
2249 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2250 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2251 #ifdef HAVE_JAVA |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2252 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
|
2253 #else |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2254 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
|
2255 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
|
2256 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2257 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2258 |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2259 DEFUN (java_unsigned_autoconversion, args, nargout, |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2260 "-*- texinfo -*-\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2261 @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
|
2262 @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
|
2263 @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
|
2264 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
|
2265 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
|
2266 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
|
2267 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
|
2268 \n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2269 When called from inside a function with the \"local\" option, the variable is\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2270 changed locally for the function and any subroutines it calls. The original\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2271 variable value is restored when exiting the function.\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2272 @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
|
2273 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2274 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2275 #ifdef HAVE_JAVA |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2276 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
|
2277 #else |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2278 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
|
2279 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
|
2280 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2281 } |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2282 |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2283 DEFUN (debug_java, args, nargout, |
15771
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2284 "-*- texinfo -*-\n\ |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2285 @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
|
2286 @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
|
2287 @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
|
2288 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
|
2289 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
|
2290 is printed.\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2291 \n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2292 When called from inside a function with the \"local\" option, the variable is\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2293 changed locally for the function and any subroutines it calls. The original\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2294 variable value is restored when exiting the function.\n\ |
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2295 @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
|
2296 @end deftypefn") |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2297 { |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2298 #ifdef HAVE_JAVA |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2299 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
|
2300 #else |
15800
d9b8333df5e4
Deprecate java_debug, java_convert_matrix, java_unsigned_conversion.
Rik <rik@octave.org>
parents:
15798
diff
changeset
|
2301 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
|
2302 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
|
2303 #endif |
4698ea77aa75
Hide java_init, java_exit functions. Deprecate java_new, java_set, java_get.
Rik <rik@octave.org>
parents:
15770
diff
changeset
|
2304 } |
15736
6faa01ff2967
build: Add --disable-java option to configure (bug #37838).
Rik <rik@octave.org>
parents:
15625
diff
changeset
|
2305 |
15770 | 2306 // Outside of #ifdef HAVE_JAVA because it is desirable to be able to |
15806
01d4f742d75d
doc: Re-organize and improve Java Interface documentation.
Rik <rik@octave.org>
parents:
15800
diff
changeset
|
2307 // test for the presence of a Java object without having Java installed. |
15770 | 2308 DEFUN (isjava, args, , |
2309 "-*- texinfo -*-\n\ | |
2310 @deftypefn {Built-in Function} {} isjava (@var{x})\n\ | |
2311 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
|
2312 @seealso{class, typeinfo, isa, javaObject}\n\ |
15770 | 2313 @end deftypefn") |
2314 { | |
2315 octave_value retval; | |
2316 | |
2317 if (args.length () != 1) | |
2318 print_usage (); | |
2319 else | |
2320 retval = args(0).is_java (); | |
2321 | |
2322 return retval; | |
2323 } | |
2324 |