Mercurial > octave-nkf
annotate scripts/miscellaneous/getappdata.m @ 19298:f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
* getappdata.m: Redo docstring. Match function variable names to
documentation. Place input validation first and make error messages
more specific. Add BIST tests.
* isappdata.m: Redo docstring. Match function variable names to documentation.
Make input validation more precise. Use try/catch block for performance
improvement. Add BIST tests.
* rmappdata.m: Redo docstring. Improve input validation. Remove one for loop
through vectorization. Add BIST tests.
* setappdata.m: Redo docstring. Make input validation more precise.
Use try/catch block for 80% performance improvement. Add BIST tests.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 18 Oct 2014 18:10:52 -0700 |
parents | 7bbe3658c5ef |
children | 0e1f5a750d00 |
rev | line source |
---|---|
17744
d63878346099
maint: Update copyright notices for release.
John W. Eaton <jwe@octave.org>
parents:
17122
diff
changeset
|
1 ## Copyright (C) 2010-2013 Ben Abbott |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
2 ## |
17795
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
3 ## This file is part of Octave. |
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
4 ## |
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
5 ## Octave is free software; you can redistribute it and/or modify it |
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
7 ## the Free Software Foundation; either version 3 of the License, or |
11180 | 8 ## (at your option) any later version. |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
9 ## |
17795
0a8c35ae5ce1
maint: Fix various problems with GPL copyright statements.
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, |
11180 | 11 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 ## GNU General Public License for more details. | |
11587
c792872f8942
all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
14 ## |
11180 | 15 ## You should have received a copy of the GNU General Public License |
16 ## along with Octave; see the file COPYING. If not, see | |
17 ## <http://www.gnu.org/licenses/>. | |
18 | |
19 ## -*- texinfo -*- | |
16491
b10a23fe80bb
doc: Tweak docstrings of functions changed for Texinfo 5.0 compatibility.
Rik <rik@octave.org>
parents:
16489
diff
changeset
|
20 ## @deftypefn {Function File} {@var{value} =} getappdata (@var{h}, @var{name}) |
16489
36dba9be680b
doc: Make documentation compatible with Texinfo 5.0 (bug #38392)
Amod Mulay <amodmulay1@gmail.com>
parents:
14868
diff
changeset
|
21 ## @deftypefnx {Function File} {@var{appdata} =} getappdata (@var{h}) |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
22 ## Return the @var{value} of the application data @var{name} for the graphics |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
23 ## object with handle @var{h}. |
16489
36dba9be680b
doc: Make documentation compatible with Texinfo 5.0 (bug #38392)
Amod Mulay <amodmulay1@gmail.com>
parents:
14868
diff
changeset
|
24 ## |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
25 ## @var{h} may also be a vector of graphics handles. If no second argument |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
26 ## @var{name} is given then @code{getappdata} returns a structure, |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
27 ## @var{appdata}, whose fields correspond to the appdata properties. |
17122
eaab03308c0b
doc: Rewrite docstrings for most plot functions.
Rik <rik@octave.org>
parents:
16491
diff
changeset
|
28 ## |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
29 ## @seealso{setappdata, isappdata, rmappdata, guidata, get, set, getpref, setpref} |
11180 | 30 ## @end deftypefn |
31 | |
32 ## Author: Ben Abbott <bpabbott@mac.com> | |
33 ## Created: 2010-07-15 | |
34 | |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
35 function value = getappdata (h, name) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
36 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
37 if (nargin < 1 || nargin > 2) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
38 print_usage (); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
39 endif |
11180 | 40 |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
41 if (! all (ishandle (h(:)))) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
42 error ("getappdata: H must be a scalar or vector of graphic handles"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
43 endif |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
44 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
45 if (nargin == 2) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
46 if (! ischar (name)) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
47 error ("getappdata: NAME must be a string"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
48 endif |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
49 |
18891
7bbe3658c5ef
maint: Use "FIXME:" coding convention in m-files.
Rik <rik@octave.org>
parents:
17795
diff
changeset
|
50 ## FIXME: Is there a better way to handle non-existent appdata |
7bbe3658c5ef
maint: Use "FIXME:" coding convention in m-files.
Rik <rik@octave.org>
parents:
17795
diff
changeset
|
51 ## and missing fields? |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
52 value = cell (numel (h), 1); |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
53 appdata = struct (); |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
54 for i = 1:numel (h) |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
55 try |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
56 appdata = get (h(i), "__appdata__"); |
13243
f9aec0bcf826
getappdata: return empty matrix for nonexistent property names
John W. Eaton <jwe@octave.org>
parents:
13174
diff
changeset
|
57 end_try_catch |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
58 if (isfield (appdata, name)) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
59 value(i) = {appdata.(name)}; |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
60 else |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
61 value(i) = {[]}; |
13243
f9aec0bcf826
getappdata: return empty matrix for nonexistent property names
John W. Eaton <jwe@octave.org>
parents:
13174
diff
changeset
|
62 endif |
13174
bd2cd4fd3edf
maint: use specific endif, endfor tokens instead of simple end
John W. Eaton <jwe@octave.org>
parents:
12642
diff
changeset
|
63 endfor |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
64 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
65 if (i == 1) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
66 value = value{1}; |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
67 endif |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
68 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
69 else # nargin == 1 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
70 if (numel (h) != 1) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
71 error ("getappdata: Only one handle H may be used when fetching appdata"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
72 endif |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
73 try |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
74 value = get (h, "__appdata__"); |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
75 catch |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
76 value = struct (); |
12597
e12a7c0a1fc5
getappdata.m: If no property name is provided, return a structure representing the appdata.
Ben Abbott <bpabbott@mac.com>
parents:
12590
diff
changeset
|
77 end_try_catch |
11180 | 78 endif |
79 | |
80 endfunction | |
81 | |
19298
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
82 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
83 %!test |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
84 %! unwind_protect |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
85 %! setappdata (0, "%data1%", ones (3), "%data2%", "hello world"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
86 %! assert (getappdata (0, "%data1%"), ones (3)); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
87 %! assert (getappdata (0, "%data2%"), "hello world"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
88 %! appdata = getappdata (0); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
89 %! name1 = "%data1%"; name2 = "%data2%"; |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
90 %! assert (appdata.(name1), ones (3)); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
91 %! assert (appdata.(name2), "hello world"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
92 %! unwind_protect_cleanup |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
93 %! rmappdata (0, "%data1%", "%data2%"); |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
94 %! end_unwind_protect |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
95 |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
96 ## Test input validation |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
97 %!error getappdata () |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
98 %!error getappdata (1,2,3) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
99 %!error <H must be a scalar .* graphic handle> getappdata (-1, "hello") |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
100 %!error <NAME must be a string> getappdata (0, 1) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
101 %!error <Only one handle H may be used when fetching appdata> getappdata ([0 0]) |
f0dcb44826f6
Overhaul appdata family of functions (getappdata, isappdata, rmappdata, setappdata).
Rik <rik@octave.org>
parents:
18891
diff
changeset
|
102 |