Mercurial > hg > octave-nkf
annotate scripts/general/fieldnames.m @ 20830:b65888ec820e draft default tip gccjit
dmalcom gcc jit import
author | Stefan Mahr <dac922@gmx.de> |
---|---|
date | Fri, 27 Feb 2015 16:59:36 +0100 |
parents | 7503499a252b |
children |
rev | line source |
---|---|
19898
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
19793
diff
changeset
|
1 ## Copyright (C) 2012-2015 Rik Wehbring |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
2 ## |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
3 ## This file is part of Octave. |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
4 ## |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
7 ## the Free Software Foundation; either version 3 of the License, or (at |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
8 ## your option) any later version. |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
9 ## |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, but |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
13 ## General Public License for more details. |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
14 ## |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
16 ## along with Octave; see the file COPYING. If not, see |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
17 ## <http://www.gnu.org/licenses/>. |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
18 |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
20 ## @deftypefn {Function File} {@var{names} =} fieldnames (@var{struct}) |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
21 ## @deftypefnx {Function File} {@var{names} =} fieldnames (@var{obj}) |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
22 ## @deftypefnx {Function File} {@var{names} =} fieldnames (@var{javaobj}) |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
23 ## @deftypefnx {Function File} {@var{names} =} fieldnames ("@var{jclassname}") |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
24 ## Return a cell array of strings with the names of the fields in the |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
25 ## specified input. |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
26 ## |
20368
7503499a252b
doc: Update docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
20243
diff
changeset
|
27 ## When the input is a structure @var{struct}, the names are the elements of |
7503499a252b
doc: Update docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
20243
diff
changeset
|
28 ## the structure. |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
29 ## |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
30 ## When the input is an Octave object @var{obj}, the names are the public |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
31 ## properties of the object. |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
32 ## |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
33 ## When the input is a Java object @var{javaobj} or Java classname |
17384
8c5878260636
doc: Fix typo in fieldnames docstring.
Rik <rik@octave.org>
parents:
16724
diff
changeset
|
34 ## @var{jclassname} the name are the public data elements of the object or |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
35 ## class. |
18606
fcd87f68af4f
Deprecate nfields and replace with numfields.
Rik <rik@octave.org>
parents:
18601
diff
changeset
|
36 ## @seealso{numfields, isfield, orderfields, struct, methods} |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
37 ## @end deftypefn |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
38 |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
39 function names = fieldnames (obj) |
19790
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18601
diff
changeset
|
40 |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
41 if (nargin != 1) |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
42 print_usage (); |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
43 endif |
19790
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18601
diff
changeset
|
44 |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
45 if (isstruct (obj) || isobject (obj)) |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
46 ## Call internal C++ function for structs or Octave objects |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
47 names = __fieldnames__ (obj); |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
48 elseif (isjava (obj) || ischar (obj)) |
15816
59b6c6aee042
Don't box return values from javaObject. Always return a Java object.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
49 ## FIXME: Function prototype that excepts java obj exists, but doesn't |
59b6c6aee042
Don't box return values from javaObject. Always return a Java object.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
50 ## work if obj is java.lang.String. Convert obj to classname. |
20243
490ae1d98f27
fieldnames.m: back out cset 68aec55f5eb6, bug is still present (bug #42710)
Carnë Draug <carandraug@octave.org>
parents:
20242
diff
changeset
|
51 ## FIXME this is now working for objects whose class is in the dynamic |
490ae1d98f27
fieldnames.m: back out cset 68aec55f5eb6, bug is still present (bug #42710)
Carnë Draug <carandraug@octave.org>
parents:
20242
diff
changeset
|
52 ## classpath but will continue to fail if such classnames are used |
490ae1d98f27
fieldnames.m: back out cset 68aec55f5eb6, bug is still present (bug #42710)
Carnë Draug <carandraug@octave.org>
parents:
20242
diff
changeset
|
53 ## instead (see bug #42710) |
20028
b2c4f869ff7c
fieldnames: fix for java objects from dynamic classpath (bug #42710)
Carnë Draug <carandraug@octave.org>
parents:
19898
diff
changeset
|
54 if (isa (obj, "java.lang.String")) |
15816
59b6c6aee042
Don't box return values from javaObject. Always return a Java object.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
55 obj = class (obj); |
59b6c6aee042
Don't box return values from javaObject. Always return a Java object.
Rik <rik@octave.org>
parents:
15790
diff
changeset
|
56 endif |
15790
921912c92102
Deprecate java_invoke, replace with javaMethod.
Rik <rik@octave.org>
parents:
15781
diff
changeset
|
57 names_str = javaMethod ("getFields", "org.octave.ClassHelper", obj); |
16724
b7667fcb9fbc
Substitute ostrsplit() for strsplit().
Ben Abbott <bpabbott@mac.com>
parents:
16403
diff
changeset
|
58 names = ostrsplit (names_str, ';'); |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
59 else |
19790
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18601
diff
changeset
|
60 error ("fieldnames: Invalid input argument"); |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
61 endif |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
62 |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
63 endfunction |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
64 |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
65 |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
66 ## test preservation of fieldname order |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
67 %!test |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
68 %! x(3).d=1; x(2).a=2; x(1).b=3; x(2).c=3; |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
69 %! assert (fieldnames (x), {"d"; "a"; "b"; "c"}); |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
70 |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
71 ## test empty structure |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
72 %!test |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
73 %! s = struct (); |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
74 %! assert (fieldnames (s), cell (0, 1)); |
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
75 |
19092
e6872e945553
fieldnames: return only field names of java objects instead of description.
Carnë Draug <carandraug@octave.org>
parents:
18606
diff
changeset
|
76 ## test Java classname by passing classname |
19790
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
18601
diff
changeset
|
77 %!testif HAVE_JAVA |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
78 %! names = fieldnames ("java.lang.Double"); |
19092
e6872e945553
fieldnames: return only field names of java objects instead of description.
Carnë Draug <carandraug@octave.org>
parents:
18606
diff
changeset
|
79 %! assert (any (strcmp (names, "MAX_VALUE"))); |
15781
c33594eefda7
Add fieldnames.m which extensds fieldnames() to work on Java objects.
Rik <rik@octave.org>
parents:
diff
changeset
|
80 |
19092
e6872e945553
fieldnames: return only field names of java objects instead of description.
Carnë Draug <carandraug@octave.org>
parents:
18606
diff
changeset
|
81 ## test Java classname by passing java object |
e6872e945553
fieldnames: return only field names of java objects instead of description.
Carnë Draug <carandraug@octave.org>
parents:
18606
diff
changeset
|
82 %!testif HAVE_JAVA |
e6872e945553
fieldnames: return only field names of java objects instead of description.
Carnë Draug <carandraug@octave.org>
parents:
18606
diff
changeset
|
83 %! names = fieldnames (javaObject ("java.lang.Double", 10)); |
e6872e945553
fieldnames: return only field names of java objects instead of description.
Carnë Draug <carandraug@octave.org>
parents:
18606
diff
changeset
|
84 %! assert (any (strcmp (names, "MAX_VALUE"))); |
20085
f799bf70350f
fieldnames.m: Change BIST test to pass with Java 1.8 (bug #44382).
Rik <rik@octave.org>
parents:
20028
diff
changeset
|
85 %! assert (all (ismember ({"POSITIVE_INFINITY", "NEGATIVE_INFINITY", ... |
f799bf70350f
fieldnames.m: Change BIST test to pass with Java 1.8 (bug #44382).
Rik <rik@octave.org>
parents:
20028
diff
changeset
|
86 %! "NaN", "MAX_VALUE", "MIN_NORMAL", "MIN_VALUE", ... |
f799bf70350f
fieldnames.m: Change BIST test to pass with Java 1.8 (bug #44382).
Rik <rik@octave.org>
parents:
20028
diff
changeset
|
87 %! "MAX_EXPONENT", "MIN_EXPONENT", "SIZE", "TYPE"}, |
f799bf70350f
fieldnames.m: Change BIST test to pass with Java 1.8 (bug #44382).
Rik <rik@octave.org>
parents:
20028
diff
changeset
|
88 %! names))); |
19092
e6872e945553
fieldnames: return only field names of java objects instead of description.
Carnë Draug <carandraug@octave.org>
parents:
18606
diff
changeset
|
89 |
20028
b2c4f869ff7c
fieldnames: fix for java objects from dynamic classpath (bug #42710)
Carnë Draug <carandraug@octave.org>
parents:
19898
diff
changeset
|
90 %!testif HAVE_JAVA |
b2c4f869ff7c
fieldnames: fix for java objects from dynamic classpath (bug #42710)
Carnë Draug <carandraug@octave.org>
parents:
19898
diff
changeset
|
91 %! names = fieldnames (javaObject ("java.lang.String", "Hello")); |
b2c4f869ff7c
fieldnames: fix for java objects from dynamic classpath (bug #42710)
Carnë Draug <carandraug@octave.org>
parents:
19898
diff
changeset
|
92 %! assert (any (strcmp (names, "CASE_INSENSITIVE_ORDER"))); |
b2c4f869ff7c
fieldnames: fix for java objects from dynamic classpath (bug #42710)
Carnë Draug <carandraug@octave.org>
parents:
19898
diff
changeset
|
93 |