Mercurial > octave
annotate libinterp/corefcn/cellfun.cc @ 29028:9a84aa8c4552 stable
save last error info when cellfun error handler is defined (bug #58411)
* cellfun.cc (get_output_list): If execution_exception is caught, call
error_system::save_save_exception.
New test.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Thu, 05 Nov 2020 12:02:13 -0500 |
parents | bd71a227c562 |
children | ba5a0edff85e 4ec8a36990e8 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 2005-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
5205 | 25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21660
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
27 # include "config.h" |
5205 | 28 #endif |
29 | |
30 #include <string> | |
5988 | 31 #include <vector> |
32 #include <list> | |
8994 | 33 #include <memory> |
5205 | 34 |
35 #include "lo-mappers.h" | |
8377
25bc2d31e1bf
improve OCTAVE_LOCAL_BUFFER
Jaroslav Hajek <highegg@gmail.com>
parents:
8373
diff
changeset
|
36 #include "oct-locbuf.h" |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22197
diff
changeset
|
37 #include "oct-string.h" |
5205 | 38 |
39 #include "Cell.h" | |
5988 | 40 #include "oct-map.h" |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
41 #include "defun.h" |
26864
041caa61ed34
use get_function_handle instead of extract_function
John W. Eaton <jwe@octave.org>
parents:
26847
diff
changeset
|
42 #include "interpreter-private.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
43 #include "interpreter.h" |
5205 | 44 #include "parse.h" |
45 #include "variables.h" | |
5988 | 46 #include "unwind-prot.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
20980
diff
changeset
|
47 #include "errwarn.h" |
9728
70925b11ba46
again allow the obsolete syntax for cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9684
diff
changeset
|
48 #include "utils.h" |
5205 | 49 |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
50 #include "ov-bool.h" |
13329
80f7564a3849
handle class objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13234
diff
changeset
|
51 #include "ov-class.h" |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
52 #include "ov-colon.h" |
10044
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
53 #include "ov-complex.h" |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
54 #include "ov-float.h" |
10044
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
55 #include "ov-flt-complex.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
56 #include "ov-int16.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
57 #include "ov-int32.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
58 #include "ov-int64.h" |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
59 #include "ov-int8.h" |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
60 #include "ov-scalar.h" |
10044
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
61 #include "ov-uint16.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
62 #include "ov-uint32.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
63 #include "ov-uint64.h" |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
64 #include "ov-uint8.h" |
10044
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
65 |
12952
5a5cb2a4b71d
cellfun: Fix a regression for function handles to overloaded functions
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12949
diff
changeset
|
66 #include "ov-fcn-handle.h" |
5a5cb2a4b71d
cellfun: Fix a regression for function handles to overloaded functions
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12949
diff
changeset
|
67 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
68 static octave_value_list |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
69 get_output_list (octave::error_system& es, |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
70 octave_idx_type count, octave_idx_type nargout, |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
71 const octave_value_list& inputlist, |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
72 octave_value& func, |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
73 octave_value& error_handler) |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
74 { |
16000
3f93cd251bdb
fix ErrorHandler in cellfun (bug #38256)
Stefan Mahr <dac922@gmx.de>
parents:
15195
diff
changeset
|
75 octave_value_list tmp; |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
76 |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
77 bool execution_error = false; |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
78 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
79 try |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
80 { |
23473
55916f99b8b6
prefer feval over do_multi_index_op
John W. Eaton <jwe@octave.org>
parents:
23450
diff
changeset
|
81 tmp = octave::feval (func, inputlist, nargout); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
82 } |
29028
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
83 catch (const octave::execution_exception& ee) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
84 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
85 if (error_handler.is_defined ()) |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
86 { |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
87 octave::interpreter& interp |
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
88 = octave::__get_interpreter__ ("get_output_list"); |
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
89 |
29028
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
90 es.save_exception (ee); |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
91 interp.recover_from_exception (); |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
92 |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
93 execution_error = true; |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
94 } |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
95 else |
29028
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
96 throw; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
97 } |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
98 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
99 if (execution_error) |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
100 { |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
101 if (error_handler.is_defined ()) |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
102 { |
11046
14993c9e857e
amd.cc, cellfun.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
10964
diff
changeset
|
103 octave_scalar_map msg; |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
104 msg.assign ("identifier", es.last_error_id ()); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
105 msg.assign ("message", es.last_error_message ()); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
106 msg.assign ("index", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
107 static_cast<double> (count |
25688
b2917b7858ba
maint: Use Octave convention for spacing of C++ cast statements.
Rik <rik@octave.org>
parents:
25646
diff
changeset
|
108 + static_cast<octave_idx_type> (1))); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
109 |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
110 octave_value_list errlist = inputlist; |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
111 errlist.prepend (msg); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
112 |
23473
55916f99b8b6
prefer feval over do_multi_index_op
John W. Eaton <jwe@octave.org>
parents:
23450
diff
changeset
|
113 tmp = octave::feval (error_handler, errlist, nargout); |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
114 } |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
115 else |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
116 tmp.clear (); |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
117 } |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
118 |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
119 return tmp; |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
120 } |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
121 |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
122 // Templated function because the user can be stubborn enough to request |
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
123 // a cell array as an output even in these cases where the output fits |
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
124 // in an ordinary array |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
125 template <typename BNDA, typename NDA> |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
126 static octave_value_list |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
127 try_cellfun_internal_ops (const octave_value_list& args, int nargin) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
128 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
129 octave_value_list retval; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
130 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
131 std::string name = args(0).string_value (); |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
132 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
133 const Cell f_args = args(1).cell_value (); |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
134 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
135 octave_idx_type k = f_args.numel (); |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
136 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
137 if (name == "isempty") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
138 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
139 BNDA result (f_args.dims ()); |
13231
20ed9548070f
maint: style fixes for cellfun
John W. Eaton <jwe@octave.org>
parents:
13230
diff
changeset
|
140 for (octave_idx_type count = 0; count < k; count++) |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23576
diff
changeset
|
141 result(count) = f_args.elem (count).isempty (); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
142 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
143 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
144 else if (name == "islogical") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
145 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
146 BNDA result (f_args.dims ()); |
21562
6c2fd62db1f7
maint: Eliminate accidental double spaces in code.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
147 for (octave_idx_type count= 0; count < k; count++) |
23579
c20a0fa91c0c
maint: Deprecate is_bool_type and replace with islogical.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
148 result(count) = f_args.elem (count).islogical (); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
149 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
150 } |
17002
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
151 else if (name == "isnumeric") |
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
152 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
153 BNDA result (f_args.dims ()); |
21562
6c2fd62db1f7
maint: Eliminate accidental double spaces in code.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
154 for (octave_idx_type count= 0; count < k; count++) |
23586
f6c5db0a02e7
maint: Deprecate is_numeric_type and replace with isnumeric.
Rik <rik@octave.org>
parents:
23584
diff
changeset
|
155 result(count) = f_args.elem (count).isnumeric (); |
17002
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
156 retval(0) = result; |
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
157 } |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
158 else if (name == "isreal") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
159 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
160 BNDA result (f_args.dims ()); |
21562
6c2fd62db1f7
maint: Eliminate accidental double spaces in code.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
161 for (octave_idx_type count= 0; count < k; count++) |
23582
0cc2011d800e
maint: Deprecate is_real_type and replace with isreal.
Rik <rik@octave.org>
parents:
23581
diff
changeset
|
162 result(count) = f_args.elem (count).isreal (); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
163 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
164 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
165 else if (name == "length") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
166 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
167 NDA result (f_args.dims ()); |
21562
6c2fd62db1f7
maint: Eliminate accidental double spaces in code.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
168 for (octave_idx_type count= 0; count < k; count++) |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
169 result(count) = static_cast<double> (f_args.elem (count).length ()); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
170 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
171 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
172 else if (name == "ndims") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
173 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
174 NDA result (f_args.dims ()); |
13231
20ed9548070f
maint: style fixes for cellfun
John W. Eaton <jwe@octave.org>
parents:
13230
diff
changeset
|
175 for (octave_idx_type count = 0; count < k; count++) |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
176 result(count) = static_cast<double> (f_args.elem (count).ndims ()); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
177 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
178 } |
17004
19b7c7412a63
cell2mat.m: Re-vamp input validation for 30% speedup
Rik <rik@octave.org>
parents:
17002
diff
changeset
|
179 else if (name == "numel" || name == "prodofsize") |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
180 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
181 NDA result (f_args.dims ()); |
13231
20ed9548070f
maint: style fixes for cellfun
John W. Eaton <jwe@octave.org>
parents:
13230
diff
changeset
|
182 for (octave_idx_type count = 0; count < k; count++) |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
183 result(count) = static_cast<double> (f_args.elem (count).numel ()); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
184 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
185 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
186 else if (name == "size") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
187 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
188 if (nargin != 3) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
189 error (R"(cellfun: not enough arguments for "size")"); |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
190 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
191 int d = args(2).nint_value () - 1; |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
192 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
193 if (d < 0) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
194 error ("cellfun: K must be a positive integer"); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
195 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
196 NDA result (f_args.dims ()); |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
197 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
198 for (octave_idx_type count = 0; count < k; count++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
199 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
200 dim_vector dv = f_args.elem (count).dims (); |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21581
diff
changeset
|
201 if (d < dv.ndims ()) |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
202 result(count) = static_cast<double> (dv(d)); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
203 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
204 result(count) = 1.0; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
205 } |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
206 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
207 retval(0) = result; |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
208 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
209 else if (name == "isclass") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
210 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
211 if (nargin != 3) |
23803
90689bdbe048
Use C++11 raw string literals to avoid escaping double quotes.
Rik <rik@octave.org>
parents:
23693
diff
changeset
|
212 error (R"(cellfun: not enough arguments for "isclass")"); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
213 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
214 std::string class_name = args(2).string_value (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
215 BNDA result (f_args.dims ()); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
216 for (octave_idx_type count = 0; count < k; count++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
217 result(count) = (f_args.elem (count).class_name () == class_name); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
218 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
219 retval(0) = result; |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
220 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
221 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
222 return retval; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
223 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
224 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
225 static void |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
226 get_mapper_fun_options (octave::symbol_table& symtab, |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
227 const octave_value_list& args, |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
228 int& nargin, bool& uniform_output, |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
229 octave_value& error_handler) |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
230 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
231 while (nargin > 3 && args(nargin-2).is_string ()) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
232 { |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22197
diff
changeset
|
233 std::string arg = args(nargin-2).string_value (); |
14076
9aff66860e03
accept abbreviated cellfun option names
John W. Eaton <jwe@octave.org>
parents:
13960
diff
changeset
|
234 |
9aff66860e03
accept abbreviated cellfun option names
John W. Eaton <jwe@octave.org>
parents:
13960
diff
changeset
|
235 size_t compare_len = std::max (arg.length (), static_cast<size_t> (2)); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
236 |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22197
diff
changeset
|
237 if (octave::string::strncmpi (arg, "uniformoutput", compare_len)) |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
238 uniform_output = args(nargin-1).bool_value (); |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22197
diff
changeset
|
239 else if (octave::string::strncmpi (arg, "errorhandler", compare_len)) |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
240 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
241 if (args(nargin-1).is_function_handle () |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
242 || args(nargin-1).is_inline_function ()) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
243 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
244 error_handler = args(nargin-1); |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
245 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
246 else if (args(nargin-1).is_string ()) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
247 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
248 std::string err_name = args(nargin-1).string_value (); |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
249 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
250 error_handler = symtab.find_function (err_name); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
251 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
252 if (error_handler.is_undefined ()) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
253 error ("cellfun: invalid function NAME: %s", |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
254 err_name.c_str ()); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
255 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
256 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
257 error ("cellfun: invalid value for 'ErrorHandler' function"); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
258 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
259 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
260 error ("cellfun: unrecognized parameter %s", arg.c_str ()); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
261 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
262 nargin -= 2; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
263 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
264 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
265 nargin -= 1; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
266 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
267 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
268 DEFMETHOD (cellfun, interp, args, nargout, |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
269 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
270 @deftypefn {} {} cellfun (@var{name}, @var{C}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
271 @deftypefnx {} {} cellfun ("size", @var{C}, @var{k}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
272 @deftypefnx {} {} cellfun ("isclass", @var{C}, @var{class}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
273 @deftypefnx {} {} cellfun (@var{func}, @var{C}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
274 @deftypefnx {} {} cellfun (@var{func}, @var{C}, @var{D}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
275 @deftypefnx {} {[@var{a}, @dots{}] =} cellfun (@dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
276 @deftypefnx {} {} cellfun (@dots{}, "ErrorHandler", @var{errfunc}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
277 @deftypefnx {} {} cellfun (@dots{}, "UniformOutput", @var{val}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
278 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
279 Evaluate the function named @var{name} on the elements of the cell array |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
280 @var{C}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
281 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
282 Elements in @var{C} are passed on to the named function individually. The |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
283 function @var{name} can be one of the functions |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
284 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
285 @table @code |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
286 @item isempty |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
287 Return 1 for empty elements. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
288 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
289 @item islogical |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
290 Return 1 for logical elements. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
291 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
292 @item isnumeric |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
293 Return 1 for numeric elements. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
294 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
295 @item isreal |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
296 Return 1 for real elements. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
297 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
298 @item length |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
299 Return a vector of the lengths of cell elements. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
300 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
301 @item ndims |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
302 Return the number of dimensions of each element. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
303 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
304 @item numel |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
305 @itemx prodofsize |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
306 Return the number of elements contained within each cell element. The |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
307 number is the product of the dimensions of the object at each cell element. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
308 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
309 @item size |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
310 Return the size along the @var{k}-th dimension. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
311 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
312 @item isclass |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
313 Return 1 for elements of @var{class}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
314 @end table |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
315 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
316 Additionally, @code{cellfun} accepts an arbitrary function @var{func} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
317 in the form of an inline function, function handle, or the name of a |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
318 function (in a character string). The function can take one or more |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
319 arguments, with the inputs arguments given by @var{C}, @var{D}, etc. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
320 Equally the function can return one or more output arguments. For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
321 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
322 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
323 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
324 cellfun ("atan2", @{1, 0@}, @{0, 1@}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
325 @result{} [ 1.57080 0.00000 ] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
326 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
327 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
328 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
329 The number of output arguments of @code{cellfun} matches the number of |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
330 output arguments of the function. The outputs of the function will be |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
331 collected into the output arguments of @code{cellfun} like this: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
332 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
333 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
334 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
335 function [a, b] = twoouts (x) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
336 a = x; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
337 b = x*x; |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
338 endfunction |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
339 [aa, bb] = cellfun (@@twoouts, @{1, 2, 3@}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
340 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
341 aa = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
342 1 2 3 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
343 bb = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
344 1 4 9 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
345 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
346 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
347 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
348 Note that per default the output argument(s) are arrays of the same size as |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
349 the input arguments. Input arguments that are singleton (1x1) cells will be |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
350 automatically expanded to the size of the other arguments. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
351 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
352 If the parameter @qcode{"UniformOutput"} is set to true (the default), |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
353 then the function must return scalars which will be concatenated into the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
354 return array(s). If @qcode{"UniformOutput"} is false, the outputs are |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
355 concatenated into a cell array (or cell arrays). For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
356 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
357 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
358 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
359 cellfun ("tolower", @{"Foo", "Bar", "FooBar"@}, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
360 "UniformOutput", false) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
361 @result{} @{"foo", "bar", "foobar"@} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
362 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
363 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
364 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
365 Given the parameter @qcode{"ErrorHandler"}, then @var{errfunc} defines a |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
366 function to call in case @var{func} generates an error. The form of the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
367 function is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
368 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
369 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
370 function [@dots{}] = errfunc (@var{s}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
371 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
372 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
373 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
374 where there is an additional input argument to @var{errfunc} relative to |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
375 @var{func}, given by @var{s}. This is a structure with the elements |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
376 @qcode{"identifier"}, @qcode{"message"}, and @qcode{"index"} giving |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
377 respectively the error identifier, the error message, and the index into the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
378 input arguments of the element that caused the error. For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
379 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
380 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
381 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
382 function y = foo (s, x), y = NaN; endfunction |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
383 cellfun ("factorial", @{-1,2@}, "ErrorHandler", @@foo) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
384 @result{} [NaN 2] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
385 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
386 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
387 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
388 Use @code{cellfun} intelligently. The @code{cellfun} function is a |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
389 useful tool for avoiding loops. It is often used with anonymous |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
390 function handles; however, calling an anonymous function involves an |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
391 overhead quite comparable to the overhead of an m-file function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
392 Passing a handle to a built-in function is faster, because the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
393 interpreter is not involved in the internal loop. For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
394 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
395 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
396 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
397 a = @{@dots{}@} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
398 v = cellfun (@@(x) det (x), a); # compute determinants |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
399 v = cellfun (@@det, a); # faster |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
400 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
401 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
402 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
403 @seealso{arrayfun, structfun, spfun} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
404 @end deftypefn */) |
5205 | 405 { |
406 int nargin = args.length (); | |
407 | |
408 if (nargin < 2) | |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
409 print_usage (); |
5205 | 410 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
411 if (! args(1).iscell ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
412 error ("cellfun: C must be a cell array"); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
413 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
414 octave_value_list retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
415 int nargout1 = (nargout < 1 ? 1 : nargout); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
416 |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
417 octave_value func = args(0); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
418 |
23693
b9378eff6d13
move symbol_table class inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
419 octave::symbol_table& symtab = interp.get_symbol_table (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
420 |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
421 if (func.is_string ()) |
5205 | 422 { |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
423 retval = try_cellfun_internal_ops<boolNDArray,NDArray> (args, nargin); |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
424 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
425 if (! retval.empty ()) |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
426 return retval; |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
427 |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
428 // See if we can convert the string into a function. |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
429 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
430 std::string name = args(0).string_value (); |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
431 |
25646
4d565baa475e
move libinterp/utils functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
432 if (! octave::valid_identifier (name)) |
26864
041caa61ed34
use get_function_handle instead of extract_function
John W. Eaton <jwe@octave.org>
parents:
26847
diff
changeset
|
433 func = octave::get_function_handle (interp, args(0), "x"); |
5205 | 434 else |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
435 { |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
436 func = symtab.find_function (name); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
437 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
438 if (func.is_undefined ()) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
439 error ("cellfun: invalid function NAME: %s", name.c_str ()); |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
440 } |
5205 | 441 } |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
442 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
443 if (! func.is_function_handle () && ! func.is_inline_function () |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
444 && ! func.is_function ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
445 error ("cellfun: argument NAME must be a string or function handle"); |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
446 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
447 bool uniform_output = true; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
448 octave_value error_handler; |
12952
5a5cb2a4b71d
cellfun: Fix a regression for function handles to overloaded functions
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12949
diff
changeset
|
449 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
450 get_mapper_fun_options (symtab, args, nargin, uniform_output, error_handler); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
451 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
452 // The following is an optimization because the symbol table can give a |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
453 // more specific function class, so this can result in fewer polymorphic |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
454 // function calls as the function gets called for each value of the array. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
455 { |
28427
7a8c69c4eb55
convert obsolete octave_fcn_inline object to @inline class
John W. Eaton <jwe@octave.org>
parents:
27957
diff
changeset
|
456 if (func.is_function_handle () || func.is_inline_function ()) |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
457 { |
28819
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
458 // FIXME: instead of checking for overloaded functions as we did |
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
459 // previously but is no longer possible, we could check whether |
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
460 // the types of all the cell array elements are the same, then |
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
461 // lookup the function for that type just once. |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
462 |
28819
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
463 goto nevermind; |
13960
ef96344a6e58
cellfun: get rid of unnecessary symbol_table_lookup flag
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
13959
diff
changeset
|
464 } |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
465 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
466 std::string name = func.function_value () -> name (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
467 octave_value f = symtab.find_function (name); |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
468 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
469 if (f.is_defined ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
470 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
471 // Except for these two which are special cases... |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
472 if (name != "size" && name != "class") |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
473 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
474 // Try first the optimized code path for built-in functions |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
475 octave_value_list tmp_args = args; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
476 tmp_args(0) = name; |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
477 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
478 if (uniform_output) |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
479 retval = try_cellfun_internal_ops<boolNDArray, NDArray> (tmp_args, nargin); |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
480 else |
27277
db687716fed6
style fixes: generally aim to break long lines before operators, not after
John W. Eaton <jwe@octave.org>
parents:
27160
diff
changeset
|
481 retval = try_cellfun_internal_ops<Cell, Cell> (tmp_args, nargin); |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
482 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
483 if (! retval.empty ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
484 return retval; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
485 } |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
486 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
487 // Okay, we tried, doesn't work, let's do the best we can instead |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
488 // and avoid polymorphic calls for each element of the array. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
489 func = f; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
490 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
491 } |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
492 |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
493 nevermind: |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
494 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
495 // Extract cell arguments. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
496 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
497 octave_value_list inputlist (nargin, octave_value ()); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
498 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
499 OCTAVE_LOCAL_BUFFER (Cell, inputs, nargin); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
500 OCTAVE_LOCAL_BUFFER (bool, mask, nargin); |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
501 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
502 // This is to prevent copy-on-write. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
503 const Cell *cinputs = inputs; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
504 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
505 octave_idx_type k = 1; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
506 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
507 dim_vector fdims (1, 1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
508 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
509 // Collect arguments. Pre-fill scalar elements of inputlist array. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
510 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
511 for (int j = 0; j < nargin; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
512 { |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
513 if (! args(j+1).iscell ()) |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
514 error ("cellfun: arguments must be cells"); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
515 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
516 inputs[j] = args(j+1).cell_value (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
517 mask[j] = inputs[j].numel () != 1; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
518 if (! mask[j]) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
519 inputlist(j) = cinputs[j](0); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
520 } |
5988 | 521 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
522 for (int j = 0; j < nargin; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
523 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
524 if (mask[j]) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
525 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
526 fdims = inputs[j].dims (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
527 k = inputs[j].numel (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
528 for (int i = j+1; i < nargin; i++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
529 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
530 if (mask[i] && inputs[i].dims () != fdims) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
531 error ("cellfun: dimensions mismatch"); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
532 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
533 break; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
534 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
535 } |
10670
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
536 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
537 octave::error_system& es = interp.get_error_system (); |
5988 | 538 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
539 // Apply functions. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
540 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
541 if (uniform_output) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
542 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
543 std::list<octave_value_list> idx_list (1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
544 idx_list.front ().resize (1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
545 std::string idx_type = "("; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
546 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
547 OCTAVE_LOCAL_BUFFER (octave_value, retv, nargout1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
548 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
549 for (octave_idx_type count = 0; count < k; count++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
550 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
551 for (int j = 0; j < nargin; j++) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
552 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
553 if (mask[j]) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
554 inputlist.xelem (j) = cinputs[j](count); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
555 } |
5988 | 556 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
557 const octave_value_list tmp |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
558 = get_output_list (es, count, nargout, inputlist, func, |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
559 error_handler); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
560 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
561 if (nargout > 0 && tmp.length () < nargout) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
562 error ("cellfun: function returned fewer than nargout values"); |
5988 | 563 |
22777
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
564 if (nargout > 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
565 || (nargout == 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
566 && tmp.length () > 0 && tmp(0).is_defined ())) |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
567 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
568 int num_to_copy = tmp.length (); |
5988 | 569 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
570 if (num_to_copy > nargout1) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
571 num_to_copy = nargout1; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
572 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
573 if (count == 0) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
574 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
575 for (int j = 0; j < num_to_copy; j++) |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
576 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
577 if (tmp(j).is_defined ()) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
578 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
579 octave_value val = tmp(j); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
580 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
581 if (val.numel () != 1) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
582 error ("cellfun: all values must be scalars when UniformOutput = true"); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
583 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
584 retv[j] = val.resize (fdims); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
585 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
586 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
587 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
588 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
589 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
590 for (int j = 0; j < num_to_copy; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
591 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
592 if (tmp(j).is_defined ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
593 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
594 octave_value val = tmp(j); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
595 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
596 if (! retv[j].fast_elem_insert (count, val)) |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
597 { |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
598 if (val.numel () != 1) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
599 error ("cellfun: all values must be scalars when UniformOutput = true"); |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
600 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
601 idx_list.front ()(0) = count + 1.0; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
602 retv[j].assign (octave_value::op_asn_eq, |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
603 idx_type, idx_list, val); |
10670
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
604 } |
8994 | 605 } |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
606 } |
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
607 } |
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
608 } |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
609 } |
8994 | 610 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
611 retval.resize (nargout1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
612 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
613 for (int j = 0; j < nargout1; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
614 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
615 if (nargout > 0 && retv[j].is_undefined ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
616 retval(j) = NDArray (fdims); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
617 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
618 retval(j) = retv[j]; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
619 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
620 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
621 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
622 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
623 OCTAVE_LOCAL_BUFFER (Cell, results, nargout1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
624 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
625 for (int j = 0; j < nargout1; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
626 results[j].resize (fdims, Matrix ()); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
627 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
628 bool have_some_output = false; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
629 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
630 for (octave_idx_type count = 0; count < k; count++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
631 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
632 for (int j = 0; j < nargin; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
633 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
634 if (mask[j]) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
635 inputlist.xelem (j) = cinputs[j](count); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
636 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
637 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
638 const octave_value_list tmp |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
639 = get_output_list (es, count, nargout, inputlist, func, |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
640 error_handler); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
641 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
642 if (nargout > 0 && tmp.length () < nargout) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
643 error ("cellfun: function returned fewer than nargout values"); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
644 |
22777
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
645 if (nargout > 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
646 || (nargout == 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
647 && tmp.length () > 0 && tmp(0).is_defined ())) |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
648 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
649 int num_to_copy = tmp.length (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
650 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
651 if (num_to_copy > nargout1) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
652 num_to_copy = nargout1; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
653 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
654 if (num_to_copy > 0) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
655 have_some_output = true; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
656 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
657 for (int j = 0; j < num_to_copy; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
658 results[j](count) = tmp(j); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
659 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
660 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
661 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
662 if (have_some_output || fdims.any_zero ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
663 { |
9988
76cf4aec34e9
allow functions returning no value in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9740
diff
changeset
|
664 retval.resize (nargout1); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
665 |
9988
76cf4aec34e9
allow functions returning no value in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9740
diff
changeset
|
666 for (int j = 0; j < nargout1; j++) |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
667 retval(j) = results[j]; |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
668 } |
5205 | 669 } |
670 | |
671 return retval; | |
672 } | |
673 | |
5988 | 674 /* |
675 | |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
676 %!function r = __f11 (x) |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
677 %! r = x; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
678 %!endfunction |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
679 |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
680 %!function __f01 (x) |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
681 %! ## Empty function |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
682 %!endfunction |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
683 |
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
684 %!test |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
685 %! __cellfun_test_num_outputs__ = -1; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
686 %! |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
687 %! function r = __subf11 (x) |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
688 %! __cellfun_test_num_outputs__ = nargout; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
689 %! r = x; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
690 %! endfunction |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
691 %! |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
692 %! cellfun ("__subf11", {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
693 %! assert (__cellfun_test_num_outputs__, 0); |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
694 %! |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
695 %! __cellfun_test_num_outputs__ = -1; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
696 %! x = cellfun ("__subf11", {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
697 %! assert (__cellfun_test_num_outputs__, 1); |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
698 |
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
699 %!test |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
700 %! __cellfun_test_num_outputs__ = -1; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
701 %! function __subf01 (x) |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
702 %! __cellfun_test_num_outputs__ = nargout; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
703 %! endfunction |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
704 %! cellfun ("__subf01", {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
705 %! assert (__cellfun_test_num_outputs__, 0); |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
706 |
21581
6fab85c1538f
maint: Follow Octave conventions for use of semicolon in BIST tests.
Rik <rik@octave.org>
parents:
21580
diff
changeset
|
707 %!error x = cellfun (@__f01, {1, 2}) |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
708 |
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
709 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
710 %! assert (cellfun (@__f11, {1, 2}), [1, 2]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
711 %! assert (cellfun (@__f11, {1, 2}, 'uniformoutput', false), {1, 2}); |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
712 |
11457 | 713 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
714 %! [a,b] = cellfun (@(x) x, cell (2, 0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
715 %! assert (a, zeros (2, 0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
716 %! assert (b, zeros (2, 0)); |
11457 | 717 |
718 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
719 %! [a,b] = cellfun (@(x) x, cell (2, 0), "uniformoutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
720 %! assert (a, cell (2, 0)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
721 %! assert (b, cell (2, 0)); |
11457 | 722 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
723 ## Test function to check the "Errorhandler" option |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
724 %!function z = __cellfunerror (S, varargin) |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
725 %! z = S; |
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
726 %!endfunction |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
727 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
728 ## First input argument can be a string, an inline function, |
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
729 ## a function_handle or an anonymous function |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
730 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
731 %! A = cellfun ("islogical", {true, 0.1, false, i*2}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
732 %! assert (A, [true, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
733 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
734 %! A = cellfun (inline ("islogical (x)", "x"), {true, 0.1, false, i*2}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
735 %! assert (A, [true, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
736 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
737 %! A = cellfun (@islogical, {true, 0.1, false, i*2}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
738 %! assert (A, [true, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
739 %!test |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
740 %! A = cellfun (@(x) islogical (x), {true, 0.1, false, i*2}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
741 %! assert (A, [true, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
742 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
743 ## First input argument can be the special string "isreal", |
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
744 ## "isempty", "islogical", "isnumeric", "length", "ndims" or "prodofsize" |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
745 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
746 %! A = cellfun ("isreal", {true, 0.1, {}, i*2, [], "abc"}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
747 %! assert (A, [true, true, false, false, true, true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
748 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
749 %! A = cellfun ("isempty", {true, 0.1, false, i*2, [], "abc"}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
750 %! assert (A, [false, false, false, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
751 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
752 %! A = cellfun ("islogical", {true, 0.1, false, i*2, [], "abc"}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
753 %! assert (A, [true, false, true, false, false, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
754 %!test |
17002
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
755 %! A = cellfun ("isnumeric", {true, 0.1, false, i*2, [], "abc"}); |
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
756 %! assert (A, [false, true, false, true, true, false]); |
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
757 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
758 %! A = cellfun ("length", {true, 0.1, false, i*2, [], "abc"}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
759 %! assert (A, [1, 1, 1, 1, 0, 3]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
760 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
761 %! A = cellfun ("ndims", {[1, 2; 3, 4]; (cell (1,2,3,4))}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
762 %! assert (A, [2; 4]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
763 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
764 %! A = cellfun ("prodofsize", {[1, 2; 3, 4], (cell (1,2,3,4))}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
765 %! assert (A, [4, 24]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
766 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
767 ## Number of input and output arguments may not be limited to one |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
768 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
769 %! A = cellfun (@(x,y,z) x + y + z, {1, 1, 1}, {2, 2, 2}, {3, 4, 5}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
770 %! assert (A, [6, 7, 8]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
771 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
772 %! A = cellfun (@(x,y,z) x + y + z, {1, 1, 1}, {2, 2, 2}, {3, 4, 5}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
773 %! "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
774 %! assert (A, {6, 7, 8}); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
775 %!test # Two input arguments of different types |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
776 %! A = cellfun (@(x,y) islogical (x) && ischar (y), {false, true}, {"a", 3}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
777 %! assert (A, [true, false]); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
778 %!test # Pass another variable to the anonymous function |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
779 %! y = true; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
780 %! A = cellfun (@(x) islogical (x) && y, {false, 0.3}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
781 %! assert (A, [true, false]); |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26963
diff
changeset
|
782 %!test # Three output arguments of different type |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
783 %! [A, B, C] = cellfun (@find, {10, 11; 0, 12}, "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
784 %! assert (isequal (A, {true, true; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
785 %! assert (isequal (B, {true, true; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
786 %! assert (isequal (C, {10, 11; [], 12})); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
787 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
788 ## Input arguments can be of type cell array of logical |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
789 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
790 %! A = cellfun (@(x,y) x == y, {false, true}, {true, true}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
791 %! assert (A, [false, true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
792 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
793 %! A = cellfun (@(x,y) x == y, {false; true}, {true; true}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
794 %! "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
795 %! assert (A, [false; true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
796 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
797 %! A = cellfun (@(x) x, {false, true; false, true}, "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
798 %! assert (A, {false, true; false, true}); |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26963
diff
changeset
|
799 %!test # Three output arguments of same type |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
800 %! [A, B, C] = cellfun (@find, {true, false; false, true}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
801 %! "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
802 %! assert (isequal (A, {true, []; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
803 %! assert (isequal (B, {true, []; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
804 %! assert (isequal (C, {true, []; [], true})); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
805 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
806 %! A = cellfun (@(x,y) cell2str (x,y), {true}, {true}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
807 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
808 %! assert (isfield (A, "identifier"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
809 %! assert (isfield (A, "message"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
810 %! assert (isfield (A, "index"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
811 %! assert (isempty (A.message), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
812 %! assert (A.index, 1); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
813 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
814 %! A = cellfun (@(x,y) cell2str (x,y), {true}, {true}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
815 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
816 %! assert (isfield (A, "identifier"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
817 %! assert (isfield (A, "message"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
818 %! assert (isfield (A, "index"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
819 %! assert (isempty (A.message), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
820 %! assert (A.index, 1); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
821 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
822 ## Input arguments can be of type cell array of numeric |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
823 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
824 %! A = cellfun (@(x,y) x>y, {1.1, 4.2}, {3.1, 2+3*i}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
825 %! assert (A, [false, true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
826 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
827 %! A = cellfun (@(x,y) x>y, {1.1, 4.2; 2, 4}, {3.1, 2; 2, 4+2*i}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
828 %! "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
829 %! assert (A, [false, true; false, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
830 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
831 %! A = cellfun (@(x,y) x:y, {1.1, 4}, {3.1, 6}, "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
832 %! assert (isequal (A{1}, [1.1, 2.1, 3.1])); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
833 %! assert (isequal (A{2}, [4, 5, 6])); |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26963
diff
changeset
|
834 %!test # Three output arguments of different type |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
835 %! [A, B, C] = cellfun (@find, {10, 11; 0, 12}, "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
836 %! assert (isequal (A, {true, true; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
837 %! assert (isequal (B, {true, true; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
838 %! assert (isequal (C, {10, 11; [], 12})); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
839 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
840 %! A = cellfun (@(x,y) cell2str (x,y), {1.1, 4}, {3.1, 6}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
841 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
842 %! B = isfield (A(1), "message") && isfield (A(1), "index"); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
843 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
844 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
845 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
846 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
847 %! assert ([A(1).index, A(2).index], [1, 2]); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
848 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
849 %! A = cellfun (@(x,y) cell2str (x,y), {1.1, 4}, {3.1, 6}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
850 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
851 %! B = isfield (A(1), "message") && isfield (A(1), "index"); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
852 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
853 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
854 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
855 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
856 %! assert ([A(1).index, A(2).index], [1, 2]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
857 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
858 ## Input arguments can be of type cell arrays of character or strings |
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
859 %!error # "UniformOutput" false should be used |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
860 %! A = cellfun (@(x,y) x>y, {"ad", "c", "ghi"}, {"cc", "d", "fgh"}); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
861 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
862 %! A = cellfun (@(x,y) x>y, {"a"; "f"}, {"c"; "d"}, "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
863 %! assert (A, [false; true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
864 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
865 %! A = cellfun (@(x,y) x:y, {"a", "d"}, {"c", "f"}, "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
866 %! assert (A, {"abc", "def"}); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
867 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
868 %! A = cellfun (@(x,y) cell2str (x,y), {"a", "d"}, {"c", "f"}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
869 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
870 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
871 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
872 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
873 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
874 %! assert ([A(1).index, A(2).index], [1, 2]); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
875 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
876 %! A = cellfun (@(x,y) cell2str (x,y), {"a", "d"}, {"c", "f"}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
877 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
878 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
879 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
880 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
881 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
882 %! assert ([A(1).index, A(2).index], [1, 2]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
883 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
884 ## Structures cannot be handled by cellfun |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
885 %!error |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
886 %! vst1.a = 1.1; vst1.b = 4.2; vst2.a = 3.1; vst2.b = 2; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
887 %! A = cellfun (@(x,y) (x.a < y.a) && (x.b > y.b), vst1, vst2); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
888 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
889 ## Input arguments can be of type cell array of cell arrays |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
890 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
891 %! A = cellfun (@(x,y) x{1} < y{1}, {{1.1}, {4.2}}, {{3.1}, {2}}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
892 %! assert (A, [1, 0], 1e-16); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
893 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
894 %! A = cellfun (@(x,y) x{1} < y{1}, {{1.1}; {4.2}}, {{3.1}; {2}}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
895 %! "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
896 %! assert (A, [1; 0], 1e-16); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
897 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
898 %! A = cellfun (@(x,y) x{1} < y{1}, {{1.1}, {4.2}}, {{3.1}, {2}}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
899 %! "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
900 %! assert (A, {true, false}); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
901 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
902 %! A = cellfun (@(x,y) mat2str (x,y), {{1.1}, {4.2}}, {{3.1}, {2}}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
903 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
904 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
905 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
906 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
907 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
908 %! assert ([A(1).index, A(2).index], [1, 2]); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
909 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
910 %! A = cellfun (@(x,y) mat2str (x,y), {{1.1}, {4.2}}, {{3.1}, {2}}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
911 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
912 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
913 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
914 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
915 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
916 %! assert ([A(1).index, A(2).index], [1, 2]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
917 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
918 ## Input arguments can be of type cell array of structure arrays |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
919 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
920 %! a = struct ("a", 1, "b", 2); b = struct ("a", 1, "b", 3); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
921 %! A = cellfun (@(x,y) (x.a == y.a) && (x.b < y.b), {a}, {b}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
922 %! assert (A, true); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
923 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
924 %! a = struct ("a", 1, "b", 2); b = struct ("a", 1, "b", 3); |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
925 %! A = cellfun (@(x,y) (x.a == y.a) && (x.b < y.b) , {a}, {b}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
926 %! "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
927 %! assert (A, true); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
928 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
929 %! a = struct ("a", 1, "b", 2); b = struct ("a", 1, "b", 3); |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
930 %! A = cellfun (@(x,y) (x.a == y.a) && (x.b < y.b) , {a}, {b}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
931 %! "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
932 %! assert (A, {true}); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
933 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
934 %! a = struct ("a", 1, "b", 2); b = struct ("a", 1, "b", 3); |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
935 %! A = cellfun (@(x,y) cell2str (x.a, y.a), {a}, {b}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
936 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
937 %! assert (isfield (A, "identifier"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
938 %! assert (isfield (A, "message"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
939 %! assert (isfield (A, "index"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
940 %! assert (isempty (A.message), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
941 %! assert (A.index, 1); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
942 %!test # Overwriting setting of "UniformOutput" true |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
943 %! a = struct ("a", 1, "b", 2); b = struct ("a", 1, "b", 3); |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
944 %! A = cellfun (@(x,y) cell2str (x.a, y.a), {a}, {b}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
945 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
946 %! assert (isfield (A, "identifier"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
947 %! assert (isfield (A, "message"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
948 %! assert (isfield (A, "index"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
949 %! assert (isempty (A.message), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
950 %! assert (A.index, 1); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
951 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
952 ## A lot of other tests |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
953 %!assert (cellfun (@sin, {0,1}), sin ([0,1])) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
954 %!assert (cellfun (inline ("sin (x)"), {0,1}), sin ([0,1])) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
955 %!assert (cellfun ("sin", {0,1}), sin ([0,1])) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
956 %!assert (cellfun ("isempty", {1,[]}), [false,true]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
957 %!assert (cellfun ("islogical", {false,pi}), [true,false]) |
17002
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
958 %!assert (cellfun ("isnumeric", {false,pi,struct()}), [false,true,false]) |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
959 %!assert (cellfun ("isreal", {1i,1}), [false,true]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
960 %!assert (cellfun ("length", {zeros(2,2),1}), [2,1]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
961 %!assert (cellfun ("prodofsize", {zeros(2,2),1}), [4,1]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
962 %!assert (cellfun ("ndims", {zeros([2,2,2]),1}), [3,2]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
963 %!assert (cellfun ("isclass", {zeros([2,2,2]),"test"}, "double"), [true,false]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
964 %!assert (cellfun ("size", {zeros([1,2,3]),1}, 1), [1,1]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
965 %!assert (cellfun ("size", {zeros([1,2,3]),1}, 2), [2,1]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
966 %!assert (cellfun ("size", {zeros([1,2,3]),1}, 3), [3,1]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
967 %!assert (cellfun (@atan2, {1,1}, {1,2}), [atan2(1,1), atan2(1,2)]) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
968 %!assert (cellfun (@atan2, {1,1}, {1,2},"UniformOutput", false), {atan2(1,1), atan2(1,2)}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
969 %!assert (cellfun (@sin, {1,2;3,4}), sin ([1,2;3,4])) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
970 %!assert (cellfun (@atan2, {1,1;1,1}, {1,2;1,2}), atan2 ([1,1;1,1],[1,2;1,2])) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
971 %!error cellfun (@factorial, {-1,3}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
972 %!assert (cellfun (@factorial,{-1,3},"ErrorHandler",@(x,y) NaN), [NaN,6]) |
16000
3f93cd251bdb
fix ErrorHandler in cellfun (bug #38256)
Stefan Mahr <dac922@gmx.de>
parents:
15195
diff
changeset
|
973 %!assert (cellfun (@(x) x(2),{[1],[1,2]},"ErrorHandler",@(x,y) NaN), [NaN,2]) |
5988 | 974 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
975 %! [a,b,c] = cellfun (@fileparts, {fullfile("a","b","c.d"), fullfile("e","f","g.h")}, "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
976 %! assert (a, {fullfile("a","b"), fullfile("e","f")}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
977 %! assert (b, {"c", "g"}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
978 %! assert (c, {".d", ".h"}); |
5988 | 979 |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
980 %!assert <*40467> (cellfun (@isreal, {1 inf nan []}), [true, true, true, true]) |
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
981 %!assert <*40467> (cellfun (@isreal, {1 inf nan []}, "UniformOutput", false), {true, true, true, true}) |
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
982 %!assert <*40467> (cellfun (@iscomplex, {1 inf nan []}), [false, false, false, false]) |
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
983 %!assert <*40467> (cellfun (@iscomplex, {1 inf nan []}, "UniformOutput", false), {false, false, false, false}) |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
984 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
985 %!error cellfun (1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
986 %!error cellfun ("isclass", 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
987 %!error cellfun ("size", 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
988 %!error cellfun (@sin, {[]}, "BadParam", false) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
989 %!error cellfun (@sin, {[]}, "UniformOuput") |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
990 %!error cellfun (@sin, {[]}, "ErrorHandler") |
29028
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
991 |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
992 %!function retval = __errfcn (S, varargin) |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
993 %! global __errmsg; |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
994 %! __errmsg = S.message; |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
995 %! retval = NaN; |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
996 %!endfunction |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
997 %!test <58411> |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
998 %! global __errmsg; |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
999 %! assert (cellfun (@factorial, {1, 2, -3}, "ErrorHandler", @__errfcn), [1, 2, NaN]); |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
1000 %! assert (! isempty (__errmsg)); |
9a84aa8c4552
save last error info when cellfun error handler is defined (bug #58411)
John W. Eaton <jwe@octave.org>
parents:
28819
diff
changeset
|
1001 %! clear -global __errmsg; |
5988 | 1002 */ |
1003 | |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1004 // Arrayfun was originally a .m file written by Bill Denney and Jaroslav |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1005 // Hajek. It was converted to C++ by jwe so that it could properly |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1006 // handle the nargout = 0 case. |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1007 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1008 DEFMETHOD (arrayfun, interp, args, nargout, |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1009 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1010 @deftypefn {} {} arrayfun (@var{func}, @var{A}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1011 @deftypefnx {} {@var{x} =} arrayfun (@var{func}, @var{A}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1012 @deftypefnx {} {@var{x} =} arrayfun (@var{func}, @var{A}, @var{b}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1013 @deftypefnx {} {[@var{x}, @var{y}, @dots{}] =} arrayfun (@var{func}, @var{A}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1014 @deftypefnx {} {} arrayfun (@dots{}, "UniformOutput", @var{val}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1015 @deftypefnx {} {} arrayfun (@dots{}, "ErrorHandler", @var{errfunc}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1016 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1017 Execute a function on each element of an array. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1018 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1019 This is useful for functions that do not accept array arguments. If the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1020 function does accept array arguments it is better to call the function |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1021 directly. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1022 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1023 The first input argument @var{func} can be a string, a function |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1024 handle, an inline function, or an anonymous function. The input |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1025 argument @var{A} can be a logic array, a numeric array, a string |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1026 array, a structure array, or a cell array. By a call of the function |
22299
9fc91bb2aec3
doc: grammarcheck documentation for 4.2 release.
Rik <rik@octave.org>
parents:
22280
diff
changeset
|
1027 @code{arrayfun} all elements of @var{A} are passed on to the named |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1028 function @var{func} individually. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1029 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1030 The named function can also take more than two input arguments, with |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1031 the input arguments given as third input argument @var{b}, fourth |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1032 input argument @var{c}, @dots{} If given more than one array input |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1033 argument then all input arguments must have the same sizes, for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1034 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1035 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1036 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1037 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1038 arrayfun (@@atan2, [1, 0], [0, 1]) |
22699
2100cd2e1be0
doc: Clarify behavior of size (bug #49478).
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
1039 @result{} [ 1.57080 0.00000 ] |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1040 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1041 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1042 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1043 If the parameter @var{val} after a further string input argument |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1044 @qcode{"UniformOutput"} is set @code{true} (the default), then the named |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1045 function @var{func} must return a single element which then will be |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1046 concatenated into the return value and is of type matrix. Otherwise, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1047 if that parameter is set to @code{false}, then the outputs are |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1048 concatenated in a cell array. For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1049 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1050 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1051 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1052 arrayfun (@@(x,y) x:y, "abc", "def", "UniformOutput", false) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1053 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1054 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1055 [1,1] = abcd |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1056 [1,2] = bcde |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1057 [1,3] = cdef |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1058 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1059 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1060 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1061 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1062 If more than one output arguments are given then the named function |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1063 must return the number of return values that also are expected, for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1064 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1065 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1066 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1067 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1068 [A, B, C] = arrayfun (@@find, [10; 0], "UniformOutput", false) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1069 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1070 A = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1071 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1072 [1,1] = 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1073 [2,1] = [](0x0) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1074 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1075 B = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1076 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1077 [1,1] = 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1078 [2,1] = [](0x0) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1079 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1080 C = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1081 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1082 [1,1] = 10 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1083 [2,1] = [](0x0) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1084 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1085 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1086 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1087 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1088 If the parameter @var{errfunc} after a further string input argument |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1089 @qcode{"ErrorHandler"} is another string, a function handle, an inline |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1090 function, or an anonymous function, then @var{errfunc} defines a |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1091 function to call in the case that @var{func} generates an error. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1092 The definition of the function must be of the form |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1093 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1094 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1095 function [@dots{}] = errfunc (@var{s}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1096 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1097 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1098 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1099 where there is an additional input argument to @var{errfunc} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1100 relative to @var{func}, given by @var{s}. This is a structure with |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1101 the elements @qcode{"identifier"}, @qcode{"message"}, and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1102 @qcode{"index"} giving, respectively, the error identifier, the error |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1103 message, and the index of the array elements that caused the error. The |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1104 size of the output argument of @var{errfunc} must have the same size as the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1105 output argument of @var{func}, otherwise a real error is thrown. For |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1106 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1107 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1108 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1109 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1110 function y = ferr (s, x), y = "MyString"; endfunction |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1111 arrayfun (@@str2num, [1234], |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1112 "UniformOutput", false, "ErrorHandler", @@ferr) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1113 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1114 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1115 [1,1] = MyString |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1116 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1117 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1118 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1119 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1120 @seealso{spfun, cellfun, structfun} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1121 @end deftypefn */) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1122 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1123 int nargin = args.length (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1124 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1125 if (nargin < 2) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1126 print_usage (); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1127 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1128 octave_value_list retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1129 int nargout1 = (nargout < 1 ? 1 : nargout); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1130 bool symbol_table_lookup = false; |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1131 octave_value func = args(0); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1132 |
23693
b9378eff6d13
move symbol_table class inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1133 octave::symbol_table& symtab = interp.get_symbol_table (); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1134 |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1135 if (func.is_string ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1136 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1137 // See if we can convert the string into a function. |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1138 std::string name = args(0).string_value (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1139 |
25646
4d565baa475e
move libinterp/utils functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
1140 if (! octave::valid_identifier (name)) |
26864
041caa61ed34
use get_function_handle instead of extract_function
John W. Eaton <jwe@octave.org>
parents:
26847
diff
changeset
|
1141 func = octave::get_function_handle (interp, args(0), "x"); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1142 else |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1143 { |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1144 func = symtab.find_function (name); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1145 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1146 if (func.is_undefined ()) |
16003
3b3321f9db9f
arrayfun: adding IDs to error messages in accordance with error_ids.
Juan Pablo Carbajal <ajuanpi+dev@gmail.com>
parents:
15195
diff
changeset
|
1147 error_with_id ("Octave:invalid-input-arg", |
16010
c5d548e4101f
* cellfun.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
16004
diff
changeset
|
1148 "arrayfun: invalid function NAME: %s", |
c5d548e4101f
* cellfun.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
16004
diff
changeset
|
1149 name.c_str ()); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1150 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1151 symbol_table_lookup = true; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1152 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1153 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1154 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1155 if (func.is_function_handle () || func.is_inline_function () |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1156 || func.is_function ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1157 { |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1158 // The following is an optimization because the symbol table can give a |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1159 // more specific function class, so this can result in fewer polymorphic |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1160 // function calls as the function gets called for each value of the array. |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1161 |
18678
6113e0c6920b
maint: Clean up extra spaces before/after parentheses.
Rik <rik@octave.org>
parents:
18112
diff
changeset
|
1162 if (! symbol_table_lookup) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1163 { |
28427
7a8c69c4eb55
convert obsolete octave_fcn_inline object to @inline class
John W. Eaton <jwe@octave.org>
parents:
27957
diff
changeset
|
1164 if (func.is_function_handle () || func.class_name () == "inline") |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1165 { |
28819
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
1166 // FIXME: instead of checking for overloaded functions as |
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
1167 // we did previously but is no longer possible, we could |
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
1168 // check whether the types of all the cell array elements |
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
1169 // are the same, then lookup the function for that type |
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
1170 // just once. |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1171 |
28819
bd71a227c562
* cellfun.cc: Update comments about overloaded function handles.
John W. Eaton <jwe@octave.org>
parents:
28427
diff
changeset
|
1172 goto nevermind; |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1173 } |
26847
8bd9fd99c12a
lazily evaluate fcn handles; fix overload resolution (bug #29447, bug #31821, bug #48802)
John W. Eaton <jwe@octave.org>
parents:
26577
diff
changeset
|
1174 |
19861
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
1175 octave_value f |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1176 = symtab.find_function (func.function_value () -> name ()); |
19861
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
1177 |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1178 if (f.is_defined ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1179 func = f; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1180 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1181 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1182 nevermind: |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1183 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1184 bool uniform_output = true; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1185 octave_value error_handler; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1186 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1187 get_mapper_fun_options (symtab, args, nargin, uniform_output, |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1188 error_handler); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1189 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1190 octave_value_list inputlist (nargin, octave_value ()); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1191 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1192 OCTAVE_LOCAL_BUFFER (octave_value, inputs, nargin); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1193 OCTAVE_LOCAL_BUFFER (bool, mask, nargin); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1194 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1195 octave_idx_type k = 1; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1196 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1197 dim_vector fdims (1, 1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1198 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1199 // Collect arguments. Pre-fill scalar elements of inputlist array. |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1200 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1201 for (int j = 0; j < nargin; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1202 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1203 inputs[j] = args(j+1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1204 mask[j] = inputs[j].numel () != 1; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1205 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1206 if (! mask[j]) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1207 inputlist(j) = inputs[j]; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1208 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1209 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1210 for (int j = 0; j < nargin; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1211 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1212 if (mask[j]) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1213 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1214 fdims = inputs[j].dims (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1215 k = inputs[j].numel (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1216 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1217 for (int i = j+1; i < nargin; i++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1218 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1219 if (mask[i] && inputs[i].dims () != fdims) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1220 error_with_id ("Octave:invalid-input-arg", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1221 "arrayfun: dimensions mismatch"); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1222 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1223 break; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1224 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1225 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1226 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
1227 octave::error_system& es = interp.get_error_system (); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1228 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1229 // Apply functions. |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1230 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1231 if (uniform_output) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1232 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1233 std::list<octave_value_list> idx_list (1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1234 idx_list.front ().resize (1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1235 std::string idx_type = "("; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1236 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1237 OCTAVE_LOCAL_BUFFER (octave_value, retv, nargout1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1238 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1239 for (octave_idx_type count = 0; count < k; count++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1240 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1241 idx_list.front ()(0) = count + 1.0; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1242 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1243 for (int j = 0; j < nargin; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1244 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1245 if (mask[j]) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1246 inputlist.xelem (j) = inputs[j].do_index_op (idx_list); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1247 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1248 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1249 const octave_value_list tmp |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
1250 = get_output_list (es, count, nargout, inputlist, func, |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1251 error_handler); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1252 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1253 if (nargout > 0 && tmp.length () < nargout) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1254 error_with_id ("Octave:invalid-fun-call", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1255 "arrayfun: function returned fewer than nargout values"); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1256 |
22777
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1257 if (nargout > 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1258 || (nargout == 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1259 && tmp.length () > 0 && tmp(0).is_defined ())) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1260 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1261 int num_to_copy = tmp.length (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1262 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1263 if (num_to_copy > nargout1) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1264 num_to_copy = nargout1; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1265 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1266 if (count == 0) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1267 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1268 for (int j = 0; j < num_to_copy; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1269 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1270 if (tmp(j).is_defined ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1271 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1272 octave_value val = tmp(j); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1273 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1274 if (val.numel () == 1) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1275 retv[j] = val.resize (fdims); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1276 else |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1277 error_with_id ("Octave:invalid-fun-call", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1278 "arrayfun: all values must be scalars when UniformOutput = true"); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1279 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1280 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1281 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1282 else |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1283 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1284 for (int j = 0; j < num_to_copy; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1285 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1286 if (tmp(j).is_defined ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1287 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1288 octave_value val = tmp(j); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1289 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1290 if (! retv[j].fast_elem_insert (count, val)) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1291 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1292 if (val.numel () == 1) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1293 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1294 idx_list.front ()(0) = count + 1.0; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1295 retv[j].assign (octave_value::op_asn_eq, |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1296 idx_type, idx_list, val); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1297 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1298 else |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1299 error_with_id ("Octave:invalid-fun-call", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1300 "arrayfun: all values must be scalars when UniformOutput = true"); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1301 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1302 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1303 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1304 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1305 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1306 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1307 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1308 retval.resize (nargout1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1309 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1310 for (int j = 0; j < nargout1; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1311 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1312 if (nargout > 0 && retv[j].is_undefined ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1313 retval(j) = NDArray (fdims); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1314 else |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1315 retval(j) = retv[j]; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1316 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1317 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1318 else |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1319 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1320 std::list<octave_value_list> idx_list (1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1321 idx_list.front ().resize (1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1322 std::string idx_type = "("; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1323 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1324 OCTAVE_LOCAL_BUFFER (Cell, results, nargout1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1325 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1326 for (int j = 0; j < nargout1; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1327 results[j].resize (fdims, Matrix ()); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1328 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1329 bool have_some_output = false; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1330 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1331 for (octave_idx_type count = 0; count < k; count++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1332 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1333 idx_list.front ()(0) = count + 1.0; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1334 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1335 for (int j = 0; j < nargin; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1336 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1337 if (mask[j]) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1338 inputlist.xelem (j) = inputs[j].do_index_op (idx_list); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1339 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1340 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1341 const octave_value_list tmp |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
26964
diff
changeset
|
1342 = get_output_list (es, count, nargout, inputlist, func, |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1343 error_handler); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1344 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1345 if (nargout > 0 && tmp.length () < nargout) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1346 error_with_id ("Octave:invalid-fun-call", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1347 "arrayfun: function returned fewer than nargout values"); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1348 |
22777
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1349 if (nargout > 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1350 || (nargout == 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1351 && tmp.length () > 0 && tmp(0).is_defined ())) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1352 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1353 int num_to_copy = tmp.length (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1354 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1355 if (num_to_copy > nargout1) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1356 num_to_copy = nargout1; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1357 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1358 if (num_to_copy > 0) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1359 have_some_output = true; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1360 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1361 for (int j = 0; j < num_to_copy; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1362 results[j](count) = tmp(j); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1363 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1364 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1365 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1366 if (have_some_output || fdims.any_zero ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1367 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1368 retval.resize (nargout1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1369 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1370 for (int j = 0; j < nargout1; j++) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1371 retval(j) = results[j]; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1372 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1373 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1374 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1375 else |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1376 error_with_id ("Octave:invalid-fun-call", |
16010
c5d548e4101f
* cellfun.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
16004
diff
changeset
|
1377 "arrayfun: argument NAME must be a string or function handle"); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1378 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1379 return retval; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1380 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1381 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1382 /* |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1383 %!function r = __f11 (x) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1384 %! r = x; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1385 %!endfunction |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1386 |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1387 %!function __f01 (x) |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1388 %! ## Empty function |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1389 %!endfunction |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1390 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1391 %!test |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1392 %! __arrayfun_test_num_outputs__ = -1; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1393 %! |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1394 %! function r = __subf11 (x) |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1395 %! __arrayfun_test_num_outputs__ = nargout; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1396 %! r = x; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1397 %! endfunction |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1398 %! |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1399 %! arrayfun ("__subf11", {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1400 %! assert (__arrayfun_test_num_outputs__, 0); |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1401 %! |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1402 %! __arrayfun_test_num_outputs__ = -1; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1403 %! x = arrayfun ("__subf11", {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1404 %! assert (__arrayfun_test_num_outputs__, 1); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1405 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1406 %!test |
25762
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1407 %! __arrayfun_test_num_outputs__ = -1; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1408 %! |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1409 %! function __subf01 (x) |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1410 %! __arrayfun_test_num_outputs__ = nargout; |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1411 %! endfunction |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1412 %! |
97ea2329d5d8
Use nested functions to prevent leaking globals in BIST tests.
Rik <rik@octave.org>
parents:
25688
diff
changeset
|
1413 %! arrayfun ("__subf01", {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1414 %! assert (__arrayfun_test_num_outputs__, 0); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1415 |
21581
6fab85c1538f
maint: Follow Octave conventions for use of semicolon in BIST tests.
Rik <rik@octave.org>
parents:
21580
diff
changeset
|
1416 %!error x = arrayfun (@__f01, [1, 2]) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1417 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1418 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1419 %! assert (arrayfun (@__f11, [1, 2]), [1, 2]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1420 %! assert (arrayfun (@__f11, [1, 2], "uniformoutput", false), {1, 2}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1421 %! assert (arrayfun (@__f11, {1, 2}), {1, 2}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1422 %! assert (arrayfun (@__f11, {1, 2}, "uniformoutput", false), {{1}, {2}}); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1423 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1424 %!assert (arrayfun (@ones, 1, [2,3], "uniformoutput", false), {[1,1], [1,1,1]}) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1425 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1426 ## Test function to check the "Errorhandler" option |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1427 %!function z = __arrayfunerror (S, varargin) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1428 %! z = S; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1429 %!endfunction |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1430 ## First input argument can be a string, an inline function, a |
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1431 ## function_handle or an anonymous function |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1432 %!test |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21562
diff
changeset
|
1433 %! arrayfun (@isequal, [false, true], [true, true]); # No output argument |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1434 %!error |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21562
diff
changeset
|
1435 %! arrayfun (@isequal); # One or less input arguments |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1436 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1437 %! A = arrayfun ("isequal", [false, true], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1438 %! assert (A, [false, true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1439 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1440 %! A = arrayfun (inline ("(x == y)", "x", "y"), [false, true], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1441 %! assert (A, [false, true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1442 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1443 %! A = arrayfun (@isequal, [false, true], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1444 %! assert (A, [false, true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1445 %!test |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
1446 %! A = arrayfun (@(x,y) isequal (x,y), [false, true], [true, true]); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1447 %! assert (A, [false, true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1448 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1449 ## Number of input and output arguments may be greater than one |
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1450 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1451 %! A = arrayfun (@(x) islogical (x), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1452 %! assert (A, true); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1453 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1454 %! A = arrayfun (@(x,y,z) x + y + z, [1, 1, 1], [2, 2, 2], [3, 4, 5]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1455 %! assert (A, [6, 7, 8], 1e-16); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1456 %!test # Two input arguments of different types |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1457 %! A = arrayfun (@(x,y) islogical (x) && ischar (y), false, "a"); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1458 %! assert (A, true); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1459 %!test # Pass another variable to the anonymous function |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1460 %! y = true; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1461 %! A = arrayfun (@(x) islogical (x && y), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1462 %! assert (A, true); |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26963
diff
changeset
|
1463 %!test # Three output arguments of different type |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1464 %! [A, B, C] = arrayfun (@find, [10, 11; 0, 12], "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1465 %! assert (isequal (A, {true, true; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1466 %! assert (isequal (B, {true, true; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1467 %! assert (isequal (C, {10, 11; [], 12})); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1468 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1469 ## Input arguments can be of type logical |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1470 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1471 %! A = arrayfun (@(x,y) x == y, [false, true], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1472 %! assert (A, [false, true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1473 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1474 %! A = arrayfun (@(x,y) x == y, [false; true], [true; true], "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1475 %! assert (A, [false; true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1476 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1477 %! A = arrayfun (@(x) x, [false, true, false, true], "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1478 %! assert (A, {false, true, false, true}); |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26963
diff
changeset
|
1479 %!test # Three output arguments of same type |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1480 %! [A, B, C] = arrayfun (@find, [true, false; false, true], "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1481 %! assert (isequal (A, {true, []; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1482 %! assert (isequal (B, {true, []; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1483 %! assert (isequal (C, {true, []; [], true})); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1484 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1485 %! A = arrayfun (@(x,y) array2str (x,y), true, true, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1486 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1487 %! assert (isfield (A, "identifier"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1488 %! assert (isfield (A, "message"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1489 %! assert (isfield (A, "index"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1490 %! assert (isempty (A.message), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1491 %! assert (A.index, 1); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1492 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1493 %! A = arrayfun (@(x,y) array2str (x,y), true, true, "UniformOutput", true, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1494 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1495 %! assert (isfield (A, "identifier"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1496 %! assert (isfield (A, "message"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1497 %! assert (isfield (A, "index"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1498 %! assert (isempty (A.message), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1499 %! assert (A.index, 1); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1500 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1501 ## Input arguments can be of type numeric |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1502 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1503 %! A = arrayfun (@(x,y) x>y, [1.1, 4.2], [3.1, 2+3*i]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1504 %! assert (A, [false, true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1505 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1506 %! A = arrayfun (@(x,y) x>y, [1.1, 4.2; 2, 4], [3.1, 2; 2, 4+2*i], "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1507 %! assert (A, [false, true; false, false]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1508 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1509 %! A = arrayfun (@(x,y) x:y, [1.1, 4], [3.1, 6], "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1510 %! assert (isequal (A{1}, [1.1, 2.1, 3.1])); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1511 %! assert (isequal (A{2}, [4, 5, 6])); |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26963
diff
changeset
|
1512 %!test # Three output arguments of different type |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1513 %! [A, B, C] = arrayfun (@find, [10, 11; 0, 12], "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1514 %! assert (isequal (A, {true, true; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1515 %! assert (isequal (B, {true, true; [], true})); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1516 %! assert (isequal (C, {10, 11; [], 12})); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1517 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1518 %! A = arrayfun (@(x,y) array2str (x,y), {1.1, 4}, {3.1, 6}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1519 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1520 %! B = isfield (A(1), "message") && isfield (A(1), "index"); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1521 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1522 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1523 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1524 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1525 %! assert ([A(1).index, A(2).index], [1, 2]); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1526 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1527 %! A = arrayfun (@(x,y) array2str (x,y), {1.1, 4}, {3.1, 6}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1528 %! "UniformOutput", true, "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1529 %! B = isfield (A(1), "message") && isfield (A(1), "index"); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1530 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1531 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1532 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1533 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1534 %! assert ([A(1).index, A(2).index], [1, 2]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1535 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1536 ## Input arguments can be of type character or strings |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1537 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1538 %! A = arrayfun (@(x,y) x>y, ["ad", "c", "ghi"], ["cc", "d", "fgh"]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1539 %! assert (A, [false, true, false, true, true, true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1540 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1541 %! A = arrayfun (@(x,y) x>y, ["a"; "f"], ["c"; "d"], "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1542 %! assert (A, [false; true]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1543 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1544 %! A = arrayfun (@(x,y) x:y, ["a", "d"], ["c", "f"], "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1545 %! assert (A, {"abc", "def"}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1546 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1547 %! A = arrayfun (@(x,y) cell2str (x,y), ["a", "d"], ["c", "f"], ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1548 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1549 %! B = isfield (A(1), "identifier") && isfield (A(1), "message") && isfield (A(1), "index"); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1550 %! assert (B, true); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1551 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1552 ## Input arguments can be of type structure |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1553 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1554 %! a = struct ("a", 1.1, "b", 4.2); b = struct ("a", 3.1, "b", 2); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1555 %! A = arrayfun (@(x,y) (x.a < y.a) && (x.b > y.b), a, b); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1556 %! assert (A, true); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1557 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1558 %! a = struct ("a", 1.1, "b", 4.2); b = struct ("a", 3.1, "b", 2); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1559 %! A = arrayfun (@(x,y) (x.a < y.a) && (x.b > y.b), a, b, "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1560 %! assert (A, true); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1561 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1562 %! a = struct ("a", 1.1, "b", 4.2); b = struct ("a", 3.1, "b", 2); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1563 %! A = arrayfun (@(x,y) x.a:y.a, a, b, "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1564 %! assert (isequal (A, {[1.1, 2.1, 3.1]})); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1565 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1566 %! A = arrayfun (@(x) mat2str(x), "a", "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1567 %! assert (isfield (A, "identifier"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1568 %! assert (isfield (A, "message"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1569 %! assert (isfield (A, "index"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1570 %! assert (isempty (A.message), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1571 %! assert (A.index, 1); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1572 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1573 %! A = arrayfun (@(x) mat2str(x), "a", "UniformOutput", true, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1574 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1575 %! assert (isfield (A, "identifier"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1576 %! assert (isfield (A, "message"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1577 %! assert (isfield (A, "index"), true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1578 %! assert (isempty (A.message), false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1579 %! assert (A.index, 1); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1580 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1581 ## Input arguments can be of type cell array |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1582 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1583 %! A = arrayfun (@(x,y) x{1} < y{1}, {1.1, 4.2}, {3.1, 2}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1584 %! assert (A, [true, false]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1585 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1586 %! A = arrayfun (@(x,y) x{1} < y{1}, {1.1; 4.2}, {3.1; 2}, "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1587 %! assert (A, [true; false]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1588 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1589 %! A = arrayfun (@(x,y) x{1} < y{1}, {1.1, 4.2}, {3.1, 2}, "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1590 %! assert (A, {true, false}); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1591 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1592 %! A = arrayfun (@(x,y) num2str(x,y), {1.1, 4.2}, {3.1, 2}, "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1593 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1594 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1595 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1596 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1597 %! assert ([A(1).index, A(2).index], [1, 2]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1598 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1599 %! A = arrayfun (@(x,y) num2str (x,y), {1.1, 4.2}, {3.1, 2}, ... |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1600 %! "UniformOutput", true, "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1601 %! assert ([(isfield (A(1), "identifier")), (isfield (A(2), "identifier"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1602 %! assert ([(isfield (A(1), "message")), (isfield (A(2), "message"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1603 %! assert ([(isfield (A(1), "index")), (isfield (A(2), "index"))], [true, true]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1604 %! assert ([(isempty (A(1).message)), (isempty (A(2).message))], [false, false]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1605 %! assert ([A(1).index, A(2).index], [1, 2]); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1606 */ |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1607 |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1608 static void |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1609 do_num2cell_helper (const dim_vector& dv, |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1610 const Array<int>& dimv, |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1611 dim_vector& celldv, dim_vector& arraydv, |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1612 Array<int>& perm) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1613 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
1614 int dvl = dimv.numel (); |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21581
diff
changeset
|
1615 int maxd = dv.ndims (); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1616 celldv = dv; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1617 for (int i = 0; i < dvl; i++) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1618 maxd = std::max (maxd, dimv(i)); |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21581
diff
changeset
|
1619 if (maxd > dv.ndims ()) |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1620 celldv.resize (maxd, 1); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1621 arraydv = celldv; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1622 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1623 OCTAVE_LOCAL_BUFFER_INIT (bool, sing, maxd, false); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1624 |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10291
diff
changeset
|
1625 perm.clear (maxd, 1); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1626 for (int i = 0; i < dvl; i++) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1627 { |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1628 int k = dimv(i) - 1; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1629 if (k < 0) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
1630 error ("num2cell: dimension indices must be positive"); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
1631 |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
1632 if (i > 0 && k < dimv(i-1) - 1) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
1633 error ("num2cell: dimension indices must be strictly increasing"); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1634 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1635 sing[k] = true; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1636 perm(i) = k; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1637 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1638 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1639 for (int k = 0, i = dvl; k < maxd; k++) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1640 if (! sing[k]) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1641 perm(i++) = k; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1642 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1643 for (int i = 0; i < maxd; i++) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1644 if (sing[i]) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1645 celldv(i) = 1; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1646 else |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1647 arraydv(i) = 1; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1648 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1649 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1650 template <typename NDA> |
10756
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1651 static inline typename NDA::element_type |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1652 do_num2cell_elem (const NDA& array, octave_idx_type i) |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1653 { return array(i); } |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1654 |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1655 static inline Cell |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1656 do_num2cell_elem (const Cell& array, octave_idx_type i) |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1657 { return Cell (array(i)); } |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1658 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1659 template <typename NDA> |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1660 static Cell |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1661 do_num2cell (const NDA& array, const Array<int>& dimv) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1662 { |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23576
diff
changeset
|
1663 if (dimv.isempty ()) |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1664 { |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1665 Cell retval (array.dims ()); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1666 octave_idx_type nel = array.numel (); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1667 for (octave_idx_type i = 0; i < nel; i++) |
10756
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1668 retval.xelem (i) = do_num2cell_elem (array, i); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1669 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1670 return retval; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1671 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1672 else |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1673 { |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1674 dim_vector celldv, arraydv; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1675 Array<int> perm; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1676 do_num2cell_helper (array.dims (), dimv, celldv, arraydv, perm); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1677 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1678 NDA parray = array.permute (perm); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1679 |
18100
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17893
diff
changeset
|
1680 octave_idx_type nela = arraydv.numel (); |
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17893
diff
changeset
|
1681 octave_idx_type nelc = celldv.numel (); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1682 parray = parray.reshape (dim_vector (nela, nelc)); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1683 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1684 Cell retval (celldv); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1685 for (octave_idx_type i = 0; i < nelc; i++) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1686 { |
9731 | 1687 retval.xelem (i) = NDA (parray.column (i).reshape (arraydv)); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1688 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1689 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1690 return retval; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1691 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1692 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1693 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1694 // FIXME: this is a mess, but if a size method for the object exists, |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1695 // we have to call it to get the size of the object instead of using the |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1696 // internal dims method. |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1697 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1698 static dim_vector |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1699 get_object_dims (octave_value& obj) |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1700 { |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1701 dim_vector retval; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1702 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1703 Matrix m = obj.size (); |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1704 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1705 int n = m.numel (); |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1706 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1707 retval.resize (n); |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1708 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1709 for (int i = 0; i < n; i++) |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1710 retval(i) = m(i); |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1711 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1712 return retval; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1713 } |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1714 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1715 static Cell |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1716 do_object2cell (const octave_value& obj, const Array<int>& dimv) |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1717 { |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1718 Cell retval; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1719 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1720 // FIXME: this copy is only needed because the octave_value::size |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1721 // method is not const. |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1722 octave_value array = obj; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1723 |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23576
diff
changeset
|
1724 if (! dimv.isempty ()) |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1725 error ("num2cell (A, dim) not implemented for class objects"); |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1726 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1727 dim_vector dv = get_object_dims (array); |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1728 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1729 retval.resize (dv); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1730 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1731 octave_value_list idx (1); |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1732 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1733 for (octave_idx_type i = 0; i < dv.numel (); i++) |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1734 { |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1735 octave_quit (); |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1736 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1737 idx(0) = double (i+1); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1738 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1739 retval.xelem (i) = array.single_subsref ("(", idx); |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1740 } |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1741 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1742 return retval; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1743 } |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1744 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
1745 DEFUN (num2cell, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1746 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1747 @deftypefn {} {@var{C} =} num2cell (@var{A}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1748 @deftypefnx {} {@var{C} =} num2cell (@var{A}, @var{dim}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1749 Convert the numeric matrix @var{A} to a cell array. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1750 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1751 When no @var{dim} is specified, each element of @var{A} becomes a 1x1 element |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1752 in the output @var{C}. |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1753 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1754 If @var{dim} is defined then individual elements of @var{C} contain all of the |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1755 elements from @var{A} along the specified dimension. @var{dim} may also be a |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1756 vector of dimensions with the same rule applied. |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1757 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1758 For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1759 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1760 @example |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1761 x = [1,2;3,4] |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1762 @result{} |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1763 1 2 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1764 3 4 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1765 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1766 ## each element of A becomes a 1x1 element of C |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1767 num2cell (x) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1768 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1769 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1770 [1,1] = 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1771 [2,1] = 3 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1772 [1,2] = 2 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1773 [2,2] = 4 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1774 @} |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1775 ## all rows (dim 1) of A appear in each element of C |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1776 num2cell (x, 1) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1777 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1778 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1779 [1,1] = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1780 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1781 3 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1782 [1,2] = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1783 2 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1784 4 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1785 @} |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1786 ## all columns (dim 2) of A appear in each element of C |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1787 num2cell (x, 2) |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1788 @result{} |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1789 @{ |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1790 [1,1] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1791 1 2 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1792 [2,1] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1793 3 4 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1794 @} |
26577
ae1542fb58ba
documentation: Avoid some overfull lines in the PDF manual.
Markus Mützel <markus.muetzel@gmx.de>
parents:
26376
diff
changeset
|
1795 ## all rows and cols appear in each element of C |
ae1542fb58ba
documentation: Avoid some overfull lines in the PDF manual.
Markus Mützel <markus.muetzel@gmx.de>
parents:
26376
diff
changeset
|
1796 ## (hence, only 1 output) |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1797 num2cell (x, [1, 2]) |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1798 @result{} |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1799 @{ |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1800 [1,1] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1801 1 2 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1802 3 4 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
1803 @} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1804 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1805 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1806 @seealso{mat2cell} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1807 @end deftypefn */) |
5451 | 1808 { |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1809 int nargin = args.length (); |
5451 | 1810 |
1811 if (nargin < 1 || nargin > 2) | |
5823 | 1812 print_usage (); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1813 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1814 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1815 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1816 octave_value array = args(0); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1817 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1818 Array<int> dimv; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1819 if (nargin > 1) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1820 dimv = args(1).int_vector_value (true); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1821 |
23579
c20a0fa91c0c
maint: Deprecate is_bool_type and replace with islogical.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1822 if (array.islogical ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1823 retval = do_num2cell (array.bool_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1824 else if (array.is_char_matrix ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1825 retval = do_num2cell (array.char_array_value (), dimv); |
23586
f6c5db0a02e7
maint: Deprecate is_numeric_type and replace with isnumeric.
Rik <rik@octave.org>
parents:
23584
diff
changeset
|
1826 else if (array.isnumeric ()) |
5451 | 1827 { |
23580
2230f9e10fb3
maint: Deprecate is_integer_type and replace with isinteger.
Rik <rik@octave.org>
parents:
23579
diff
changeset
|
1828 if (array.isinteger ()) |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1829 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1830 if (array.is_int8_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1831 retval = do_num2cell (array.int8_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1832 else if (array.is_int16_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1833 retval = do_num2cell (array.int16_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1834 else if (array.is_int32_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1835 retval = do_num2cell (array.int32_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1836 else if (array.is_int64_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1837 retval = do_num2cell (array.int64_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1838 else if (array.is_uint8_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1839 retval = do_num2cell (array.uint8_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1840 else if (array.is_uint16_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1841 retval = do_num2cell (array.uint16_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1842 else if (array.is_uint32_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1843 retval = do_num2cell (array.uint32_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1844 else if (array.is_uint64_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1845 retval = do_num2cell (array.uint64_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1846 } |
23581
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23580
diff
changeset
|
1847 else if (array.iscomplex ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1848 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1849 if (array.is_single_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1850 retval = do_num2cell (array.float_complex_array_value (), dimv); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1851 else |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1852 retval = do_num2cell (array.complex_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1853 } |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1854 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1855 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1856 if (array.is_single_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1857 retval = do_num2cell (array.float_array_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1858 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1859 retval = do_num2cell (array.array_value (), dimv); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1860 } |
5451 | 1861 } |
23587
0c468af9dc00
maint: Deprecate is_object and replace with isobject.
Rik <rik@octave.org>
parents:
23586
diff
changeset
|
1862 else if (array.isobject ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1863 retval = do_object2cell (array, dimv); |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23583
diff
changeset
|
1864 else if (array.isstruct ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1865 retval = do_num2cell (array.map_value (), dimv); |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
1866 else if (array.iscell ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1867 retval = do_num2cell (array.cell_value (), dimv); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1868 else |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
20980
diff
changeset
|
1869 err_wrong_type_arg ("num2cell", array); |
5451 | 1870 |
1871 return retval; | |
1872 } | |
1873 | |
5988 | 1874 /* |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1875 %!assert (num2cell ([1,2;3,4]), {1,2;3,4}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1876 %!assert (num2cell ([1,2;3,4], 1), {[1;3],[2;4]}) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1877 %!assert (num2cell ([1,2;3,4], 2), {[1,2];[3,4]}) |
5988 | 1878 */ |
1879 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1880 static bool |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1881 mat2cell_mismatch (const dim_vector& dv, |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1882 const Array<octave_idx_type> *d, int nd) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1883 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1884 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1885 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1886 octave_idx_type s = 0; |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
1887 for (octave_idx_type j = 0; j < d[i].numel (); j++) |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1888 s += d[i](j); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1889 |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1890 octave_idx_type r = (i < dv.ndims () ? dv(i) : 1); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1891 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1892 if (s != r) |
26164
7f6a50f73625
Silence compiler warnings about format identifier for octave_idx_type (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25762
diff
changeset
|
1893 error ("mat2cell: mismatch on dimension %d (%" OCTAVE_IDX_TYPE_FORMAT |
7f6a50f73625
Silence compiler warnings about format identifier for octave_idx_type (bug #55046).
Markus Mützel <markus.muetzel@gmx.de>
parents:
25762
diff
changeset
|
1894 " != %" OCTAVE_IDX_TYPE_FORMAT ")", i+1, r, s); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1895 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1896 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1897 return false; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1898 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1899 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1900 template <typename container> |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1901 static void |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1902 prepare_idx (container *idx, int idim, int nd, |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1903 const Array<octave_idx_type>* d) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1904 { |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1905 octave_idx_type nidx = (idim < nd ? d[idim].numel () : 1); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1906 if (nidx == 1) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1907 idx[0] = idx_vector::colon; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1908 else |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1909 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1910 octave_idx_type l = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1911 for (octave_idx_type i = 0; i < nidx; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1912 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1913 octave_idx_type u = l + d[idim](i); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1914 idx[i] = idx_vector (l, u); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1915 l = u; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1916 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1917 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1918 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1919 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1920 // 2D specialization, works for Array, Sparse and octave_map. |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1921 // Uses 1D or 2D indexing. |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1922 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1923 template <typename Array2D> |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1924 static Cell |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1925 do_mat2cell_2d (const Array2D& a, const Array<octave_idx_type> *d, int nd) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1926 { |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
1927 Cell retval; |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1928 assert (nd == 1 || nd == 2); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1929 assert (a.ndims () == 2); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1930 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1931 if (mat2cell_mismatch (a.dims (), d, nd)) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1932 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1933 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
1934 octave_idx_type nridx = d[0].numel (); |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1935 octave_idx_type ncidx = (nd == 1 ? 1 : d[1].numel ()); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1936 retval.clear (nridx, ncidx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1937 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1938 int ivec = -1; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1939 if (a.rows () > 1 && a.cols () == 1 && ncidx == 1) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1940 ivec = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1941 else if (a.rows () == 1 && nridx == 1 && nd == 2) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1942 ivec = 1; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1943 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1944 if (ivec >= 0) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1945 { |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
1946 // Vector split. Use 1D indexing. |
18100
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17893
diff
changeset
|
1947 octave_idx_type l = 0; |
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17893
diff
changeset
|
1948 octave_idx_type nidx = (ivec == 0 ? nridx : ncidx); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1949 for (octave_idx_type i = 0; i < nidx; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1950 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1951 octave_idx_type u = l + d[ivec](i); |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
1952 retval.xelem (i) = a.index (idx_vector (l, u)); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1953 l = u; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1954 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1955 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1956 else |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1957 { |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
1958 // General 2D case. Use 2D indexing. |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1959 OCTAVE_LOCAL_BUFFER (idx_vector, ridx, nridx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1960 prepare_idx (ridx, 0, nd, d); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1961 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1962 OCTAVE_LOCAL_BUFFER (idx_vector, cidx, ncidx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1963 prepare_idx (cidx, 1, nd, d); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1964 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1965 for (octave_idx_type j = 0; j < ncidx; j++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1966 for (octave_idx_type i = 0; i < nridx; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1967 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1968 octave_quit (); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1969 |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
1970 retval.xelem (i,j) = a.index (ridx[i], cidx[j]); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1971 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1972 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1973 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1974 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1975 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1976 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
1977 // Nd case. Works for Arrays and octave_map. |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1978 // Uses Nd indexing. |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1979 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1980 template <typename ArrayND> |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1981 Cell |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1982 do_mat2cell_nd (const ArrayND& a, const Array<octave_idx_type> *d, int nd) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1983 { |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
1984 Cell retval; |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1985 assert (nd >= 1); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1986 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1987 if (mat2cell_mismatch (a.dims (), d, nd)) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1988 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1989 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1990 dim_vector rdv = dim_vector::alloc (nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1991 OCTAVE_LOCAL_BUFFER (octave_idx_type, nidx, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1992 octave_idx_type idxtot = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1993 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1994 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
1995 rdv(i) = nidx[i] = d[i].numel (); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1996 idxtot += nidx[i]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1997 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1998 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1999 retval.clear (rdv); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2000 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2001 OCTAVE_LOCAL_BUFFER (idx_vector, xidx, idxtot); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2002 OCTAVE_LOCAL_BUFFER (idx_vector *, idx, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2003 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2004 idxtot = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2005 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2006 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2007 idx[i] = xidx + idxtot; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2008 prepare_idx (idx[i], i, nd, d); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2009 idxtot += nidx[i]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2010 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2011 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2012 OCTAVE_LOCAL_BUFFER_INIT (octave_idx_type, ridx, nd, 0); |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2013 Array<idx_vector> ra_idx |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
2014 (dim_vector (1, std::max (nd, a.ndims ())), idx_vector::colon); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2015 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2016 for (octave_idx_type j = 0; j < retval.numel (); j++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2017 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2018 octave_quit (); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2019 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2020 for (int i = 0; i < nd; i++) |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2021 ra_idx.xelem (i) = idx[i][ridx[i]]; |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2022 |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2023 retval.xelem (j) = a.index (ra_idx); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2024 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2025 rdv.increment_index (ridx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2026 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2027 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2028 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2029 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2030 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2031 // Dispatcher. |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
2032 template <typename ArrayND> |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2033 Cell |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2034 do_mat2cell (const ArrayND& a, const Array<octave_idx_type> *d, int nd) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2035 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2036 if (a.ndims () == 2 && nd <= 2) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2037 return do_mat2cell_2d (a, d, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2038 else |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2039 return do_mat2cell_nd (a, d, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2040 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2041 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
2042 // General case. Works for any class supporting do_index_op. |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2043 // Uses Nd indexing. |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2044 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2045 Cell |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2046 do_mat2cell (octave_value& a, const Array<octave_idx_type> *d, int nd) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2047 { |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2048 Cell retval; |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2049 assert (nd >= 1); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2050 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2051 if (mat2cell_mismatch (a.dims (), d, nd)) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2052 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2053 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2054 dim_vector rdv = dim_vector::alloc (nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2055 OCTAVE_LOCAL_BUFFER (octave_idx_type, nidx, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2056 octave_idx_type idxtot = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2057 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2058 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
2059 rdv(i) = nidx[i] = d[i].numel (); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2060 idxtot += nidx[i]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2061 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2062 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2063 retval.clear (rdv); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2064 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2065 OCTAVE_LOCAL_BUFFER (octave_value, xidx, idxtot); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2066 OCTAVE_LOCAL_BUFFER (octave_value *, idx, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2067 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2068 idxtot = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2069 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2070 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2071 idx[i] = xidx + idxtot; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2072 prepare_idx (idx[i], i, nd, d); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2073 idxtot += nidx[i]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2074 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2075 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2076 OCTAVE_LOCAL_BUFFER_INIT (octave_idx_type, ridx, nd, 0); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
2077 octave_value_list ra_idx (std::max (nd, a.ndims ()), |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2078 octave_value::magic_colon_t); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2079 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2080 for (octave_idx_type j = 0; j < retval.numel (); j++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2081 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2082 octave_quit (); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2083 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2084 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2085 ra_idx(i) = idx[i][ridx[i]]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2086 |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2087 retval.xelem (j) = a.do_index_op (ra_idx); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2088 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2089 rdv.increment_index (ridx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2090 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2091 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2092 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2093 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2094 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
2095 DEFUN (mat2cell, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2096 doc: /* -*- texinfo -*- |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2097 @deftypefn {} {@var{C} =} mat2cell (@var{A}, @var{dim1}, @var{dim2}, @dots{}, @var{dimi}, @dots{}, @var{dimn}) |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2098 @deftypefnx {} {@var{C} =} mat2cell (@var{A}, @var{rowdim}) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2099 Convert the matrix @var{A} to a cell array. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2100 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2101 Each dimension argument (@var{dim1}, @var{dim2}, etc.@:) is a vector of |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2102 integers which specifies how to divide that dimension's elements amongst the |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2103 new elements in the output @var{C}. The number of elements in the @var{i}-th |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2104 dimension is @code{size (@var{A}, @var{i})}. Because all elements in @var{A} |
26963
589b00536a39
doc: Small fixes to mat2cell and polyeig docstrings (bug #55985).
Rik <rik@octave.org>
parents:
26577
diff
changeset
|
2105 must be partitioned, there is a requirement that @code{sum (@var{dimi}) == size |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2106 (@var{A}, i)}. The size of the output cell @var{C} is numel (@var{dim1}) x |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2107 numel (@var{dim2}) x @dots{} x numel (@var{dimn}). |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2108 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2109 Given a single dimensional argument, @var{rowdim}, the output is divided into |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2110 rows as specified. All other dimensions are not divided and thus all |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2111 columns (dim 2), pages (dim 3), etc.@: appear in each output element. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2112 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2113 Examples |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2114 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2115 @example |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2116 x = reshape (1:12, [3, 4])' |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2117 @result{} |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2118 1 2 3 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2119 4 5 6 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2120 7 8 9 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2121 10 11 12 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2122 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2123 @group |
26577
ae1542fb58ba
documentation: Avoid some overfull lines in the PDF manual.
Markus Mützel <markus.muetzel@gmx.de>
parents:
26376
diff
changeset
|
2124 ## The 4 rows (dim1) are divided in to two cell elements |
ae1542fb58ba
documentation: Avoid some overfull lines in the PDF manual.
Markus Mützel <markus.muetzel@gmx.de>
parents:
26376
diff
changeset
|
2125 ## with 2 rows each. |
ae1542fb58ba
documentation: Avoid some overfull lines in the PDF manual.
Markus Mützel <markus.muetzel@gmx.de>
parents:
26376
diff
changeset
|
2126 ## The 3 cols (dim2) are divided in to three cell elements |
ae1542fb58ba
documentation: Avoid some overfull lines in the PDF manual.
Markus Mützel <markus.muetzel@gmx.de>
parents:
26376
diff
changeset
|
2127 ## with 1 col each. |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2128 mat2cell (x, [2,2], [1,1,1]) |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2129 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2130 @{ |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2131 [1,1] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2132 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2133 1 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2134 4 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2135 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2136 [2,1] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2137 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2138 7 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2139 10 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2140 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2141 [1,2] = |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2142 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2143 2 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2144 5 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2145 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2146 [2,2] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2147 8 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2148 11 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2149 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2150 [1,3] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2151 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2152 3 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2153 6 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2154 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2155 [2,3] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2156 9 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2157 12 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2158 @} |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2159 @end group |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2160 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2161 @group |
26577
ae1542fb58ba
documentation: Avoid some overfull lines in the PDF manual.
Markus Mützel <markus.muetzel@gmx.de>
parents:
26376
diff
changeset
|
2162 ## The 4 rows (dim1) are divided in to two cell elements |
ae1542fb58ba
documentation: Avoid some overfull lines in the PDF manual.
Markus Mützel <markus.muetzel@gmx.de>
parents:
26376
diff
changeset
|
2163 ## with a 3/1 split. |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2164 ## All columns appear in each output element. |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2165 mat2cell (x, [3,1]) |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2166 @result{} |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2167 @{ |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2168 [1,1] = |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2169 |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2170 1 2 3 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2171 4 5 6 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2172 7 8 9 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2173 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2174 [2,1] = |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2175 |
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2176 10 11 12 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2177 @} |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2178 @end group |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2179 @end example |
26165
b326eeae92d0
doc: Rewrite docstrings for mat2cell and num2cell (bug #53335).
Rik <rik@octave.org>
parents:
25103
diff
changeset
|
2180 |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2181 @seealso{num2cell, cell2mat} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2182 @end deftypefn */) |
5784 | 2183 { |
14846
460a3c6d8bf1
maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents:
14501
diff
changeset
|
2184 int nargin = args.length (); |
5784 | 2185 |
2186 if (nargin < 2) | |
7038 | 2187 print_usage (); |
5784 | 2188 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
2189 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
2190 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2191 // Prepare indices. |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2192 OCTAVE_LOCAL_BUFFER (Array<octave_idx_type>, d, nargin-1); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2193 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2194 for (int i = 1; i < nargin; i++) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2195 d[i-1] = args(i).octave_idx_type_vector_value (true); |
5784 | 2196 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2197 octave_value a = args(0); |
23583
b7747a2c88b2
maint: Deprecate is_sparse_type and replace with issparse.
Rik <rik@octave.org>
parents:
23582
diff
changeset
|
2198 bool sparse = a.issparse (); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2199 if (sparse && nargin > 3) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2200 error ("mat2cell: sparse arguments only support 2-D indexing"); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2201 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2202 switch (a.builtin_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2203 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2204 case btyp_double: |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2205 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2206 if (sparse) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2207 retval = do_mat2cell_2d (a.sparse_matrix_value (), d, nargin-1); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2208 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2209 retval = do_mat2cell (a.array_value (), d, nargin - 1); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2210 } |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2211 break; |
5784 | 2212 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2213 case btyp_complex: |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2214 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2215 if (sparse) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2216 retval = do_mat2cell_2d (a.sparse_complex_matrix_value (), d, |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2217 nargin-1); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2218 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2219 retval = do_mat2cell (a.complex_array_value (), d, nargin - 1); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2220 } |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2221 break; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2222 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2223 #define BTYP_BRANCH(X, Y) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2224 case btyp_ ## X: \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2225 retval = do_mat2cell (a.Y ## _value (), d, nargin - 1); \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2226 break |
5784 | 2227 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2228 BTYP_BRANCH (float, float_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2229 BTYP_BRANCH (float_complex, float_complex_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2230 BTYP_BRANCH (bool, bool_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2231 BTYP_BRANCH (char, char_array); |
5784 | 2232 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2233 BTYP_BRANCH (int8, int8_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2234 BTYP_BRANCH (int16, int16_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2235 BTYP_BRANCH (int32, int32_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2236 BTYP_BRANCH (int64, int64_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2237 BTYP_BRANCH (uint8, uint8_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2238 BTYP_BRANCH (uint16, uint16_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2239 BTYP_BRANCH (uint32, uint32_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2240 BTYP_BRANCH (uint64, uint64_array); |
5784 | 2241 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2242 BTYP_BRANCH (cell, cell); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2243 BTYP_BRANCH (struct, map); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2244 |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2245 #undef BTYP_BRANCH |
5784 | 2246 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2247 case btyp_func_handle: |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
20980
diff
changeset
|
2248 err_wrong_type_arg ("mat2cell", a); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2249 break; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2250 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2251 default: |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2252 retval = do_mat2cell (a, d, nargin-1); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2253 break; |
5784 | 2254 } |
2255 | |
2256 return retval; | |
2257 } | |
2258 | |
2259 /* | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2260 %!test |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2261 %! x = reshape (1:20, 5, 4); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2262 %! c = mat2cell (x, [3,2], [3,1]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2263 %! assert (c, {[1,6,11;2,7,12;3,8,13],[16;17;18];[4,9,14;5,10,15],[19;20]}); |
5784 | 2264 |
2265 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2266 %! x = "abcdefghij"; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2267 %! c = mat2cell (x, 1, [0,4,2,0,4,0]); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2268 %! empty1by0str = resize ("", 1, 0); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2269 %! assert (c, {empty1by0str,"abcd","ef",empty1by0str,"ghij",empty1by0str}); |
5784 | 2270 */ |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2271 |
9740
78ac37d73557
fix cellslices to handle empty ranges with non-positive bounds
Jaroslav Hajek <highegg@gmail.com>
parents:
9731
diff
changeset
|
2272 // FIXME: it would be nice to allow ranges being handled without a conversion. |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
2273 template <typename NDA> |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
2274 static Cell |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
2275 do_cellslices_nda (const NDA& array, |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
2276 const Array<octave_idx_type>& lb, |
10125 | 2277 const Array<octave_idx_type>& ub, |
2278 int dim = -1) | |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2279 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
2280 octave_idx_type n = lb.numel (); |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2281 Cell retval (1, n); |
23592
80e3bfb7bd5a
maint: Deprecate is_vector and replace with isvector.
Rik <rik@octave.org>
parents:
23587
diff
changeset
|
2282 if (array.isvector () && (dim == -1 |
25103
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
2283 || (dim == 0 && array.columns () == 1) |
078b795c5219
maint: style check C++ ahead of 4.4 release.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
2284 || (dim == 1 && array.rows () == 1))) |
9057
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2285 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2286 for (octave_idx_type i = 0; i < n; i++) |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2287 retval.xelem (i) = array.index (idx_vector (lb(i) - 1, ub(i))); |
9057
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2288 } |
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2289 else |
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2290 { |
10125 | 2291 const dim_vector dv = array.dims (); |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21581
diff
changeset
|
2292 int ndims = dv.ndims (); |
10125 | 2293 if (dim < 0) |
2294 dim = dv.first_non_singleton (); | |
2295 ndims = std::max (ndims, dim + 1); | |
2296 | |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
2297 Array<idx_vector> idx (dim_vector (ndims, 1), idx_vector::colon); |
10125 | 2298 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2299 for (octave_idx_type i = 0; i < n; i++) |
9057
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2300 { |
10125 | 2301 idx(dim) = idx_vector (lb(i) - 1, ub(i)); |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2302 retval.xelem (i) = array.index (idx); |
9057
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2303 } |
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2304 } |
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2305 |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2306 return retval; |
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2307 } |
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2308 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
2309 DEFUN (cellslices, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2310 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2311 @deftypefn {} {@var{sl} =} cellslices (@var{x}, @var{lb}, @var{ub}, @var{dim}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2312 Given an array @var{x}, this function produces a cell array of slices from |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2313 the array determined by the index vectors @var{lb}, @var{ub}, for lower and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2314 upper bounds, respectively. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2315 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2316 In other words, it is equivalent to the following code: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2317 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2318 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2319 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2320 n = length (lb); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2321 sl = cell (1, n); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2322 for i = 1:length (lb) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2323 sl@{i@} = x(:,@dots{},lb(i):ub(i),@dots{},:); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2324 endfor |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2325 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2326 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2327 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2328 The position of the index is determined by @var{dim}. If not specified, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2329 slicing is done along the first non-singleton dimension. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2330 @seealso{cell2mat, cellindexmat, cellfun} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2331 @end deftypefn */) |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2332 { |
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2333 int nargin = args.length (); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2334 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2335 if (nargin < 3 || nargin > 4) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2336 print_usage (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2337 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2338 octave_value x = args(0); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2339 Array<octave_idx_type> lb = args(1).octave_idx_type_vector_value (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2340 Array<octave_idx_type> ub = args(2).octave_idx_type_vector_value (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2341 int dim = -1; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2342 if (nargin == 4) |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2343 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2344 dim = args(3).int_value () - 1; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2345 if (dim < 0) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2346 error ("cellslices: DIM must be a valid dimension"); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2347 } |
10125 | 2348 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2349 if (lb.numel () != ub.numel ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2350 error ("cellslices: the lengths of LB and UB must match"); |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2351 |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2352 Cell retcell; |
23583
b7747a2c88b2
maint: Deprecate is_sparse_type and replace with issparse.
Rik <rik@octave.org>
parents:
23582
diff
changeset
|
2353 if (! x.issparse () && x.is_matrix_type ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2354 { |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2355 // specialize for some dense arrays. |
23579
c20a0fa91c0c
maint: Deprecate is_bool_type and replace with islogical.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
2356 if (x.islogical ()) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2357 retcell = do_cellslices_nda (x.bool_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2358 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2359 else if (x.is_char_matrix ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2360 retcell = do_cellslices_nda (x.char_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2361 lb, ub, dim); |
23580
2230f9e10fb3
maint: Deprecate is_integer_type and replace with isinteger.
Rik <rik@octave.org>
parents:
23579
diff
changeset
|
2362 else if (x.isinteger ()) |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2363 { |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2364 if (x.is_int8_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2365 retcell = do_cellslices_nda (x.int8_array_value (), |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2366 lb, ub, dim); |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2367 else if (x.is_int16_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2368 retcell = do_cellslices_nda (x.int16_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2369 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2370 else if (x.is_int32_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2371 retcell = do_cellslices_nda (x.int32_array_value (), |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2372 lb, ub, dim); |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2373 else if (x.is_int64_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2374 retcell = do_cellslices_nda (x.int64_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2375 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2376 else if (x.is_uint8_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2377 retcell = do_cellslices_nda (x.uint8_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2378 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2379 else if (x.is_uint16_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2380 retcell = do_cellslices_nda (x.uint16_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2381 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2382 else if (x.is_uint32_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2383 retcell = do_cellslices_nda (x.uint32_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2384 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2385 else if (x.is_uint64_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2386 retcell = do_cellslices_nda (x.uint64_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2387 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2388 } |
23581
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23580
diff
changeset
|
2389 else if (x.iscomplex ()) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2390 { |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2391 if (x.is_single_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2392 retcell = do_cellslices_nda (x.float_complex_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2393 lb, ub, dim); |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2394 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2395 retcell = do_cellslices_nda (x.complex_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2396 lb, ub, dim); |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2397 } |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2398 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2399 { |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2400 if (x.is_single_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2401 retcell = do_cellslices_nda (x.float_array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2402 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2403 else |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2404 retcell = do_cellslices_nda (x.array_value (), |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2405 lb, ub, dim); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2406 } |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2407 } |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2408 else |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2409 { |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2410 // generic code. |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2411 octave_idx_type n = lb.numel (); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2412 retcell = Cell (1, n); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2413 const dim_vector dv = x.dims (); |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21581
diff
changeset
|
2414 int ndims = dv.ndims (); |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2415 if (dim < 0) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2416 dim = dv.first_non_singleton (); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2417 ndims = std::max (ndims, dim + 1); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2418 octave_value_list idx (ndims, octave_value::magic_colon_t); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2419 for (octave_idx_type i = 0; i < n; i++) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2420 { |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2421 idx(dim) = Range (lb(i), ub(i)); |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2422 retcell.xelem (i) = x.do_index_op (idx); |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2423 } |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2424 } |
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2425 |
21127
df7891224709
maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
2426 return ovl (retcell); |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2427 } |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2428 |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2429 /* |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2430 %!test |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2431 %! m = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12]; |
10125 | 2432 %! c = cellslices (m, [1, 2], [2, 3], 2); |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2433 %! assert (c, {[1, 2; 5, 6; 9, 10], [2, 3; 6, 7; 10, 11]}); |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2434 */ |
10963
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2435 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
2436 DEFUN (cellindexmat, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2437 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2438 @deftypefn {} {@var{y} =} cellindexmat (@var{x}, @var{varargin}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2439 Perform indexing of matrices in a cell array. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2440 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2441 Given a cell array of matrices @var{x}, this function computes |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2442 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2443 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2444 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2445 Y = cell (size (X)); |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2446 for i = 1:numel (X) |
22716
c2f0e687471e
doc: Improve docstring for cellindexmat().
Rik <rik@octave.org>
parents:
22699
diff
changeset
|
2447 Y@{i@} = X@{i@}(varargin@{1@}, varargin@{2@}, @dots{}, varargin@{N@}); |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2448 endfor |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2449 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2450 @end example |
22716
c2f0e687471e
doc: Improve docstring for cellindexmat().
Rik <rik@octave.org>
parents:
22699
diff
changeset
|
2451 |
c2f0e687471e
doc: Improve docstring for cellindexmat().
Rik <rik@octave.org>
parents:
22699
diff
changeset
|
2452 The indexing arguments may be scalar (@code{2}), arrays (@code{[1, 3]}), |
c2f0e687471e
doc: Improve docstring for cellindexmat().
Rik <rik@octave.org>
parents:
22699
diff
changeset
|
2453 ranges (@code{1:3}), or the colon operator (@qcode{":"}). However, the |
c2f0e687471e
doc: Improve docstring for cellindexmat().
Rik <rik@octave.org>
parents:
22699
diff
changeset
|
2454 indexing keyword @code{end} is not available. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2455 @seealso{cellslices, cellfun} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2456 @end deftypefn */) |
10963
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2457 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2458 if (args.length () == 0) |
10963
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2459 print_usage (); |
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2460 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2461 const Cell x = args(0).xcell_value ("cellindexmat: X must be a cell"); |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
2462 |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2463 Cell y (x.dims ()); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2464 octave_idx_type nel = x.numel (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2465 octave_value_list idx = args.slice (1, args.length () - 1); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2466 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2467 for (octave_idx_type i = 0; i < nel; i++) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2468 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2469 octave_quit (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2470 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2471 octave_value tmp = x(i); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2472 |
27666
3e8faed1b7d8
Remove wrapper template class NoAlias<T> (bug #56752)
Carlo de Falco <carlo.defalco@polimi.it>
parents:
27474
diff
changeset
|
2473 y.xelem (i) = tmp.do_index_op (idx); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2474 } |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2475 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2476 return octave_value (y); |
10963
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2477 } |