Mercurial > octave
annotate libinterp/corefcn/cellfun.cc @ 23599:5cb3a2bb5e1e
don't use singleton for symbol_table
This is the first of a series of changes to make the symbol table a
part of the interpreter instead of a global object. These changes
also aim to simplify the implementation of symbol table so that it is
easier to understand and modify.
* Functions now own their scope (workspace) data.
* The list of subfunctions is contained in the scope rather than a
global list.
* symtab.h, symtab.cc (class symbol_table): Don't use singleton
pattern.
* interpreter.h, interpreter.cc (interpreter::m_symbol_table): New
data member.
(interpreter::~interpreter): Don't set instance to 0.
* interpreter-private.h, interpreter-private.cc
(__get_symbol_table__): New function.
Change all uses of call_stack to access call_stack object from the
interpreter.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 09 Jun 2017 02:21:28 -0400 |
parents | 80e3bfb7bd5a |
children | b9378eff6d13 |
rev | line source |
---|---|
5205 | 1 /* |
2 | |
23219
3ac9f9ecfae5
maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents:
23083
diff
changeset
|
3 Copyright (C) 2005-2017 Mohamed Kamoun |
22323
bac0d6f07a3e
maint: Update copyright notices for 2016.
John W. Eaton <jwe@octave.org>
parents:
22299
diff
changeset
|
4 Copyright (C) 2006-2016 Bill Denney |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
5 Copyright (C) 2009 Jaroslav Hajek |
10521
4d1fc073fbb7
add some missing copyright stmts
Jaroslav Hajek <highegg@gmail.com>
parents:
10428
diff
changeset
|
6 Copyright (C) 2010 VZLU Prague |
5205 | 7 |
8 This file is part of Octave. | |
9 | |
10 Octave is free software; you can redistribute it and/or modify it | |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
11 under the terms of the GNU General Public License as published by |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
12 the Free Software Foundation; either version 3 of the License, or |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
13 (at your option) any later version. |
5205 | 14 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
15 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
16 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
18 GNU General Public License for more details. |
5205 | 19 |
20 You should have received a copy of the GNU General Public License | |
7016 | 21 along with Octave; see the file COPYING. If not, see |
22 <http://www.gnu.org/licenses/>. | |
5205 | 23 |
24 */ | |
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" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
22022
diff
changeset
|
42 #include "interpreter.h" |
5205 | 43 #include "parse.h" |
44 #include "variables.h" | |
5988 | 45 #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
|
46 #include "errwarn.h" |
9728
70925b11ba46
again allow the obsolete syntax for cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9684
diff
changeset
|
47 #include "utils.h" |
5205 | 48 |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
49 #include "ov-bool.h" |
13329
80f7564a3849
handle class objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13234
diff
changeset
|
50 #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
|
51 #include "ov-colon.h" |
10044
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
52 #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
|
53 #include "ov-float.h" |
10044
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
54 #include "ov-flt-complex.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
55 #include "ov-int16.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
56 #include "ov-int32.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
57 #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
|
58 #include "ov-int8.h" |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
59 #include "ov-scalar.h" |
10044
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
60 #include "ov-uint16.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
61 #include "ov-uint32.h" |
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
62 #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
|
63 #include "ov-uint8.h" |
10044
2d7a8c227713
rewrite uniformoutput optimization in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
10043
diff
changeset
|
64 |
12952
5a5cb2a4b71d
cellfun: Fix a regression for function handles to overloaded functions
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12949
diff
changeset
|
65 #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
|
66 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
67 static octave_value_list |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
68 get_output_list (octave_idx_type count, octave_idx_type nargout, |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
69 const octave_value_list& inputlist, |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
70 octave_value& func, |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
71 octave_value& error_handler) |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
72 { |
16000
3f93cd251bdb
fix ErrorHandler in cellfun (bug #38256)
Stefan Mahr <dac922@gmx.de>
parents:
15195
diff
changeset
|
73 octave_value_list tmp; |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
74 |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
75 bool execution_error = false; |
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
76 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
77 try |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
78 { |
23473
55916f99b8b6
prefer feval over do_multi_index_op
John W. Eaton <jwe@octave.org>
parents:
23450
diff
changeset
|
79 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
|
80 } |
22327
d0562b3159c7
move more classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22323
diff
changeset
|
81 catch (const octave::execution_exception& e) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
82 { |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
83 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
|
84 { |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23084
diff
changeset
|
85 octave::interpreter::recover_from_exception (); |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
86 |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
87 execution_error = true; |
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
88 } |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
89 else |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
90 throw e; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
91 } |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
92 |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20443
diff
changeset
|
93 if (execution_error) |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
94 { |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
95 if (error_handler.is_defined ()) |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
96 { |
11046
14993c9e857e
amd.cc, cellfun.cc: use octave_scalar_map instead of Octave_map
John W. Eaton <jwe@octave.org>
parents:
10964
diff
changeset
|
97 octave_scalar_map msg; |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
98 msg.assign ("identifier", last_error_id ()); |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
99 msg.assign ("message", last_error_message ()); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
100 msg.assign ("index", |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
101 static_cast<double> (count |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
102 + static_cast<octave_idx_type>(1))); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
103 |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
104 octave_value_list errlist = inputlist; |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
105 errlist.prepend (msg); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
106 |
10181
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
107 buffer_error_messages--; |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
108 |
23473
55916f99b8b6
prefer feval over do_multi_index_op
John W. Eaton <jwe@octave.org>
parents:
23450
diff
changeset
|
109 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
|
110 } |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
111 else |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
112 tmp.clear (); |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
113 } |
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 return tmp; |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
116 } |
a668fbd32e34
improve cellfun & avoid undefined values from builtins
Jaroslav Hajek <highegg@gmail.com>
parents:
10155
diff
changeset
|
117 |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
118 // 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
|
119 // 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
|
120 // 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
|
121 template <typename BNDA, typename NDA> |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
122 static octave_value_list |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
123 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
|
124 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
125 octave_value_list retval; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
126 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
127 std::string name = args(0).string_value (); |
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 const Cell f_args = args(1).cell_value (); |
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 octave_idx_type k = f_args.numel (); |
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 if (name == "isempty") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
134 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
135 BNDA result (f_args.dims ()); |
13231
20ed9548070f
maint: style fixes for cellfun
John W. Eaton <jwe@octave.org>
parents:
13230
diff
changeset
|
136 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
|
137 result(count) = f_args.elem (count).isempty (); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
138 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
139 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
140 else if (name == "islogical") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
141 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
142 BNDA result (f_args.dims ()); |
21562
6c2fd62db1f7
maint: Eliminate accidental double spaces in code.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
143 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
|
144 result(count) = f_args.elem (count).islogical (); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
145 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
146 } |
17002
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
147 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
|
148 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
149 BNDA result (f_args.dims ()); |
21562
6c2fd62db1f7
maint: Eliminate accidental double spaces in code.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
150 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
|
151 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
|
152 retval(0) = result; |
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
153 } |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
154 else if (name == "isreal") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
155 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
156 BNDA result (f_args.dims ()); |
21562
6c2fd62db1f7
maint: Eliminate accidental double spaces in code.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
157 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
|
158 result(count) = f_args.elem (count).isreal (); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
159 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
160 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
161 else if (name == "length") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
162 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
163 NDA result (f_args.dims ()); |
21562
6c2fd62db1f7
maint: Eliminate accidental double spaces in code.
Rik <rik@octave.org>
parents:
21547
diff
changeset
|
164 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
|
165 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
|
166 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
167 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
168 else if (name == "ndims") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
169 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
170 NDA result (f_args.dims ()); |
13231
20ed9548070f
maint: style fixes for cellfun
John W. Eaton <jwe@octave.org>
parents:
13230
diff
changeset
|
171 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
|
172 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
|
173 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
174 } |
17004
19b7c7412a63
cell2mat.m: Re-vamp input validation for 30% speedup
Rik <rik@octave.org>
parents:
17002
diff
changeset
|
175 else if (name == "numel" || name == "prodofsize") |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
176 { |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
177 NDA result (f_args.dims ()); |
13231
20ed9548070f
maint: style fixes for cellfun
John W. Eaton <jwe@octave.org>
parents:
13230
diff
changeset
|
178 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
|
179 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
|
180 retval(0) = result; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
181 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
182 else if (name == "size") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
183 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
184 if (nargin != 3) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
185 error ("cellfun: not enough arguments for \"size\""); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
186 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
187 int d = args(2).nint_value () - 1; |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
188 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
189 if (d < 0) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
190 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
|
191 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
192 NDA result (f_args.dims ()); |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
193 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
194 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
|
195 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
196 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
|
197 if (d < dv.ndims ()) |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
198 result(count) = static_cast<double> (dv(d)); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
199 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
200 result(count) = 1.0; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
201 } |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
202 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
203 retval(0) = result; |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
204 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
205 else if (name == "isclass") |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
206 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
207 if (nargin != 3) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
208 error ("cellfun: not enough arguments for \"isclass\""); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
209 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
210 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
|
211 BNDA result (f_args.dims ()); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
212 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
|
213 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
|
214 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
215 retval(0) = result; |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
216 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
217 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
218 return retval; |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
219 } |
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 static void |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
222 get_mapper_fun_options (symbol_table& symtab, const octave_value_list& args, |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
223 int& nargin, bool& uniform_output, |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
224 octave_value& error_handler) |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
225 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
226 while (nargin > 3 && args(nargin-2).is_string ()) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
227 { |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22197
diff
changeset
|
228 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
|
229 |
9aff66860e03
accept abbreviated cellfun option names
John W. Eaton <jwe@octave.org>
parents:
13960
diff
changeset
|
230 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
|
231 |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22197
diff
changeset
|
232 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
|
233 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
|
234 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
|
235 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
236 if (args(nargin-1).is_function_handle () |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
237 || args(nargin-1).is_inline_function ()) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
238 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
239 error_handler = args(nargin-1); |
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 else if (args(nargin-1).is_string ()) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
242 { |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
243 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
|
244 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
245 error_handler = symtab.find_function (err_name); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
246 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
247 if (error_handler.is_undefined ()) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
248 error ("cellfun: invalid function NAME: %s", |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
249 err_name.c_str ()); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
250 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
251 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
252 error ("cellfun: invalid value for 'ErrorHandler' function"); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
253 } |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
254 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
255 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
|
256 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
257 nargin -= 2; |
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 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
260 nargin -= 1; |
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 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
263 DEFMETHOD (cellfun, interp, args, nargout, |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
264 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
|
265 @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
|
266 @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
|
267 @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
|
268 @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
|
269 @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
|
270 @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
|
271 @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
|
272 @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
|
273 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
274 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
|
275 @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
|
276 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
277 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
|
278 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
|
279 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
280 @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
|
281 @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
|
282 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
|
283 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
284 @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
|
285 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
|
286 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
287 @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
|
288 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
|
289 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
290 @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
|
291 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
|
292 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
293 @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
|
294 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
|
295 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
296 @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
|
297 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
|
298 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
299 @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
|
300 @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
|
301 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
|
302 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
|
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 size |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
305 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
|
306 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
307 @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
|
308 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
|
309 @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
|
310 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
311 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
|
312 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
|
313 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
|
314 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
|
315 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
|
316 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
317 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
318 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
319 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
|
320 @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
|
321 @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
|
322 @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
|
323 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
324 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
|
325 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
|
326 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
|
327 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
328 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
329 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
330 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
|
331 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
|
332 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
|
333 endfunction |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
334 [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
|
335 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
336 aa = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
337 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
|
338 bb = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
339 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
|
340 @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
|
341 @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
|
342 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
343 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
|
344 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
|
345 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
|
346 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
347 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
|
348 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
|
349 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
|
350 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
|
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 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
353 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
354 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
|
355 "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
|
356 @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
|
357 @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
|
358 @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
|
359 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
360 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
|
361 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
|
362 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
|
363 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
364 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
365 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
|
366 @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
|
367 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
368 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
369 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
|
370 @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
|
371 @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
|
372 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
|
373 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
|
374 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
375 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
376 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
377 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
|
378 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
|
379 @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
|
380 @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
|
381 @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
|
382 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
383 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
|
384 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
|
385 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
|
386 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
|
387 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
|
388 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
|
389 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
390 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
391 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
392 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
|
393 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
|
394 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
|
395 @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
|
396 @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
|
397 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
398 @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
|
399 @end deftypefn */) |
5205 | 400 { |
401 int nargin = args.length (); | |
402 | |
403 if (nargin < 2) | |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
404 print_usage (); |
5205 | 405 |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
406 if (! args(1).iscell ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
407 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
|
408 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
409 octave_value_list retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
410 int nargout1 = (nargout < 1 ? 1 : nargout); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
411 |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
412 octave_value func = args(0); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
413 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
414 symbol_table& symtab = interp.get_symbol_table (); |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
415 |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
416 if (func.is_string ()) |
5205 | 417 { |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
418 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
|
419 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
420 if (! retval.empty ()) |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
421 return retval; |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
422 |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
423 // 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
|
424 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
425 std::string name = args(0).string_value (); |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
426 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
427 if (! valid_identifier (name)) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
428 { |
18862
6825522c25e4
maint: Use names beginning and ending with "__" for internal only functions.
Rik <rik@octave.org>
parents:
18812
diff
changeset
|
429 std::string fcn_name = unique_symbol_name ("__cellfun_fcn__"); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
430 std::string fname = "function y = " + fcn_name + "(x) y = "; |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
431 |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
432 octave_function *ptr_func |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
433 = extract_function (args(0), "cellfun", fcn_name, |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
434 fname, "; endfunction"); |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
435 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
436 if (ptr_func) |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
437 func = octave_value (ptr_func, true); |
5205 | 438 } |
439 else | |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
440 { |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
441 func = symtab.find_function (name); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
442 |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
443 if (func.is_undefined ()) |
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
444 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
|
445 } |
5205 | 446 } |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
447 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
448 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
|
449 && ! func.is_function ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
450 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
|
451 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
452 bool uniform_output = true; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
453 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
|
454 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
455 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
|
456 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
457 // 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
|
458 // 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
|
459 // 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
|
460 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
461 if (func.is_function_handle ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
462 { |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
463 octave_fcn_handle *f = func.fcn_handle_value (); |
17892
5401637c3fa7
Make cellfun obey "UniformOutput" for optimised internal functions (bug #40467)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
17787
diff
changeset
|
464 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
465 // Overloaded function handles need to check the type of the |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
466 // arguments for each element of the array, so they cannot be |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
467 // optimized this way. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
468 if (f -> is_overloaded ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
469 goto nevermind; |
13960
ef96344a6e58
cellfun: get rid of unnecessary symbol_table_lookup flag
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
13959
diff
changeset
|
470 } |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
471 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
472 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
|
473 octave_value f = symtab.find_function (name); |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
474 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
475 if (f.is_defined ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
476 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
477 // 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
|
478 if (name != "size" && name != "class") |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
479 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
480 // 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
|
481 octave_value_list tmp_args = args; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
482 tmp_args(0) = name; |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
483 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
484 if (uniform_output) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
485 retval = |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
486 try_cellfun_internal_ops<boolNDArray, NDArray> (tmp_args, |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
487 nargin); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
488 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
489 retval = |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
490 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
|
491 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
492 if (! retval.empty ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
493 return retval; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
494 } |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
495 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
496 // 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
|
497 // 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
|
498 func = f; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
499 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
500 } |
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 nevermind: |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
503 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
504 // Extract cell arguments. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
505 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
506 octave_value_list inputlist (nargin, octave_value ()); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
507 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
508 OCTAVE_LOCAL_BUFFER (Cell, inputs, nargin); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
509 OCTAVE_LOCAL_BUFFER (bool, mask, nargin); |
9465
40de4692c860
auto-expanding scalar cells in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9459
diff
changeset
|
510 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
511 // This is to prevent copy-on-write. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
512 const Cell *cinputs = inputs; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
513 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
514 octave_idx_type k = 1; |
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 dim_vector fdims (1, 1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
517 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
518 // 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
|
519 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
520 for (int j = 0; j < nargin; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
521 { |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23573
diff
changeset
|
522 if (! args(j+1).iscell ()) |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
523 error ("cellfun: arguments must be cells"); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
524 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
525 inputs[j] = args(j+1).cell_value (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
526 mask[j] = inputs[j].numel () != 1; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
527 if (! mask[j]) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
528 inputlist(j) = cinputs[j](0); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
529 } |
5988 | 530 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
531 for (int j = 0; j < nargin; j++) |
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 if (mask[j]) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
534 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
535 fdims = inputs[j].dims (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
536 k = inputs[j].numel (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
537 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
|
538 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
539 if (mask[i] && inputs[i].dims () != fdims) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
540 error ("cellfun: dimensions mismatch"); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
541 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
542 break; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
543 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
544 } |
10670
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
545 |
21743
f4d7d0eb5b0c
use namespace for unwind_protect class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
546 octave::unwind_protect frame; |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
547 frame.protect_var (buffer_error_messages); |
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 if (error_handler.is_defined ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
550 buffer_error_messages++; |
5988 | 551 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
552 // Apply functions. |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
553 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
554 if (uniform_output) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
555 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
556 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
|
557 idx_list.front ().resize (1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
558 std::string idx_type = "("; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
559 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
560 OCTAVE_LOCAL_BUFFER (octave_value, retv, nargout1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
561 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
562 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
|
563 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
564 for (int j = 0; j < nargin; j++) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
565 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
566 if (mask[j]) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
567 inputlist.xelem (j) = cinputs[j](count); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
568 } |
5988 | 569 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
570 const octave_value_list tmp |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
571 = get_output_list (count, nargout, inputlist, func, |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
572 error_handler); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
573 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
574 if (nargout > 0 && tmp.length () < nargout) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
575 error ("cellfun: function returned fewer than nargout values"); |
5988 | 576 |
22777
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
577 if (nargout > 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
578 || (nargout == 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
579 && 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
|
580 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
581 int num_to_copy = tmp.length (); |
5988 | 582 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
583 if (num_to_copy > nargout1) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
584 num_to_copy = nargout1; |
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 if (count == 0) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
587 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
588 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
|
589 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
590 if (tmp(j).is_defined ()) |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
591 { |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
592 octave_value val = tmp(j); |
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 if (val.numel () != 1) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
595 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
|
596 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
597 retv[j] = val.resize (fdims); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
598 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
599 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
600 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
601 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
602 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
603 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
|
604 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
605 if (tmp(j).is_defined ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
606 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
607 octave_value val = tmp(j); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
608 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
609 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
|
610 { |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
611 if (val.numel () != 1) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
612 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
|
613 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
614 idx_list.front ()(0) = count + 1.0; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
615 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
|
616 idx_type, idx_list, val); |
10670
654fbde5dceb
make cellfun's fast scalar collection mechanism public
Jaroslav Hajek <highegg@gmail.com>
parents:
10521
diff
changeset
|
617 } |
8994 | 618 } |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
619 } |
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
620 } |
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
621 } |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
622 } |
8994 | 623 |
20980
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
624 retval.resize (nargout1); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
625 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
626 for (int j = 0; j < nargout1; j++) |
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 if (nargout > 0 && retv[j].is_undefined ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
629 retval(j) = NDArray (fdims); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
630 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
631 retval(j) = retv[j]; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
632 } |
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 else |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
635 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
636 OCTAVE_LOCAL_BUFFER (Cell, results, nargout1); |
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 for (int j = 0; j < nargout1; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
639 results[j].resize (fdims, Matrix ()); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
640 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
641 bool have_some_output = false; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
642 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
643 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
|
644 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
645 for (int j = 0; j < nargin; j++) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
646 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
647 if (mask[j]) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
648 inputlist.xelem (j) = cinputs[j](count); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
649 } |
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 const octave_value_list tmp |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
652 = get_output_list (count, nargout, inputlist, func, |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
653 error_handler); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
654 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
655 if (nargout > 0 && tmp.length () < nargout) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
656 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
|
657 |
22777
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
658 if (nargout > 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
659 || (nargout == 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
660 && 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
|
661 { |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
662 int num_to_copy = tmp.length (); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
663 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
664 if (num_to_copy > nargout1) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
665 num_to_copy = nargout1; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
666 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
667 if (num_to_copy > 0) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
668 have_some_output = true; |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
669 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
670 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
|
671 results[j](count) = tmp(j); |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
672 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
673 } |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
674 |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
675 if (have_some_output || fdims.any_zero ()) |
81c2b14c209f
maint: invert if/else/error instances.
John W. Eaton <jwe@octave.org>
parents:
20962
diff
changeset
|
676 { |
9988
76cf4aec34e9
allow functions returning no value in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9740
diff
changeset
|
677 retval.resize (nargout1); |
13229
983720941822
maint: improve readability of cellfun
John W. Eaton <jwe@octave.org>
parents:
12952
diff
changeset
|
678 |
9988
76cf4aec34e9
allow functions returning no value in cellfun
Jaroslav Hajek <highegg@gmail.com>
parents:
9740
diff
changeset
|
679 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
|
680 retval(j) = results[j]; |
9450
cf714e75c656
implement overloaded function handles
Jaroslav Hajek <highegg@gmail.com>
parents:
9377
diff
changeset
|
681 } |
5205 | 682 } |
683 | |
684 return retval; | |
685 } | |
686 | |
5988 | 687 /* |
688 | |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
689 %!function r = __f11 (x) |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
690 %! global __cellfun_test_num_outputs__; |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
691 %! __cellfun_test_num_outputs__ = nargout; |
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
692 %! r = x; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
693 %!endfunction |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
694 |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
695 %!function __f01 (x) |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
696 %! global __cellfun_test_num_outputs__; |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
697 %! __cellfun_test_num_outputs__ = nargout; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
698 %!endfunction |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
699 |
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
700 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
701 %! global __cellfun_test_num_outputs__; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
702 %! cellfun (@__f11, {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
703 %! assert (__cellfun_test_num_outputs__, 0); |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
704 %! x = cellfun (@__f11, {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__, 1); |
13230
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
706 |
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
707 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
708 %! global __cellfun_test_num_outputs__; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
709 %! cellfun (@__f01, {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
710 %! 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
|
711 |
21581
6fab85c1538f
maint: Follow Octave conventions for use of semicolon in BIST tests.
Rik <rik@octave.org>
parents:
21580
diff
changeset
|
712 %!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
|
713 |
c73cc5b67feb
fix nargout handling for functions called by cellfun
John W. Eaton <jwe@octave.org>
parents:
13229
diff
changeset
|
714 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
715 %! 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
|
716 %! 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
|
717 |
11457 | 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)); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
720 %! 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
|
721 %! assert (b, zeros (2, 0)); |
11457 | 722 |
723 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
724 %! [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
|
725 %! 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
|
726 %! assert (b, cell (2, 0)); |
11457 | 727 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
728 ## 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
|
729 %!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
|
730 %! z = S; |
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
731 %!endfunction |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
732 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
733 ## 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
|
734 ## a function_handle or an anonymous function |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
735 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
736 %! 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
|
737 %! assert (A, [true, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
738 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
739 %! 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
|
740 %! assert (A, [true, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
741 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
742 %! 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
|
743 %! assert (A, [true, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
744 %!test |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
745 %! 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
|
746 %! assert (A, [true, false, true, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
747 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
748 ## 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
|
749 ## "isempty", "islogical", "isnumeric", "length", "ndims" or "prodofsize" |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
750 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
751 %! 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
|
752 %! 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
|
753 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
754 %! 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
|
755 %! 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
|
756 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
757 %! 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
|
758 %! 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
|
759 %!test |
17002
dd783018709b
Add special case function "isnumeric" to cellfun.cc (bug #39387).
Olaf Till <i7tiol@t-online.de>
parents:
16047
diff
changeset
|
760 %! 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
|
761 %! 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
|
762 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
763 %! 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
|
764 %! 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
|
765 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
766 %! 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
|
767 %! assert (A, [2; 4]); |
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 ("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
|
770 %! assert (A, [4, 24]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
771 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
772 ## 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
|
773 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
774 %! 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
|
775 %! assert (A, [6, 7, 8]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
776 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
777 %! 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
|
778 %! "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
779 %! 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
|
780 %!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
|
781 %! 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
|
782 %! assert (A, [true, false]); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
783 %!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
|
784 %! y = true; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
785 %! 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
|
786 %! assert (A, [true, false]); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
787 %!test # Three ouptut 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
|
788 %! [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
|
789 %! 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
|
790 %! 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
|
791 %! assert (isequal (C, {10, 11; [], 12})); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
792 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
793 ## 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
|
794 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
795 %! 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
|
796 %! assert (A, [false, true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
797 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
798 %! 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
|
799 %! "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
800 %! assert (A, [false; true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
801 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
802 %! 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
|
803 %! assert (A, {false, true; false, true}); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
804 %!test # Three ouptut arguments of same type |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
805 %! [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
|
806 %! "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
807 %! 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
|
808 %! 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
|
809 %! assert (isequal (C, {true, []; [], true})); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
810 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
811 %! 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
|
812 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
813 %! 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
|
814 %! 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
|
815 %! 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
|
816 %! 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
|
817 %! assert (A.index, 1); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
818 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
819 %! 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
|
820 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
821 %! 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
|
822 %! 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
|
823 %! 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
|
824 %! 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
|
825 %! assert (A.index, 1); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
826 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
827 ## 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
|
828 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
829 %! 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
|
830 %! assert (A, [false, true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
831 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
832 %! 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
|
833 %! "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
834 %! assert (A, [false, true; false, false]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
835 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
836 %! 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
|
837 %! 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
|
838 %! assert (isequal (A{2}, [4, 5, 6])); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
839 %!test # Three ouptut 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
|
840 %! [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
|
841 %! 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
|
842 %! 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
|
843 %! assert (isequal (C, {10, 11; [], 12})); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
844 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
845 %! 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
|
846 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
847 %! 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
|
848 %! 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
|
849 %! 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
|
850 %! 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
|
851 %! 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
|
852 %! 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
|
853 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
854 %! 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
|
855 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
856 %! 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
|
857 %! 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
|
858 %! 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
|
859 %! 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
|
860 %! 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
|
861 %! 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
|
862 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
863 ## 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
|
864 %!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
|
865 %! 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
|
866 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
867 %! 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
|
868 %! assert (A, [false; true]); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
869 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
870 %! 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
|
871 %! assert (A, {"abc", "def"}); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
872 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
873 %! 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
|
874 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
875 %! 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
|
876 %! 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
|
877 %! 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
|
878 %! 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
|
879 %! 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
|
880 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
881 %! 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
|
882 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
883 %! 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
|
884 %! 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
|
885 %! 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
|
886 %! 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
|
887 %! 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
|
888 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
889 ## Structures cannot be handled by cellfun |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
890 %!error |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
891 %! 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
|
892 %! 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
|
893 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
894 ## 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
|
895 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
896 %! 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
|
897 %! assert (A, [1, 0], 1e-16); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
898 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
899 %! 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
|
900 %! "UniformOutput", true); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
901 %! assert (A, [1; 0], 1e-16); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
902 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
903 %! 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
|
904 %! "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
905 %! assert (A, {true, false}); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
906 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
907 %! 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
|
908 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
909 %! 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
|
910 %! 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
|
911 %! 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
|
912 %! 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
|
913 %! 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
|
914 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
915 %! 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
|
916 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
917 %! 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
|
918 %! 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
|
919 %! 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
|
920 %! 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
|
921 %! 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
|
922 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
923 ## 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
|
924 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
925 %! 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
|
926 %! 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
|
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", true); |
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) (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
|
936 %! "UniformOutput", false); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
937 %! assert (A, {true}); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
938 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
939 %! 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
|
940 %! 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
|
941 %! "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
942 %! 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
|
943 %! 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
|
944 %! 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
|
945 %! 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
|
946 %! assert (A.index, 1); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
947 %!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
|
948 %! 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
|
949 %! 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
|
950 %! "UniformOutput", true, "ErrorHandler", @__cellfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
951 %! 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
|
952 %! 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
|
953 %! 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
|
954 %! 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
|
955 %! assert (A.index, 1); |
8373
63fe023d7898
Added more tests for cellfun.
Thomas Treichl <Thomas.Treichl@gmx.net>
parents:
8347
diff
changeset
|
956 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
957 ## 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
|
958 %!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
|
959 %!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
|
960 %!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
|
961 %!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
|
962 %!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
|
963 %!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
|
964 %!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
|
965 %!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
|
966 %!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
|
967 %!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
|
968 %!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
|
969 %!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
|
970 %!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
|
971 %!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
|
972 %!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
|
973 %!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
|
974 %!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
|
975 %!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
|
976 %!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
|
977 %!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
|
978 %!assert (cellfun (@(x) x(2),{[1],[1,2]},"ErrorHandler",@(x,y) NaN), [NaN,2]) |
5988 | 979 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
980 %! [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
|
981 %! 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
|
982 %! assert (b, {"c", "g"}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
983 %! assert (c, {".d", ".h"}); |
5988 | 984 |
23573
1b4f4ec53b4a
use new script to tag fixed bugs in tests
John W. Eaton <jwe@octave.org>
parents:
23572
diff
changeset
|
985 %!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
|
986 %!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
|
987 %!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
|
988 %!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
|
989 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
990 %!error cellfun (1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
991 %!error cellfun ("isclass", 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
992 %!error cellfun ("size", 1) |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
993 %!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
|
994 %!error cellfun (@sin, {[]}, "UniformOuput") |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
995 %!error cellfun (@sin, {[]}, "ErrorHandler") |
5988 | 996 */ |
997 | |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
998 // 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
|
999 // 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
|
1000 // handle the nargout = 0 case. |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1001 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1002 DEFMETHOD (arrayfun, interp, args, nargout, |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1003 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
|
1004 @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
|
1005 @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
|
1006 @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
|
1007 @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
|
1008 @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
|
1009 @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
|
1010 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1011 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
|
1012 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1013 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
|
1014 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
|
1015 directly. |
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 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
|
1018 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
|
1019 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
|
1020 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
|
1021 @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
|
1022 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
|
1023 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1024 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
|
1025 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
|
1026 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
|
1027 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
|
1028 example: |
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 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1031 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1032 arrayfun (@@atan2, [1, 0], [0, 1]) |
22699
2100cd2e1be0
doc: Clarify behavior of size (bug #49478).
Rik <rik@octave.org>
parents:
22489
diff
changeset
|
1033 @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
|
1034 @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
|
1035 @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
|
1036 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1037 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
|
1038 @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
|
1039 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
|
1040 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
|
1041 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
|
1042 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
|
1043 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1044 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1045 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1046 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
|
1047 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1048 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1049 [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
|
1050 [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
|
1051 [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
|
1052 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1053 @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
|
1054 @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
|
1055 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1056 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
|
1057 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
|
1058 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1059 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1060 @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 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1062 [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
|
1063 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1064 A = |
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 [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
|
1067 [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
|
1068 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1069 B = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1070 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1071 [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
|
1072 [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
|
1073 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1074 C = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1075 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1076 [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
|
1077 [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
|
1078 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1079 @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
|
1080 @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
|
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 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
|
1083 @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
|
1084 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
|
1085 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
|
1086 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
|
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 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1089 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
|
1090 @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
|
1091 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1092 @noindent |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1093 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
|
1094 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
|
1095 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
|
1096 @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
|
1097 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
|
1098 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
|
1099 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
|
1100 example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1101 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1102 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1103 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1104 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
|
1105 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
|
1106 "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
|
1107 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1108 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1109 [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
|
1110 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1111 @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
|
1112 @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
|
1113 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1114 @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
|
1115 @end deftypefn */) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1116 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1117 int nargin = args.length (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1118 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1119 if (nargin < 2) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1120 print_usage (); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1121 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1122 octave_value_list retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1123 int nargout1 = (nargout < 1 ? 1 : nargout); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1124 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
|
1125 octave_value func = args(0); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1126 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1127 symbol_table& symtab = interp.get_symbol_table (); |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1128 |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1129 if (func.is_string ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1130 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1131 // 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
|
1132 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
|
1133 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1134 if (! valid_identifier (name)) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1135 { |
18862
6825522c25e4
maint: Use names beginning and ending with "__" for internal only functions.
Rik <rik@octave.org>
parents:
18812
diff
changeset
|
1136 std::string fcn_name = unique_symbol_name ("__arrayfun_fcn__"); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1137 std::string fname = "function y = " + fcn_name + "(x) y = "; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1138 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1139 octave_function *ptr_func |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1140 = extract_function (args(0), "arrayfun", fcn_name, |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1141 fname, "; endfunction"); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1142 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
1143 if (ptr_func) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1144 func = octave_value (ptr_func, true); |
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 else |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1147 { |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1148 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
|
1149 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1150 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
|
1151 error_with_id ("Octave:invalid-input-arg", |
16010
c5d548e4101f
* cellfun.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
16004
diff
changeset
|
1152 "arrayfun: invalid function NAME: %s", |
c5d548e4101f
* cellfun.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
16004
diff
changeset
|
1153 name.c_str ()); |
13234
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 symbol_table_lookup = true; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1156 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1157 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1158 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1159 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
|
1160 || func.is_function ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1161 { |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1162 // 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
|
1163 // 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
|
1164 // 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
|
1165 |
18678
6113e0c6920b
maint: Clean up extra spaces before/after parentheses.
Rik <rik@octave.org>
parents:
18112
diff
changeset
|
1166 if (! symbol_table_lookup) |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1167 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1168 if (func.is_function_handle ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1169 { |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
1170 octave_fcn_handle *f = func.fcn_handle_value (); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1171 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1172 // Overloaded function handles need to check the type of the |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1173 // arguments for each element of the array, so they cannot be |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1174 // optimized this way. |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1175 if (f -> is_overloaded ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1176 goto nevermind; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1177 } |
19861
19755f4fc851
maint: Cleanup C++ code to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
1178 octave_value f |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1179 = 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
|
1180 |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1181 if (f.is_defined ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1182 func = f; |
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 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1185 nevermind: |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1186 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1187 bool uniform_output = true; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1188 octave_value error_handler; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1189 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23592
diff
changeset
|
1190 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
|
1191 error_handler); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1192 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1193 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
|
1194 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1195 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
|
1196 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
|
1197 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1198 octave_idx_type k = 1; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1199 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1200 dim_vector fdims (1, 1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1201 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1202 // 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
|
1203 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1204 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
|
1205 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1206 inputs[j] = args(j+1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1207 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
|
1208 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1209 if (! mask[j]) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1210 inputlist(j) = inputs[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 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1213 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
|
1214 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1215 if (mask[j]) |
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 fdims = inputs[j].dims (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1218 k = inputs[j].numel (); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1219 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1220 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
|
1221 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1222 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
|
1223 error_with_id ("Octave:invalid-input-arg", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1224 "arrayfun: dimensions mismatch"); |
13234
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 break; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1227 } |
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 |
21743
f4d7d0eb5b0c
use namespace for unwind_protect class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
1230 octave::unwind_protect frame; |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1231 frame.protect_var (buffer_error_messages); |
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 if (error_handler.is_defined ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1234 buffer_error_messages++; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1235 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1236 // Apply functions. |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1237 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1238 if (uniform_output) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1239 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1240 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
|
1241 idx_list.front ().resize (1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1242 std::string idx_type = "("; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1243 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1244 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
|
1245 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1246 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
|
1247 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1248 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
|
1249 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1250 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
|
1251 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1252 if (mask[j]) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1253 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
|
1254 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1255 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1256 const octave_value_list tmp |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1257 = get_output_list (count, nargout, inputlist, func, |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1258 error_handler); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1259 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1260 if (nargout > 0 && tmp.length () < nargout) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1261 error_with_id ("Octave:invalid-fun-call", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1262 "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
|
1263 |
22777
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1264 if (nargout > 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1265 || (nargout == 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1266 && 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
|
1267 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1268 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
|
1269 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1270 if (num_to_copy > nargout1) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1271 num_to_copy = nargout1; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1272 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1273 if (count == 0) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1274 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1275 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
|
1276 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1277 if (tmp(j).is_defined ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1278 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1279 octave_value val = tmp(j); |
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 if (val.numel () == 1) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1282 retv[j] = val.resize (fdims); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1283 else |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1284 error_with_id ("Octave:invalid-fun-call", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1285 "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
|
1286 } |
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 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1289 else |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1290 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1291 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
|
1292 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1293 if (tmp(j).is_defined ()) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1294 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1295 octave_value val = tmp(j); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1296 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1297 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
|
1298 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1299 if (val.numel () == 1) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1300 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1301 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
|
1302 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
|
1303 idx_type, idx_list, val); |
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 else |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1306 error_with_id ("Octave:invalid-fun-call", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1307 "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
|
1308 } |
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 } |
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 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1313 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1314 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1315 retval.resize (nargout1); |
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 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
|
1318 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1319 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
|
1320 retval(j) = NDArray (fdims); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1321 else |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1322 retval(j) = retv[j]; |
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 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1325 else |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1326 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1327 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
|
1328 idx_list.front ().resize (1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1329 std::string idx_type = "("; |
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 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
|
1332 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1333 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
|
1334 results[j].resize (fdims, Matrix ()); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1335 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1336 bool have_some_output = false; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1337 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1338 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
|
1339 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1340 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
|
1341 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1342 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
|
1343 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1344 if (mask[j]) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1345 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
|
1346 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1347 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1348 const octave_value_list tmp |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1349 = get_output_list (count, nargout, inputlist, func, |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1350 error_handler); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1351 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1352 if (nargout > 0 && tmp.length () < nargout) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1353 error_with_id ("Octave:invalid-fun-call", |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1354 "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
|
1355 |
22777
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1356 if (nargout > 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1357 || (nargout == 0 |
4a31bd79d7e8
maint: Correct spacing around if and opening parentheses of condition.
Rik <rik@octave.org>
parents:
22755
diff
changeset
|
1358 && 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
|
1359 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1360 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
|
1361 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1362 if (num_to_copy > nargout1) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1363 num_to_copy = nargout1; |
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 if (num_to_copy > 0) |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1366 have_some_output = true; |
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 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
|
1369 results[j](count) = tmp(j); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1370 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1371 } |
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 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
|
1374 { |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1375 retval.resize (nargout1); |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1376 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1377 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
|
1378 retval(j) = results[j]; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1379 } |
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 else |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1383 error_with_id ("Octave:invalid-fun-call", |
16010
c5d548e4101f
* cellfun.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
16004
diff
changeset
|
1384 "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
|
1385 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1386 return retval; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1387 } |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1388 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1389 /* |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1390 %!function r = __f11 (x) |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1391 %! global __arrayfun_test_num_outputs__; |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1392 %! __arrayfun_test_num_outputs__ = nargout; |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1393 %! r = x; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1394 %!endfunction |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1395 |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1396 %!function __f01 (x) |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1397 %! global __arrayfun_test_num_outputs__; |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1398 %! __arrayfun_test_num_outputs__ = nargout; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1399 %!endfunction |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1400 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1401 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1402 %! global __arrayfun_test_num_outputs__; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1403 %! arrayfun (@__f11, {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__, 0); |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1405 %! x = arrayfun (@__f11, {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1406 %! 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
|
1407 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1408 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1409 %! global __arrayfun_test_num_outputs__; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1410 %! arrayfun (@__f01, {1}); |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1411 %! 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
|
1412 |
21581
6fab85c1538f
maint: Follow Octave conventions for use of semicolon in BIST tests.
Rik <rik@octave.org>
parents:
21580
diff
changeset
|
1413 %!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
|
1414 |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1415 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1416 %! 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
|
1417 %! 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
|
1418 %! 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
|
1419 %! 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
|
1420 |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1421 %!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
|
1422 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1423 ## 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
|
1424 %!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
|
1425 %! z = S; |
14085
4e8f23ccadce
test: Use internal prefix "__" for %!functions to avoid polluting workspace
Rik <octave@nomad.inbox5.com>
parents:
14076
diff
changeset
|
1426 %!endfunction |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1427 ## 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
|
1428 ## 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
|
1429 %!test |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21562
diff
changeset
|
1430 %! 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
|
1431 %!error |
21580
ecce63c99c3f
maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents:
21562
diff
changeset
|
1432 %! 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
|
1433 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1434 %! 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
|
1435 %! assert (A, [false, true]); |
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 (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
|
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 (@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
|
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 |
14854
5ae9f0f77635
maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents:
14846
diff
changeset
|
1443 %! 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
|
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 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1446 ## 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
|
1447 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1448 %! 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
|
1449 %! assert (A, true); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
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,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
|
1452 %! 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
|
1453 %!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
|
1454 %! 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
|
1455 %! assert (A, true); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1456 %!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
|
1457 %! y = true; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1458 %! 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
|
1459 %! assert (A, true); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1460 %!test # Three ouptut 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
|
1461 %! [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
|
1462 %! 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
|
1463 %! 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
|
1464 %! 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
|
1465 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1466 ## 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
|
1467 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1468 %! 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
|
1469 %! assert (A, [false, true]); |
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], "UniformOutput", 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) 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
|
1475 %! assert (A, {false, true, false, true}); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1476 %!test # Three ouptut 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
|
1477 %! [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
|
1478 %! 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
|
1479 %! 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
|
1480 %! 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
|
1481 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1482 %! 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
|
1483 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1484 %! 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
|
1485 %! 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
|
1486 %! 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
|
1487 %! 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
|
1488 %! assert (A.index, 1); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1489 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1490 %! 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
|
1491 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1492 %! 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
|
1493 %! 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
|
1494 %! 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
|
1495 %! 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
|
1496 %! assert (A.index, 1); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1497 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1498 ## 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
|
1499 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1500 %! 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
|
1501 %! assert (A, [false, true]); |
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; 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
|
1504 %! 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
|
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], [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
|
1507 %! 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
|
1508 %! assert (isequal (A{2}, [4, 5, 6])); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1509 %!test # Three ouptut 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
|
1510 %! [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
|
1511 %! 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
|
1512 %! 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
|
1513 %! 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
|
1514 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1515 %! 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
|
1516 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1517 %! 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
|
1518 %! 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
|
1519 %! 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
|
1520 %! 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
|
1521 %! 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
|
1522 %! 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
|
1523 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1524 %! 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
|
1525 %! "UniformOutput", true, "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1526 %! 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
|
1527 %! 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
|
1528 %! 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
|
1529 %! 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
|
1530 %! 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
|
1531 %! 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
|
1532 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1533 ## 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
|
1534 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1535 %! 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
|
1536 %! 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
|
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, ["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
|
1539 %! assert (A, [false; 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", "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
|
1542 %! assert (A, {"abc", "def"}); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1543 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1544 %! 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
|
1545 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1546 %! 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
|
1547 %! assert (B, true); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1548 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1549 ## 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
|
1550 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1551 %! 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
|
1552 %! 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
|
1553 %! assert (A, true); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1554 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1555 %! 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
|
1556 %! 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
|
1557 %! assert (A, true); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1558 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1559 %! 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
|
1560 %! 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
|
1561 %! 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
|
1562 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1563 %! 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
|
1564 %! 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
|
1565 %! 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
|
1566 %! 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
|
1567 %! 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
|
1568 %! assert (A.index, 1); |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1569 %!test # Overwriting setting of "UniformOutput" true |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1570 %! 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
|
1571 %! "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1572 %! 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
|
1573 %! 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
|
1574 %! 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
|
1575 %! 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
|
1576 %! assert (A.index, 1); |
13234
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1577 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22716
diff
changeset
|
1578 ## 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
|
1579 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1580 %! 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
|
1581 %! assert (A, [true, false]); |
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}, "UniformOutput", true); |
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", false); |
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) 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
|
1590 %! 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
|
1591 %! 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
|
1592 %! 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
|
1593 %! 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
|
1594 %! 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
|
1595 %!test |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
17199
diff
changeset
|
1596 %! 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
|
1597 %! "UniformOutput", true, "ErrorHandler", @__arrayfunerror); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1598 %! 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
|
1599 %! 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
|
1600 %! 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
|
1601 %! 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
|
1602 %! 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
|
1603 */ |
e066d173aae6
improve compatibility of arrayfun for nargout = 0 case
John W. Eaton <jwe@octave.org>
parents:
13231
diff
changeset
|
1604 |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1605 static void |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1606 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
|
1607 const Array<int>& dimv, |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1608 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
|
1609 Array<int>& perm) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1610 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
1611 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
|
1612 int maxd = dv.ndims (); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1613 celldv = dv; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1614 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
|
1615 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
|
1616 if (maxd > dv.ndims ()) |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1617 celldv.resize (maxd, 1); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1618 arraydv = celldv; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1619 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1620 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
|
1621 |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10291
diff
changeset
|
1622 perm.clear (maxd, 1); |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1623 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
|
1624 { |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1625 int k = dimv(i) - 1; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1626 if (k < 0) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
1627 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
|
1628 |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
1629 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
|
1630 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
|
1631 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1632 sing[k] = true; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1633 perm(i) = k; |
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 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1636 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
|
1637 if (! sing[k]) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1638 perm(i++) = k; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1639 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1640 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
|
1641 if (sing[i]) |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1642 celldv(i) = 1; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1643 else |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1644 arraydv(i) = 1; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1645 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1646 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1647 template <typename NDA> |
10756
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1648 static inline typename NDA::element_type |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1649 do_num2cell_elem (const NDA& array, octave_idx_type i) |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1650 { return array(i); } |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1651 |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1652 static inline Cell |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1653 do_num2cell_elem (const Cell& array, octave_idx_type i) |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1654 { return Cell (array(i)); } |
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1655 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1656 template <typename NDA> |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1657 static Cell |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1658 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
|
1659 { |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23576
diff
changeset
|
1660 if (dimv.isempty ()) |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1661 { |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1662 Cell retval (array.dims ()); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1663 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
|
1664 for (octave_idx_type i = 0; i < nel; i++) |
10756
d808eb829d48
optimize num2cell on structs
Jaroslav Hajek <highegg@gmail.com>
parents:
10711
diff
changeset
|
1665 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
|
1666 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1667 return retval; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1668 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1669 else |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1670 { |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1671 dim_vector celldv, arraydv; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1672 Array<int> perm; |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1673 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
|
1674 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1675 NDA parray = array.permute (perm); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1676 |
18100
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17893
diff
changeset
|
1677 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
|
1678 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
|
1679 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
|
1680 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1681 Cell retval (celldv); |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1682 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
|
1683 { |
9731 | 1684 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
|
1685 } |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1686 |
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1687 return retval; |
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 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1691 // 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
|
1692 // 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
|
1693 // internal dims method. |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1694 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1695 static dim_vector |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1696 get_object_dims (octave_value& obj) |
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 dim_vector retval; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1699 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1700 Matrix m = obj.size (); |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1701 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1702 int n = m.numel (); |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1703 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1704 retval.resize (n); |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1705 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1706 for (int i = 0; i < n; i++) |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1707 retval(i) = m(i); |
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 return retval; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1710 } |
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 static Cell |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1713 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
|
1714 { |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1715 Cell retval; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1716 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
1717 // 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
|
1718 // method is not const. |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1719 octave_value array = obj; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1720 |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23576
diff
changeset
|
1721 if (! dimv.isempty ()) |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1722 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
|
1723 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1724 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
|
1725 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1726 retval.resize (dv); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1727 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1728 octave_value_list idx (1); |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1729 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1730 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
|
1731 { |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1732 octave_quit (); |
13695
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1733 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1734 idx(0) = double (i+1); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1735 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20918
diff
changeset
|
1736 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
|
1737 } |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1738 |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1739 return retval; |
348857854c52
correctly handle multidimensional objects in num2cell
John W. Eaton <jwe@octave.org>
parents:
13329
diff
changeset
|
1740 } |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1741 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
1742 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
|
1743 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
|
1744 @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
|
1745 @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
|
1746 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
|
1747 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1748 If @var{dim} is defined, the value @var{C} is of dimension 1 in this |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1749 dimension and the elements of @var{A} are placed into @var{C} in slices. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1750 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
|
1751 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1752 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1753 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1754 num2cell ([1,2;3,4]) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1755 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1756 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1757 [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
|
1758 [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
|
1759 [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
|
1760 [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
|
1761 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1762 num2cell ([1,2;3,4],1) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1763 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1764 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1765 [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
|
1766 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1767 3 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1768 [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
|
1769 2 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1770 4 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1771 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1772 @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
|
1773 @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
|
1774 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
1775 @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
|
1776 @end deftypefn */) |
5451 | 1777 { |
20897
9aad16a799c9
maint: Replace argc variable name with nargin in C++ code.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
1778 int nargin = args.length (); |
5451 | 1779 |
1780 if (nargin < 1 || nargin > 2) | |
5823 | 1781 print_usage (); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1782 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1783 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
1784 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1785 octave_value array = args(0); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1786 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1787 Array<int> dimv; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1788 if (nargin > 1) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1789 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
|
1790 |
23579
c20a0fa91c0c
maint: Deprecate is_bool_type and replace with islogical.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
1791 if (array.islogical ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1792 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
|
1793 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
|
1794 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
|
1795 else if (array.isnumeric ()) |
5451 | 1796 { |
23580
2230f9e10fb3
maint: Deprecate is_integer_type and replace with isinteger.
Rik <rik@octave.org>
parents:
23579
diff
changeset
|
1797 if (array.isinteger ()) |
9678
c929f09457b7
rewrite num2cell for speed-up + a few associated fixes
Jaroslav Hajek <highegg@gmail.com>
parents:
9622
diff
changeset
|
1798 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1799 if (array.is_int8_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1800 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
|
1801 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
|
1802 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
|
1803 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
|
1804 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
|
1805 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
|
1806 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
|
1807 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
|
1808 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
|
1809 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
|
1810 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
|
1811 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
|
1812 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
|
1813 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
|
1814 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
|
1815 } |
23581
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23580
diff
changeset
|
1816 else if (array.iscomplex ()) |
20804
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 if (array.is_single_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1819 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
|
1820 else |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1821 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
|
1822 } |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1823 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1824 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1825 if (array.is_single_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1826 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
|
1827 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1828 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
|
1829 } |
5451 | 1830 } |
23587
0c468af9dc00
maint: Deprecate is_object and replace with isobject.
Rik <rik@octave.org>
parents:
23586
diff
changeset
|
1831 else if (array.isobject ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1832 retval = do_object2cell (array, dimv); |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23583
diff
changeset
|
1833 else if (array.isstruct ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1834 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
|
1835 else if (array.iscell ()) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
1836 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
|
1837 else |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
20980
diff
changeset
|
1838 err_wrong_type_arg ("num2cell", array); |
5451 | 1839 |
1840 return retval; | |
1841 } | |
1842 | |
5988 | 1843 /* |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
1844 %!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
|
1845 %!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
|
1846 %!assert (num2cell ([1,2;3,4], 2), {[1,2];[3,4]}) |
5988 | 1847 */ |
1848 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1849 static bool |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1850 mat2cell_mismatch (const dim_vector& dv, |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1851 const Array<octave_idx_type> *d, int nd) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1852 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1853 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1854 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1855 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
|
1856 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
|
1857 s += d[i](j); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1858 |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1859 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
|
1860 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1861 if (s != r) |
21399
8017ce5b2a6e
Avoid 1-th, 2-th, ... in error message of mat2cell dim mismatch (bug #47330)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21317
diff
changeset
|
1862 error ("mat2cell: mismatch on dimension %d (%d != %d)", i+1, r, s); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1863 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1864 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1865 return false; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1866 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1867 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1868 template <typename container> |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
1869 static void |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1870 prepare_idx (container *idx, int idim, int nd, |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1871 const Array<octave_idx_type>* d) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1872 { |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23449
diff
changeset
|
1873 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
|
1874 if (nidx == 1) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1875 idx[0] = idx_vector::colon; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1876 else |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1877 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1878 octave_idx_type l = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1879 for (octave_idx_type i = 0; i < nidx; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1880 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1881 octave_idx_type u = l + d[idim](i); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1882 idx[i] = idx_vector (l, u); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1883 l = u; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1884 } |
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 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1887 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1888 // 2D specialization, works for Array, Sparse and octave_map. |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1889 // Uses 1D or 2D indexing. |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1890 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1891 template <typename Array2D> |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1892 static Cell |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1893 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
|
1894 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1895 NoAlias<Cell> retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1896 assert (nd == 1 || nd == 2); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1897 assert (a.ndims () == 2); |
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 if (mat2cell_mismatch (a.dims (), d, nd)) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1900 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1901 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
1902 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
|
1903 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
|
1904 retval.clear (nridx, ncidx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1905 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1906 int ivec = -1; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1907 if (a.rows () > 1 && a.cols () == 1 && ncidx == 1) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1908 ivec = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1909 else if (a.rows () == 1 && nridx == 1 && nd == 2) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1910 ivec = 1; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1911 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1912 if (ivec >= 0) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1913 { |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
1914 // 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
|
1915 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
|
1916 octave_idx_type nidx = (ivec == 0 ? nridx : ncidx); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1917 for (octave_idx_type i = 0; i < nidx; i++) |
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 octave_idx_type u = l + d[ivec](i); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1920 retval(i) = a.index (idx_vector (l, u)); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1921 l = u; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1922 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1923 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1924 else |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1925 { |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
1926 // General 2D case. Use 2D indexing. |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1927 OCTAVE_LOCAL_BUFFER (idx_vector, ridx, nridx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1928 prepare_idx (ridx, 0, nd, d); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1929 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1930 OCTAVE_LOCAL_BUFFER (idx_vector, cidx, ncidx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1931 prepare_idx (cidx, 1, nd, d); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1932 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1933 for (octave_idx_type j = 0; j < ncidx; j++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1934 for (octave_idx_type i = 0; i < nridx; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1935 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1936 octave_quit (); |
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 retval(i,j) = a.index (ridx[i], cidx[j]); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1939 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1940 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1941 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1942 return retval; |
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 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
1945 // Nd case. Works for Arrays and octave_map. |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1946 // Uses Nd indexing. |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1947 |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
1948 template <typename ArrayND> |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1949 Cell |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1950 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
|
1951 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1952 NoAlias<Cell> retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1953 assert (nd >= 1); |
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 if (mat2cell_mismatch (a.dims (), d, nd)) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1956 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1957 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1958 dim_vector rdv = dim_vector::alloc (nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1959 OCTAVE_LOCAL_BUFFER (octave_idx_type, nidx, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1960 octave_idx_type idxtot = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1961 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1962 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
1963 rdv(i) = nidx[i] = d[i].numel (); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1964 idxtot += nidx[i]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1965 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1966 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1967 retval.clear (rdv); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1968 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1969 OCTAVE_LOCAL_BUFFER (idx_vector, xidx, idxtot); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1970 OCTAVE_LOCAL_BUFFER (idx_vector *, idx, nd); |
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 idxtot = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1973 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1974 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1975 idx[i] = xidx + idxtot; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1976 prepare_idx (idx[i], i, nd, d); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1977 idxtot += nidx[i]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1978 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1979 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1980 OCTAVE_LOCAL_BUFFER_INIT (octave_idx_type, ridx, nd, 0); |
23534
b6498c088fca
maint: Don't write '> >' for declaration of templates that use templates.
Rik <rik@octave.org>
parents:
23473
diff
changeset
|
1981 NoAlias< Array<idx_vector>> ra_idx |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
1982 (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
|
1983 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1984 for (octave_idx_type j = 0; j < retval.numel (); j++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1985 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1986 octave_quit (); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1987 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1988 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1989 ra_idx(i) = idx[i][ridx[i]]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1990 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1991 retval(j) = a.index (ra_idx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1992 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1993 rdv.increment_index (ridx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1994 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1995 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
1996 return retval; |
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 // Dispatcher. |
21139
538b57866b90
consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents:
21127
diff
changeset
|
2000 template <typename ArrayND> |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2001 Cell |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2002 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
|
2003 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2004 if (a.ndims () == 2 && nd <= 2) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2005 return do_mat2cell_2d (a, d, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2006 else |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2007 return do_mat2cell_nd (a, d, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2008 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2009 |
21751
b571fc85953f
maint: Use two spaces after period to indicate sentence break.
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
2010 // 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
|
2011 // Uses Nd indexing. |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2012 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2013 Cell |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2014 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
|
2015 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2016 NoAlias<Cell> retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2017 assert (nd >= 1); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2018 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2019 if (mat2cell_mismatch (a.dims (), d, nd)) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2020 return retval; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2021 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2022 dim_vector rdv = dim_vector::alloc (nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2023 OCTAVE_LOCAL_BUFFER (octave_idx_type, nidx, nd); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2024 octave_idx_type idxtot = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2025 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2026 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
2027 rdv(i) = nidx[i] = d[i].numel (); |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2028 idxtot += nidx[i]; |
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 retval.clear (rdv); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2032 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2033 OCTAVE_LOCAL_BUFFER (octave_value, xidx, idxtot); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2034 OCTAVE_LOCAL_BUFFER (octave_value *, idx, 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 idxtot = 0; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2037 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2038 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2039 idx[i] = xidx + idxtot; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2040 prepare_idx (idx[i], i, nd, d); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2041 idxtot += nidx[i]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2042 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2043 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2044 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
|
2045 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
|
2046 octave_value::magic_colon_t); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2047 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2048 for (octave_idx_type j = 0; j < retval.numel (); j++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2049 { |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2050 octave_quit (); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2051 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2052 for (int i = 0; i < nd; i++) |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2053 ra_idx(i) = idx[i][ridx[i]]; |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2054 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2055 retval(j) = a.do_index_op (ra_idx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2056 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2057 rdv.increment_index (ridx); |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2058 } |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2059 |
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2060 return retval; |
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 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
2063 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
|
2064 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
|
2065 @deftypefn {} {@var{C} =} mat2cell (@var{A}, @var{m}, @var{n}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2066 @deftypefnx {} {@var{C} =} mat2cell (@var{A}, @var{d1}, @var{d2}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2067 @deftypefnx {} {@var{C} =} mat2cell (@var{A}, @var{r}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2068 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
|
2069 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2070 If @var{A} is 2-D, then it is required that |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2071 @code{sum (@var{m}) == size (@var{A}, 1)} and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2072 @code{sum (@var{n}) == size (@var{A}, 2)}. Similarly, if @var{A} is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2073 multi-dimensional and the number of dimensional arguments is equal to the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2074 dimensions of @var{A}, then it is required that |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2075 @code{sum (@var{di}) == size (@var{A}, i)}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2076 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2077 Given a single dimensional argument @var{r}, the other dimensional |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2078 arguments are assumed to equal @code{size (@var{A},@var{i})}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2079 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2080 An example of the use of mat2cell is |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2081 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2082 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2083 mat2cell (reshape (1:16,4,4), [3,1], [3,1]) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2084 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2085 @{ |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2086 [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
|
2087 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2088 1 5 9 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2089 2 6 10 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2090 3 7 11 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2091 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2092 [2,1] = |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2093 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2094 4 8 12 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2095 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2096 [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
|
2097 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2098 13 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2099 14 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2100 15 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2101 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2102 [2,2] = 16 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2103 @} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2104 @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
|
2105 @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
|
2106 @end deftypefn */) |
5784 | 2107 { |
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
|
2108 int nargin = args.length (); |
5784 | 2109 |
2110 if (nargin < 2) | |
7038 | 2111 print_usage (); |
5784 | 2112 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
2113 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
2114 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2115 // Prepare indices. |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2116 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
|
2117 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2118 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
|
2119 d[i-1] = args(i).octave_idx_type_vector_value (true); |
5784 | 2120 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2121 octave_value a = args(0); |
23583
b7747a2c88b2
maint: Deprecate is_sparse_type and replace with issparse.
Rik <rik@octave.org>
parents:
23582
diff
changeset
|
2122 bool sparse = a.issparse (); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2123 if (sparse && nargin > 3) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2124 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
|
2125 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2126 switch (a.builtin_type ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2127 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2128 case btyp_double: |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2129 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2130 if (sparse) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2131 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
|
2132 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2133 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
|
2134 } |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2135 break; |
5784 | 2136 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2137 case btyp_complex: |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2138 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2139 if (sparse) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2140 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
|
2141 nargin-1); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2142 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2143 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
|
2144 } |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2145 break; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2146 |
22197
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2147 #define BTYP_BRANCH(X, Y) \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2148 case btyp_ ## X: \ |
e43d83253e28
refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents:
22094
diff
changeset
|
2149 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
|
2150 break |
5784 | 2151 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2152 BTYP_BRANCH (float, float_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2153 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
|
2154 BTYP_BRANCH (bool, bool_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2155 BTYP_BRANCH (char, char_array); |
5784 | 2156 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2157 BTYP_BRANCH (int8, int8_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2158 BTYP_BRANCH (int16, int16_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2159 BTYP_BRANCH (int32, int32_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2160 BTYP_BRANCH (int64, int64_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2161 BTYP_BRANCH (uint8, uint8_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2162 BTYP_BRANCH (uint16, uint16_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2163 BTYP_BRANCH (uint32, uint32_array); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2164 BTYP_BRANCH (uint64, uint64_array); |
5784 | 2165 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2166 BTYP_BRANCH (cell, cell); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2167 BTYP_BRANCH (struct, map); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2168 |
10786
146a97c3bc97
some optimizations for mat2cell
Jaroslav Hajek <highegg@gmail.com>
parents:
10756
diff
changeset
|
2169 #undef BTYP_BRANCH |
5784 | 2170 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2171 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
|
2172 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
|
2173 break; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2174 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2175 default: |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2176 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
|
2177 break; |
5784 | 2178 } |
2179 | |
2180 return retval; | |
2181 } | |
2182 | |
2183 /* | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2184 %!test |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2185 %! 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
|
2186 %! 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
|
2187 %! assert (c, {[1,6,11;2,7,12;3,8,13],[16;17;18];[4,9,14;5,10,15],[19;20]}); |
5784 | 2188 |
2189 %!test | |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2190 %! x = "abcdefghij"; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2191 %! 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
|
2192 %! empty1by0str = resize ("", 1, 0); |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14366
diff
changeset
|
2193 %! assert (c, {empty1by0str,"abcd","ef",empty1by0str,"ghij",empty1by0str}); |
5784 | 2194 */ |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2195 |
9740
78ac37d73557
fix cellslices to handle empty ranges with non-positive bounds
Jaroslav Hajek <highegg@gmail.com>
parents:
9731
diff
changeset
|
2196 // 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
|
2197 template <typename NDA> |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
2198 static Cell |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
2199 do_cellslices_nda (const NDA& array, |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
2200 const Array<octave_idx_type>& lb, |
10125 | 2201 const Array<octave_idx_type>& ub, |
2202 int dim = -1) | |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2203 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20172
diff
changeset
|
2204 octave_idx_type n = lb.numel (); |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2205 Cell retval (1, n); |
23592
80e3bfb7bd5a
maint: Deprecate is_vector and replace with isvector.
Rik <rik@octave.org>
parents:
23587
diff
changeset
|
2206 if (array.isvector () && (dim == -1 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11570
diff
changeset
|
2207 || (dim == 0 && array.columns () == 1) |
10125 | 2208 || (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
|
2209 { |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2210 for (octave_idx_type i = 0; i < n; i++) |
9740
78ac37d73557
fix cellslices to handle empty ranges with non-positive bounds
Jaroslav Hajek <highegg@gmail.com>
parents:
9731
diff
changeset
|
2211 retval(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
|
2212 } |
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2213 else |
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2214 { |
10125 | 2215 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
|
2216 int ndims = dv.ndims (); |
10125 | 2217 if (dim < 0) |
2218 dim = dv.first_non_singleton (); | |
2219 ndims = std::max (ndims, dim + 1); | |
2220 | |
11570
57632dea2446
attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
2221 Array<idx_vector> idx (dim_vector (ndims, 1), idx_vector::colon); |
10125 | 2222 |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2223 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
|
2224 { |
10125 | 2225 idx(dim) = idx_vector (lb(i) - 1, ub(i)); |
2226 retval(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
|
2227 } |
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2228 } |
8b263623d0f3
have cellslices index the last dim of n-d arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
9042
diff
changeset
|
2229 |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2230 return retval; |
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2231 } |
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2232 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
2233 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
|
2234 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
|
2235 @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
|
2236 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
|
2237 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
|
2238 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
|
2239 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2240 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
|
2241 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2242 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2243 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2244 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
|
2245 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
|
2246 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
|
2247 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
|
2248 endfor |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2249 @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
|
2250 @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
|
2251 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2252 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
|
2253 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
|
2254 @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
|
2255 @end deftypefn */) |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2256 { |
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2257 int nargin = args.length (); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2258 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2259 if (nargin < 3 || nargin > 4) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2260 print_usage (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2261 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2262 octave_value x = args(0); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2263 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
|
2264 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
|
2265 int dim = -1; |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2266 if (nargin == 4) |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2267 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2268 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
|
2269 if (dim < 0) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2270 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
|
2271 } |
10125 | 2272 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2273 if (lb.numel () != ub.numel ()) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2274 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
|
2275 |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2276 Cell retcell; |
23583
b7747a2c88b2
maint: Deprecate is_sparse_type and replace with issparse.
Rik <rik@octave.org>
parents:
23582
diff
changeset
|
2277 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
|
2278 { |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2279 // specialize for some dense arrays. |
23579
c20a0fa91c0c
maint: Deprecate is_bool_type and replace with islogical.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
2280 if (x.islogical ()) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2281 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
|
2282 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2283 else if (x.is_char_matrix ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2284 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
|
2285 lb, ub, dim); |
23580
2230f9e10fb3
maint: Deprecate is_integer_type and replace with isinteger.
Rik <rik@octave.org>
parents:
23579
diff
changeset
|
2286 else if (x.isinteger ()) |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2287 { |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2288 if (x.is_int8_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2289 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
|
2290 lb, ub, dim); |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2291 else if (x.is_int16_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2292 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
|
2293 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2294 else if (x.is_int32_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2295 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
|
2296 lb, ub, dim); |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2297 else if (x.is_int64_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2298 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
|
2299 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2300 else if (x.is_uint8_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2301 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
|
2302 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2303 else if (x.is_uint16_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2304 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
|
2305 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2306 else if (x.is_uint32_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2307 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
|
2308 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2309 else if (x.is_uint64_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2310 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
|
2311 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2312 } |
23581
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23580
diff
changeset
|
2313 else if (x.iscomplex ()) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2314 { |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2315 if (x.is_single_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2316 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
|
2317 lb, ub, dim); |
20560
56fee8f84fe7
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20535
diff
changeset
|
2318 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2319 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
|
2320 lb, ub, dim); |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2321 } |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2322 else |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2323 { |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2324 if (x.is_single_type ()) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2325 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
|
2326 lb, ub, dim); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2327 else |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2328 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
|
2329 lb, ub, dim); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2330 } |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2331 } |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2332 else |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2333 { |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2334 // generic code. |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2335 octave_idx_type n = lb.numel (); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2336 retcell = Cell (1, n); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2337 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
|
2338 int ndims = dv.ndims (); |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2339 if (dim < 0) |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2340 dim = dv.first_non_singleton (); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2341 ndims = std::max (ndims, dim + 1); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2342 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
|
2343 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
|
2344 { |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2345 idx(dim) = Range (lb(i), ub(i)); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2346 retcell(i) = x.do_index_op (idx); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
2347 } |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2348 } |
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2349 |
21127
df7891224709
maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
2350 return ovl (retcell); |
8985
193804a4f82f
add cellslices function
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
2351 } |
10122
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2352 |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2353 /* |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2354 %!test |
9d1a14e12431
Update docs and add tests for container functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
10075
diff
changeset
|
2355 %! m = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12]; |
10125 | 2356 %! 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
|
2357 %! 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
|
2358 */ |
10963
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2359 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14854
diff
changeset
|
2360 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
|
2361 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
|
2362 @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
|
2363 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
|
2364 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2365 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
|
2366 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2367 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2368 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2369 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
|
2370 for i = 1:numel (X) |
22716
c2f0e687471e
doc: Improve docstring for cellindexmat().
Rik <rik@octave.org>
parents:
22699
diff
changeset
|
2371 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
|
2372 endfor |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
2373 @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
|
2374 @end example |
22716
c2f0e687471e
doc: Improve docstring for cellindexmat().
Rik <rik@octave.org>
parents:
22699
diff
changeset
|
2375 |
c2f0e687471e
doc: Improve docstring for cellindexmat().
Rik <rik@octave.org>
parents:
22699
diff
changeset
|
2376 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
|
2377 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
|
2378 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
|
2379 @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
|
2380 @end deftypefn */) |
10963
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2381 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2382 if (args.length () == 0) |
10963
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2383 print_usage (); |
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2384 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2385 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
|
2386 |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20897
diff
changeset
|
2387 NoAlias<Cell> y (x.dims ()); |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2388 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
|
2389 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
|
2390 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2391 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
|
2392 { |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2393 octave_quit (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2394 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2395 octave_value tmp = x(i); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2396 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2397 y(i) = tmp.do_index_op (idx); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2398 } |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2399 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20756
diff
changeset
|
2400 return octave_value (y); |
10963
0d7624852beb
implement cellindexmat function
Jaroslav Hajek <highegg@gmail.com>
parents:
10846
diff
changeset
|
2401 } |