Mercurial > hg > octave-lyh
annotate liboctave/chNDArray.cc @ 8750:8af4ba6b4216
use new reduction ops for char matrices
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Mon, 16 Feb 2009 07:57:03 +0100 |
parents | 36594d5bbe13 |
children | b756ce0002db |
rev | line source |
---|---|
4514 | 1 // N-D Array manipulations. |
2 /* | |
3 | |
7017 | 4 Copyright (C) 2003, 2004, 2005, 2006, 2007 John W. Eaton |
4514 | 5 |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
4514 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
4514 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 #include <config.h> | |
26 #endif | |
27 | |
4588 | 28 #include "Array-util.h" |
4514 | 29 #include "chNDArray.h" |
30 #include "mx-base.h" | |
31 #include "lo-ieee.h" | |
4915 | 32 #include "lo-mappers.h" |
4514 | 33 |
5775 | 34 // FIXME -- this is not quite the right thing. |
4514 | 35 |
4556 | 36 boolNDArray |
4514 | 37 charNDArray::all (int dim) const |
38 { | |
8750
8af4ba6b4216
use new reduction ops for char matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
39 return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all); |
4514 | 40 } |
41 | |
4556 | 42 boolNDArray |
4514 | 43 charNDArray::any (int dim) const |
44 { | |
8750
8af4ba6b4216
use new reduction ops for char matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
45 return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any); |
4514 | 46 } |
47 | |
4915 | 48 charNDArray |
5275 | 49 charNDArray::concat (const charNDArray& rb, const Array<octave_idx_type>& ra_idx) |
4915 | 50 { |
4940 | 51 if (rb.numel () > 0) |
5073 | 52 insert (rb, ra_idx); |
53 return *this; | |
4915 | 54 } |
55 | |
56 charNDArray | |
5275 | 57 charNDArray::concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx) |
4758 | 58 { |
4915 | 59 charNDArray tmp (rb.dims ()); |
5275 | 60 octave_idx_type nel = rb.numel (); |
4915 | 61 |
4940 | 62 if (rb.numel () == 0) |
5073 | 63 return *this; |
4915 | 64 |
5275 | 65 for (octave_idx_type i = 0; i < nel; i++) |
4915 | 66 { |
67 double d = rb.elem (i); | |
68 | |
69 if (xisnan (d)) | |
70 { | |
71 (*current_liboctave_error_handler) | |
72 ("invalid conversion from NaN to character"); | |
5073 | 73 return *this; |
4915 | 74 } |
75 else | |
76 { | |
5275 | 77 octave_idx_type ival = NINTbig (d); |
4915 | 78 |
79 if (ival < 0 || ival > UCHAR_MAX) | |
5775 | 80 // FIXME -- is there something |
4915 | 81 // better we could do? Should we warn the user? |
82 ival = 0; | |
83 | |
84 tmp.elem (i) = static_cast<char>(ival); | |
85 } | |
86 } | |
87 | |
5073 | 88 insert (tmp, ra_idx); |
89 return *this; | |
4915 | 90 } |
91 | |
92 charNDArray& | |
5275 | 93 charNDArray::insert (const charNDArray& a, octave_idx_type r, octave_idx_type c) |
4915 | 94 { |
95 Array<char>::insert (a, r, c); | |
96 return *this; | |
97 } | |
98 | |
99 charNDArray& | |
5275 | 100 charNDArray::insert (const charNDArray& a, const Array<octave_idx_type>& ra_idx) |
4915 | 101 { |
102 Array<char>::insert (a, ra_idx); | |
103 return *this; | |
4758 | 104 } |
105 | |
4514 | 106 charMatrix |
107 charNDArray::matrix_value (void) const | |
108 { | |
109 charMatrix retval; | |
110 | |
111 int nd = ndims (); | |
112 | |
113 switch (nd) | |
114 { | |
115 case 1: | |
116 retval = charMatrix (Array2<char> (*this, dimensions(0), 1)); | |
117 break; | |
118 | |
119 case 2: | |
120 retval = charMatrix (Array2<char> (*this, dimensions(0), | |
121 dimensions(1))); | |
122 break; | |
123 | |
124 default: | |
125 (*current_liboctave_error_handler) | |
4770 | 126 ("invalid conversion of charNDArray to charMatrix"); |
4514 | 127 break; |
128 } | |
129 | |
130 return retval; | |
131 } | |
132 | |
4532 | 133 void |
5275 | 134 charNDArray::increment_index (Array<octave_idx_type>& ra_idx, |
4532 | 135 const dim_vector& dimensions, |
136 int start_dimension) | |
137 { | |
138 ::increment_index (ra_idx, dimensions, start_dimension); | |
139 } | |
140 | |
5275 | 141 octave_idx_type |
142 charNDArray::compute_index (Array<octave_idx_type>& ra_idx, | |
4556 | 143 const dim_vector& dimensions) |
144 { | |
145 return ::compute_index (ra_idx, dimensions); | |
146 } | |
147 | |
7620
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
148 charNDArray |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
149 charNDArray::diag (octave_idx_type k) const |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
150 { |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
151 return MArrayN<char>::diag (k); |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
152 } |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
153 |
7503
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
154 boolNDArray |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
155 charNDArray::bmap (mapper fcn) const |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
156 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
157 octave_idx_type len = length (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
158 const char *m = fortran_vec(); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
159 boolNDArray result (dims ()); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
160 bool *p = result.fortran_vec (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
161 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
162 for (octave_idx_type i = 0; i < len; i++) |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
163 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
164 OCTAVE_QUIT; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
165 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
166 p[i] = bool (fcn (m[i])); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
167 } |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
168 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
169 return result; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
170 } |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
171 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
172 NDArray |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
173 charNDArray::dmap (mapper fcn) const |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
174 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
175 octave_idx_type len = length (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
176 const char *m = fortran_vec(); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
177 NDArray result (dims ()); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
178 double *p = result.fortran_vec (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
179 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
180 for (octave_idx_type i = 0; i < len; i++) |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
181 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
182 OCTAVE_QUIT; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
183 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
184 p[i] = fcn (m[i]); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
185 } |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
186 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
187 return result; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
188 } |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
189 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
190 charNDArray |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
191 charNDArray::smap (mapper fcn) const |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
192 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
193 octave_idx_type len = length (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
194 const char *m = fortran_vec(); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
195 charNDArray result (dims ()); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
196 char *p = result.fortran_vec (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
197 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
198 for (octave_idx_type i = 0; i < len; i++) |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
199 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
200 OCTAVE_QUIT; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
201 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
202 p[i] = fcn (m[i]); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
203 } |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
204 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
205 return result; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
206 } |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
207 |
6456 | 208 NDS_CMP_OPS(charNDArray, , char, ) |
209 NDS_BOOL_OPS(charNDArray, char, 0) | |
210 | |
211 SND_CMP_OPS(char, , charNDArray, ) | |
212 SND_BOOL_OPS(char, charNDArray, 0) | |
213 | |
214 NDND_CMP_OPS(charNDArray, , charNDArray, ) | |
215 NDND_BOOL_OPS(charNDArray, charNDArray, 0) | |
216 | |
4514 | 217 /* |
218 ;;; Local Variables: *** | |
219 ;;; mode: C++ *** | |
220 ;;; End: *** | |
221 */ |