annotate src/DLD-FUNCTIONS/cellfun.cc @ 5307:4c8a2e4e0717

[project @ 2005-04-26 19:24:27 by jwe]
author jwe
date Tue, 26 Apr 2005 19:24:47 +0000
parents 59592dcbb5d8
children ed08548b9054
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5205
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
1 /*
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
2
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
3 Copyright (C) 2005 Mohamed Kamoun
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
4
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
6
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
10 later version.
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
11
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but WITHOUT
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
15 for more details.
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
16
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, write to the Free
5307
4c8a2e4e0717 [project @ 2005-04-26 19:24:27 by jwe]
jwe
parents: 5205
diff changeset
19 Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
4c8a2e4e0717 [project @ 2005-04-26 19:24:27 by jwe]
jwe
parents: 5205
diff changeset
20 02110-1301, USA.
5205
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
21
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
22 */
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
23
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
25 #include <config.h>
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
26 #endif
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
27
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
28 #include <string>
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
29
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
30 #include "lo-mappers.h"
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
31
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
32 #include "Cell.h"
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
33 #include "defun-dld.h"
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
34 #include "parse.h"
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
35 #include "variables.h"
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
36
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
37 DEFUN_DLD (cellfun, args, ,
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
38 " -*- texinfo -*-\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
39 @deftypefn {Lodable Function} {} cellfun (@var{name}, @var{c})\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
40 @deftypefnx {Lodable Function} {} cellfun (\"isclass\", @var{c}, @var{class})\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
41 @deftypefnx {Lodable Function} {} cellfun (\"size\", @var{c}, @var{k})\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
42 @deftypefnx {Lodable Function} {} cellfun (@var{func}, @var{c})\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
43 \n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
44 Evaluate the function named @var{name} on the elements of the cell array\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
45 @var{c}. Elements in cell_array are passed on to the named function\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
46 individually. The function @var{name} can be one of the functions\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
47 \n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
48 @table @code\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
49 @item isempty\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
50 Return 1 when for non empty elements and 0 for others.\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
51 @item islogical\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
52 Return 1 for logical elements.\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
53 @item isreal\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
54 Return 1 for real elements.\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
55 @item length\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
56 Return a vector of the lengths of cell elements.\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
57 @item dims\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
58 Return the number of dimensions of each element.\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
59 @item prodofsize\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
60 Return the product of dimensions of each element.\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
61 @item size\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
62 Return the size along the @var{k}-th dimension.\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
63 @item isclass\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
64 Return 1 for elements of @var{class}.\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
65 @end table\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
66 \n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
67 Additionally, @code{cellfun} accepts an arbitrary function @var{func}\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
68 in the form of an inline function, function handle, or the name of a\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
69 function (in a character string). The function should take a single\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
70 argument and return a single value, and in the case of a character string\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
71 argument, the argument must be named @var{x}. For example\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
72 \n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
73 @example\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
74 @group\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
75 cellfun (\"tolower(x)\", @{\"Foo\", \"Bar\", \"FooBar\"@})\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
76 @result{} ans = @{\"foo\", \"bar\", \"foobar\"@}\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
77 @end group\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
78 @end example\n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
79 \n\
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
80 @end deftypefn")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
81 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
82 octave_value retval;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
83
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
84 std::string name = "function";
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
85
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
86 octave_function *func = 0;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
87
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
88 int nargin = args.length ();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
89
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
90 if (nargin < 2)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
91 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
92 error ("cellfun: you must supply at least 2 arguments");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
93 print_usage ("cellfun");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
94 return retval;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
95 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
96
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
97 if (args(0).is_function_handle () || args(0).is_inline_function ())
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
98 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
99 func = args(0).function_value ();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
100
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
101 if (error_state)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
102 return retval;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
103 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
104 else if (args(0).is_string ())
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
105 name = args(0).string_value ();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
106 else
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
107 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
108 error ("cellfun: first argument must be a string");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
109 return retval;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
110 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
111
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
112 if (! args(1).is_cell ())
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
113 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
114 error ("cellfun: second argument must be a cell");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
115
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
116 return retval;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
117 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
118
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
119 Cell f_args = args(1).cell_value ();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
120
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
121 int k = f_args.numel ();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
122
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
123 if (name == "isempty")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
124 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
125 boolNDArray result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
126 for (int count = 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
127 result(count) = f_args.elem(count).is_empty();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
128 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
129 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
130 else if (name == "islogical")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
131 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
132 boolNDArray result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
133 for (int count= 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
134 result(count) = f_args.elem(count).is_bool_type ();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
135 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
136 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
137 else if (name == "isreal")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
138 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
139 boolNDArray result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
140 for (int count= 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
141 result(count) = f_args.elem(count).is_real_type ();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
142 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
143 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
144 else if (name == "length")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
145 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
146 NDArray result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
147 for (int count= 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
148 result(count) = double (f_args.elem(count).numel ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
149 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
150 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
151 else if (name == "ndims")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
152 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
153 NDArray result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
154 for (int count = 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
155 result(count) = double ((f_args.elem(count).dims ()).numel ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
156 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
157 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
158 else if (name == "prodofsize")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
159 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
160 NDArray result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
161 for (int count = 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
162 result(count) = double ((f_args.elem(count).dims ()).numel ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
163 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
164 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
165 else if (name == "size")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
166 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
167 if (nargin == 3)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
168 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
169 int d = args(2).nint_value () - 1;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
170
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
171 if (d < 0)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
172 error ("cellfun: third argument must be a postive integer");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
173
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
174 if (!error_state)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
175 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
176 NDArray result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
177 for (int count = 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
178 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
179 dim_vector dv = f_args.elem(count).dims ();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
180 if (d < dv.length ())
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
181 result(count) = double (dv(d));
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
182 else
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
183 result(count) = 1.0;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
184 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
185 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
186 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
187 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
188 else
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
189 error ("Not enough argument for size");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
190 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
191 else if (name == "isclass")
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
192 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
193 if (nargin == 3)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
194 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
195 std::string class_name = args(2).string_value();
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
196 boolNDArray result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
197 for (int count = 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
198 result(count) = (f_args.elem(count).class_name() == class_name);
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
199
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
200 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
201 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
202 else
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
203 error ("Not enough argument for isclass");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
204 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
205 else
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
206 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
207 std::string fcn_name;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
208
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
209 if (! func)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
210 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
211 fcn_name = unique_symbol_name ("__cellfun_fcn_");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
212 std::string fname = "function y = ";
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
213 fname.append (fcn_name);
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
214 fname.append ("(x) y = ");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
215 func = extract_function (args(0), "cellfun", fcn_name, fname,
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
216 "; endfunction");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
217 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
218
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
219 if (! func)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
220 error ("unknown function");
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
221 else
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
222 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
223 Cell result (f_args.dims ());
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
224
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
225 for (int count = 0; count < k ; count++)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
226 {
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
227 octave_value_list tmp
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
228 = func->do_multi_index_op (1, f_args.elem (count));
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
229 result(count) = tmp(0);
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
230
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
231 if (error_state)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
232 break;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
233 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
234
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
235 if (! error_state)
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
236 retval = result;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
237
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
238 if (! fcn_name.empty ())
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
239 clear_function (fcn_name);
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
240 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
241 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
242
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
243 return retval;
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
244 }
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
245
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
246 /*
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
247 ;;; Local Variables: ***
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
248 ;;; mode: C++ ***
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
249 ;;; End: ***
59592dcbb5d8 [project @ 2005-03-15 16:04:56 by jwe]
jwe
parents:
diff changeset
250 */