Mercurial > hg > octave-nkf
annotate liboctave/chNDArray.cc @ 8774:b756ce0002db
split implementation and interface in mx-op-defs and MArray-defs
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Tue, 17 Feb 2009 08:38:00 +0100 |
parents | 8af4ba6b4216 |
children | eb63fbe60fab |
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" |
8774
b756ce0002db
split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents:
8750
diff
changeset
|
33 #include "mx-op-defs.h" |
4514 | 34 |
5775 | 35 // FIXME -- this is not quite the right thing. |
4514 | 36 |
4556 | 37 boolNDArray |
4514 | 38 charNDArray::all (int dim) const |
39 { | |
8750
8af4ba6b4216
use new reduction ops for char matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
40 return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_all); |
4514 | 41 } |
42 | |
4556 | 43 boolNDArray |
4514 | 44 charNDArray::any (int dim) const |
45 { | |
8750
8af4ba6b4216
use new reduction ops for char matrices
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
46 return do_mx_red_op<boolMatrix> (*this, dim, mx_inline_any); |
4514 | 47 } |
48 | |
4915 | 49 charNDArray |
5275 | 50 charNDArray::concat (const charNDArray& rb, const Array<octave_idx_type>& ra_idx) |
4915 | 51 { |
4940 | 52 if (rb.numel () > 0) |
5073 | 53 insert (rb, ra_idx); |
54 return *this; | |
4915 | 55 } |
56 | |
57 charNDArray | |
5275 | 58 charNDArray::concat (const NDArray& rb, const Array<octave_idx_type>& ra_idx) |
4758 | 59 { |
4915 | 60 charNDArray tmp (rb.dims ()); |
5275 | 61 octave_idx_type nel = rb.numel (); |
4915 | 62 |
4940 | 63 if (rb.numel () == 0) |
5073 | 64 return *this; |
4915 | 65 |
5275 | 66 for (octave_idx_type i = 0; i < nel; i++) |
4915 | 67 { |
68 double d = rb.elem (i); | |
69 | |
70 if (xisnan (d)) | |
71 { | |
72 (*current_liboctave_error_handler) | |
73 ("invalid conversion from NaN to character"); | |
5073 | 74 return *this; |
4915 | 75 } |
76 else | |
77 { | |
5275 | 78 octave_idx_type ival = NINTbig (d); |
4915 | 79 |
80 if (ival < 0 || ival > UCHAR_MAX) | |
5775 | 81 // FIXME -- is there something |
4915 | 82 // better we could do? Should we warn the user? |
83 ival = 0; | |
84 | |
85 tmp.elem (i) = static_cast<char>(ival); | |
86 } | |
87 } | |
88 | |
5073 | 89 insert (tmp, ra_idx); |
90 return *this; | |
4915 | 91 } |
92 | |
93 charNDArray& | |
5275 | 94 charNDArray::insert (const charNDArray& a, octave_idx_type r, octave_idx_type c) |
4915 | 95 { |
96 Array<char>::insert (a, r, c); | |
97 return *this; | |
98 } | |
99 | |
100 charNDArray& | |
5275 | 101 charNDArray::insert (const charNDArray& a, const Array<octave_idx_type>& ra_idx) |
4915 | 102 { |
103 Array<char>::insert (a, ra_idx); | |
104 return *this; | |
4758 | 105 } |
106 | |
4514 | 107 charMatrix |
108 charNDArray::matrix_value (void) const | |
109 { | |
110 charMatrix retval; | |
111 | |
112 int nd = ndims (); | |
113 | |
114 switch (nd) | |
115 { | |
116 case 1: | |
117 retval = charMatrix (Array2<char> (*this, dimensions(0), 1)); | |
118 break; | |
119 | |
120 case 2: | |
121 retval = charMatrix (Array2<char> (*this, dimensions(0), | |
122 dimensions(1))); | |
123 break; | |
124 | |
125 default: | |
126 (*current_liboctave_error_handler) | |
4770 | 127 ("invalid conversion of charNDArray to charMatrix"); |
4514 | 128 break; |
129 } | |
130 | |
131 return retval; | |
132 } | |
133 | |
4532 | 134 void |
5275 | 135 charNDArray::increment_index (Array<octave_idx_type>& ra_idx, |
4532 | 136 const dim_vector& dimensions, |
137 int start_dimension) | |
138 { | |
139 ::increment_index (ra_idx, dimensions, start_dimension); | |
140 } | |
141 | |
5275 | 142 octave_idx_type |
143 charNDArray::compute_index (Array<octave_idx_type>& ra_idx, | |
4556 | 144 const dim_vector& dimensions) |
145 { | |
146 return ::compute_index (ra_idx, dimensions); | |
147 } | |
148 | |
7620
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
149 charNDArray |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
150 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
|
151 { |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
152 return MArrayN<char>::diag (k); |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
153 } |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7503
diff
changeset
|
154 |
7503
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
155 boolNDArray |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
156 charNDArray::bmap (mapper fcn) const |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
157 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
158 octave_idx_type len = length (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
159 const char *m = fortran_vec(); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
160 boolNDArray result (dims ()); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
161 bool *p = result.fortran_vec (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
162 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
163 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
|
164 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
165 OCTAVE_QUIT; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
166 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
167 p[i] = bool (fcn (m[i])); |
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 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
170 return result; |
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 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
173 NDArray |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
174 charNDArray::dmap (mapper fcn) const |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
175 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
176 octave_idx_type len = length (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
177 const char *m = fortran_vec(); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
178 NDArray result (dims ()); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
179 double *p = result.fortran_vec (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
180 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
181 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
|
182 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
183 OCTAVE_QUIT; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
184 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
185 p[i] = fcn (m[i]); |
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 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
188 return result; |
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 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
191 charNDArray |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
192 charNDArray::smap (mapper fcn) const |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
193 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
194 octave_idx_type len = length (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
195 const char *m = fortran_vec(); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
196 charNDArray result (dims ()); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
197 char *p = result.fortran_vec (); |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
198 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
199 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
|
200 { |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
201 OCTAVE_QUIT; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
202 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
203 p[i] = fcn (m[i]); |
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 |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
206 return result; |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
207 } |
8c32f95c2639
convert mapper functions to new format
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
208 |
6456 | 209 NDS_CMP_OPS(charNDArray, , char, ) |
210 NDS_BOOL_OPS(charNDArray, char, 0) | |
211 | |
212 SND_CMP_OPS(char, , charNDArray, ) | |
213 SND_BOOL_OPS(char, charNDArray, 0) | |
214 | |
215 NDND_CMP_OPS(charNDArray, , charNDArray, ) | |
216 NDND_BOOL_OPS(charNDArray, charNDArray, 0) | |
217 | |
4514 | 218 /* |
219 ;;; Local Variables: *** | |
220 ;;; mode: C++ *** | |
221 ;;; End: *** | |
222 */ |