Mercurial > hg > octave-jordi
annotate src/ov-bool-mat.cc @ 8345:c777f3ce02d8
smarter conversion lookup
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Tue, 25 Nov 2008 14:04:55 +0100 |
parents | 82be108cc558 |
children | 25bc2d31e1bf |
rev | line source |
---|---|
2871 | 1 /* |
2 | |
7017 | 3 Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, |
4 2006, 2007 John W. Eaton | |
2871 | 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. | |
2871 | 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/>. | |
2871 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 #include <config.h> | |
26 #endif | |
27 | |
3503 | 28 #include <iostream> |
4726 | 29 #include <vector> |
2901 | 30 |
2871 | 31 #include "lo-ieee.h" |
32 #include "mx-base.h" | |
33 | |
34 #include "gripes.h" | |
35 #include "oct-obj.h" | |
36 #include "ops.h" | |
3219 | 37 #include "ov-base.h" |
38 #include "ov-base-mat.h" | |
39 #include "ov-base-mat.cc" | |
2871 | 40 #include "ov-bool.h" |
41 #include "ov-bool-mat.h" | |
42 #include "ov-re-mat.h" | |
43 #include "pr-output.h" | |
44 | |
4687 | 45 #include "byte-swap.h" |
46 #include "ls-oct-ascii.h" | |
47 #include "ls-hdf5.h" | |
48 #include "ls-utils.h" | |
49 | |
4513 | 50 template class octave_base_matrix<boolNDArray>; |
2871 | 51 |
3219 | 52 DEFINE_OCTAVE_ALLOCATOR (octave_bool_matrix); |
2871 | 53 |
4612 | 54 DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_bool_matrix, |
55 "bool matrix", "logical"); | |
2871 | 56 |
5759 | 57 static octave_base_value * |
58 default_numeric_conversion_function (const octave_base_value& a) | |
2871 | 59 { |
60 CAST_CONV_ARG (const octave_bool_matrix&); | |
61 | |
4668 | 62 return new octave_matrix (NDArray (v.bool_array_value ())); |
2871 | 63 } |
64 | |
8345
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
65 octave_base_value::type_conv_info |
2871 | 66 octave_bool_matrix::numeric_conversion_function (void) const |
67 { | |
8345
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
68 return octave_base_value::type_conv_info (default_numeric_conversion_function, |
c777f3ce02d8
smarter conversion lookup
Jaroslav Hajek <highegg@gmail.com>
parents:
7789
diff
changeset
|
69 octave_matrix::static_type_id ()); |
2871 | 70 } |
71 | |
5759 | 72 octave_base_value * |
2871 | 73 octave_bool_matrix::try_narrowing_conversion (void) |
74 { | |
5759 | 75 octave_base_value *retval = 0; |
2871 | 76 |
4513 | 77 if (matrix.ndims () == 2) |
78 { | |
79 boolMatrix bm = matrix.matrix_value (); | |
2871 | 80 |
5275 | 81 octave_idx_type nr = bm.rows (); |
82 octave_idx_type nc = bm.cols (); | |
4513 | 83 |
84 if (nr == 1 && nc == 1) | |
85 retval = new octave_bool (bm (0, 0)); | |
86 } | |
2871 | 87 |
88 return retval; | |
89 } | |
90 | |
91 bool | |
92 octave_bool_matrix::valid_as_scalar_index (void) const | |
93 { | |
5775 | 94 // FIXME |
2871 | 95 return false; |
96 } | |
97 | |
98 double | |
99 octave_bool_matrix::double_value (bool) const | |
100 { | |
4102 | 101 double retval = lo_ieee_nan_value (); |
2871 | 102 |
4455 | 103 if (rows () > 0 && columns () > 0) |
104 { | |
5781 | 105 gripe_implicit_conversion ("Octave:array-as-scalar", |
106 "bool matrix", "real scalar"); | |
4455 | 107 |
108 retval = matrix (0, 0); | |
109 } | |
2871 | 110 else |
111 gripe_invalid_conversion ("bool matrix", "real scalar"); | |
112 | |
113 return retval; | |
114 } | |
115 | |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
116 float |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
117 octave_bool_matrix::float_value (bool) const |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
118 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
119 float retval = lo_ieee_float_nan_value (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
120 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
121 if (rows () > 0 && columns () > 0) |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
122 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
123 gripe_implicit_conversion ("Octave:array-as-scalar", |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
124 "bool matrix", "real scalar"); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
125 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
126 retval = matrix (0, 0); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
127 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
128 else |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
129 gripe_invalid_conversion ("bool matrix", "real scalar"); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
130 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
131 return retval; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
132 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
133 |
2871 | 134 Complex |
135 octave_bool_matrix::complex_value (bool) const | |
136 { | |
4102 | 137 double tmp = lo_ieee_nan_value (); |
138 | |
139 Complex retval (tmp, tmp); | |
2871 | 140 |
4455 | 141 if (rows () > 0 && columns () > 0) |
142 { | |
5781 | 143 gripe_implicit_conversion ("Octave:array-as-scalar", |
144 "bool matrix", "complex scalar"); | |
4455 | 145 |
146 retval = matrix (0, 0); | |
147 } | |
2871 | 148 else |
149 gripe_invalid_conversion ("bool matrix", "complex scalar"); | |
150 | |
151 return retval; | |
152 } | |
153 | |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
154 FloatComplex |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
155 octave_bool_matrix::float_complex_value (bool) const |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
156 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
157 float tmp = lo_ieee_float_nan_value (); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
158 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
159 FloatComplex retval (tmp, tmp); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
160 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
161 if (rows () > 0 && columns () > 0) |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
162 { |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
163 gripe_implicit_conversion ("Octave:array-as-scalar", |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
164 "bool matrix", "complex scalar"); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
165 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
166 retval = matrix (0, 0); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
167 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
168 else |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
169 gripe_invalid_conversion ("bool matrix", "complex scalar"); |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
170 |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
171 return retval; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
172 } |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
173 |
4457 | 174 octave_value |
5279 | 175 octave_bool_matrix::convert_to_str_internal (bool pad, bool force, |
176 char type) const | |
4457 | 177 { |
4844 | 178 octave_value tmp = octave_value (array_value ()); |
5279 | 179 return tmp.convert_to_str (pad, force, type); |
4457 | 180 } |
181 | |
4643 | 182 void |
183 octave_bool_matrix::print_raw (std::ostream& os, | |
184 bool pr_as_read_syntax) const | |
185 { | |
186 octave_print_internal (os, matrix, pr_as_read_syntax, | |
187 current_print_indent_level ()); | |
188 } | |
189 | |
4687 | 190 bool |
6974 | 191 octave_bool_matrix::save_ascii (std::ostream& os) |
4687 | 192 { |
193 dim_vector d = dims (); | |
194 if (d.length () > 2) | |
195 { | |
196 NDArray tmp = array_value (); | |
197 os << "# ndims: " << d.length () << "\n"; | |
198 | |
5275 | 199 for (int i = 0; i < d.length (); i++) |
4687 | 200 os << " " << d (i); |
201 | |
202 os << "\n" << tmp; | |
203 } | |
204 else | |
205 { | |
206 // Keep this case, rather than use generic code above for backward | |
207 // compatiability. Makes load_ascii much more complex!! | |
208 os << "# rows: " << rows () << "\n" | |
209 << "# columns: " << columns () << "\n"; | |
210 | |
211 Matrix tmp = matrix_value (); | |
212 | |
213 os << tmp; | |
214 } | |
215 | |
216 return true; | |
217 } | |
218 | |
219 bool | |
220 octave_bool_matrix::load_ascii (std::istream& is) | |
221 { | |
222 bool success = true; | |
223 | |
5099 | 224 string_vector keywords (2); |
4687 | 225 |
5099 | 226 keywords[0] = "ndims"; |
227 keywords[1] = "rows"; | |
4687 | 228 |
5099 | 229 std::string kw; |
5275 | 230 octave_idx_type val = 0; |
4687 | 231 |
5099 | 232 if (extract_keyword (is, keywords, kw, val, true)) |
4687 | 233 { |
5099 | 234 if (kw == "ndims") |
235 { | |
5275 | 236 int mdims = static_cast<int> (val); |
4687 | 237 |
5099 | 238 if (mdims >= 0) |
4687 | 239 { |
5099 | 240 dim_vector dv; |
241 dv.resize (mdims); | |
242 | |
243 for (int i = 0; i < mdims; i++) | |
244 is >> dv(i); | |
245 | |
6717 | 246 if (is) |
247 { | |
248 boolNDArray btmp (dv); | |
249 | |
250 if (btmp.is_empty ()) | |
251 matrix = btmp; | |
252 else | |
253 { | |
254 NDArray tmp(dv); | |
255 is >> tmp; | |
5099 | 256 |
6717 | 257 if (is) |
258 { | |
259 for (octave_idx_type i = 0; i < btmp.nelem (); i++) | |
260 btmp.elem (i) = (tmp.elem (i) != 0.); | |
261 | |
262 matrix = btmp; | |
263 } | |
264 else | |
265 { | |
266 error ("load: failed to load matrix constant"); | |
267 success = false; | |
268 } | |
269 } | |
270 } | |
271 else | |
4687 | 272 { |
6717 | 273 error ("load: failed to extract dimensions"); |
4687 | 274 success = false; |
275 } | |
276 } | |
277 else | |
5099 | 278 { |
6717 | 279 error ("load: failed to extract number of dimensions"); |
5099 | 280 success = false; |
281 } | |
4687 | 282 } |
5099 | 283 else if (kw == "rows") |
4687 | 284 { |
5275 | 285 octave_idx_type nr = val; |
286 octave_idx_type nc = 0; | |
5099 | 287 |
288 if (nr >= 0 && extract_keyword (is, "columns", nc) && nc >= 0) | |
289 { | |
290 if (nr > 0 && nc > 0) | |
291 { | |
292 Matrix tmp (nr, nc); | |
293 is >> tmp; | |
6717 | 294 if (is) |
295 { | |
296 boolMatrix btmp (nr, nc); | |
297 for (octave_idx_type j = 0; j < nc; j++) | |
298 for (octave_idx_type i = 0; i < nr; i++) | |
299 btmp.elem (i,j) = (tmp.elem (i, j) != 0.); | |
300 | |
301 matrix = btmp; | |
302 } | |
303 else | |
5099 | 304 { |
305 error ("load: failed to load matrix constant"); | |
306 success = false; | |
307 } | |
308 } | |
309 else if (nr == 0 || nc == 0) | |
310 matrix = boolMatrix (nr, nc); | |
311 else | |
312 panic_impossible (); | |
313 } | |
314 else | |
315 { | |
316 error ("load: failed to extract number of rows and columns"); | |
317 success = false; | |
318 } | |
4687 | 319 } |
5099 | 320 else |
321 panic_impossible (); | |
322 } | |
323 else | |
324 { | |
325 error ("load: failed to extract number of rows and columns"); | |
326 success = false; | |
4687 | 327 } |
328 | |
329 return success; | |
330 } | |
331 | |
332 bool | |
333 octave_bool_matrix::save_binary (std::ostream& os, bool& /* save_as_floats */) | |
334 { | |
335 | |
336 dim_vector d = dims (); | |
337 if (d.length() < 1) | |
338 return false; | |
339 | |
340 // Use negative value for ndims to differentiate with old format!! | |
5828 | 341 int32_t tmp = - d.length(); |
5760 | 342 os.write (reinterpret_cast<char *> (&tmp), 4); |
5275 | 343 for (int i = 0; i < d.length (); i++) |
4687 | 344 { |
345 tmp = d(i); | |
5760 | 346 os.write (reinterpret_cast<char *> (&tmp), 4); |
4687 | 347 } |
348 | |
349 boolNDArray m = bool_array_value (); | |
350 bool *mtmp = m.fortran_vec (); | |
5275 | 351 octave_idx_type nel = m.nelem (); |
4687 | 352 OCTAVE_LOCAL_BUFFER (char, htmp, nel); |
353 | |
5275 | 354 for (octave_idx_type i = 0; i < nel; i++) |
4687 | 355 htmp[i] = (mtmp[i] ? 1 : 0); |
356 | |
357 os.write (htmp, nel); | |
358 | |
359 return true; | |
360 } | |
361 | |
362 bool | |
363 octave_bool_matrix::load_binary (std::istream& is, bool swap, | |
364 oct_mach_info::float_format /* fmt */) | |
365 { | |
5828 | 366 int32_t mdims; |
5760 | 367 if (! is.read (reinterpret_cast<char *> (&mdims), 4)) |
4687 | 368 return false; |
369 if (swap) | |
4944 | 370 swap_bytes<4> (&mdims); |
4687 | 371 if (mdims >= 0) |
372 return false; | |
373 | |
374 // mdims is negative for consistency with other matrices, where it is | |
375 // negative to allow the positive value to be used for rows/cols for | |
376 // backward compatibility | |
377 mdims = - mdims; | |
5828 | 378 int32_t di; |
4687 | 379 dim_vector dv; |
380 dv.resize (mdims); | |
381 | |
382 for (int i = 0; i < mdims; i++) | |
383 { | |
5760 | 384 if (! is.read (reinterpret_cast<char *> (&di), 4)) |
4687 | 385 return false; |
386 if (swap) | |
4944 | 387 swap_bytes<4> (&di); |
4687 | 388 dv(i) = di; |
389 } | |
390 | |
5157 | 391 // Convert an array with a single dimension to be a row vector. |
392 // Octave should never write files like this, other software | |
393 // might. | |
394 | |
395 if (mdims == 1) | |
396 { | |
397 mdims = 2; | |
398 dv.resize (mdims); | |
399 dv(1) = dv(0); | |
400 dv(0) = 1; | |
401 } | |
402 | |
5275 | 403 octave_idx_type nel = dv.numel (); |
4687 | 404 OCTAVE_LOCAL_BUFFER (char, htmp, nel); |
405 if (! is.read (htmp, nel)) | |
406 return false; | |
407 boolNDArray m(dv); | |
408 bool *mtmp = m.fortran_vec (); | |
5275 | 409 for (octave_idx_type i = 0; i < nel; i++) |
4687 | 410 mtmp[i] = (htmp[i] ? 1 : 0); |
411 matrix = m; | |
412 | |
413 return true; | |
414 } | |
415 | |
416 #if defined (HAVE_HDF5) | |
4944 | 417 |
4687 | 418 bool |
419 octave_bool_matrix::save_hdf5 (hid_t loc_id, const char *name, | |
420 bool /* save_as_floats */) | |
421 { | |
4837 | 422 dim_vector dv = dims (); |
423 int empty = save_hdf5_empty (loc_id, name, dv); | |
424 if (empty) | |
4805 | 425 return (empty > 0); |
426 | |
4837 | 427 int rank = dv.length (); |
4687 | 428 hid_t space_hid = -1, data_hid = -1; |
429 bool retval = true; | |
430 boolNDArray m = bool_array_value (); | |
431 | |
4805 | 432 OCTAVE_LOCAL_BUFFER (hsize_t, hdims, rank); |
433 | |
4687 | 434 // Octave uses column-major, while HDF5 uses row-major ordering |
4805 | 435 for (int i = 0; i < rank; i++) |
4837 | 436 hdims[i] = dv (rank-i-1); |
4687 | 437 |
4815 | 438 space_hid = H5Screate_simple (rank, hdims, 0); |
4687 | 439 if (space_hid < 0) return false; |
440 | |
441 data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_HBOOL, space_hid, | |
442 H5P_DEFAULT); | |
443 if (data_hid < 0) | |
444 { | |
445 H5Sclose (space_hid); | |
446 return false; | |
447 } | |
448 | |
5275 | 449 octave_idx_type nel = m.nelem (); |
4687 | 450 bool *mtmp = m.fortran_vec (); |
6276 | 451 OCTAVE_LOCAL_BUFFER (hbool_t, htmp, nel); |
4687 | 452 |
5275 | 453 for (octave_idx_type i = 0; i < nel; i++) |
4687 | 454 htmp[i] = mtmp[i]; |
455 | |
456 retval = H5Dwrite (data_hid, H5T_NATIVE_HBOOL, H5S_ALL, H5S_ALL, | |
4815 | 457 H5P_DEFAULT, htmp) >= 0; |
4687 | 458 |
459 H5Dclose (data_hid); | |
460 H5Sclose (space_hid); | |
4837 | 461 |
4687 | 462 return retval; |
463 } | |
464 | |
465 bool | |
466 octave_bool_matrix::load_hdf5 (hid_t loc_id, const char *name, | |
467 bool /* have_h5giterate_bug */) | |
468 { | |
4837 | 469 bool retval = false; |
470 | |
4805 | 471 dim_vector dv; |
472 int empty = load_hdf5_empty (loc_id, name, dv); | |
473 if (empty > 0) | |
474 matrix.resize(dv); | |
4837 | 475 if (empty) |
476 return (empty > 0); | |
4805 | 477 |
4687 | 478 hid_t data_hid = H5Dopen (loc_id, name); |
479 hid_t space_id = H5Dget_space (data_hid); | |
480 | |
481 hsize_t rank = H5Sget_simple_extent_ndims (space_id); | |
482 | |
483 if (rank < 1) | |
484 { | |
485 H5Dclose (data_hid); | |
486 return false; | |
487 } | |
488 | |
489 OCTAVE_LOCAL_BUFFER (hsize_t, hdims, rank); | |
490 OCTAVE_LOCAL_BUFFER (hsize_t, maxdims, rank); | |
491 | |
492 H5Sget_simple_extent_dims (space_id, hdims, maxdims); | |
493 | |
494 // Octave uses column-major, while HDF5 uses row-major ordering | |
495 if (rank == 1) | |
496 { | |
497 dv.resize (2); | |
498 dv(0) = 1; | |
499 dv(1) = hdims[0]; | |
500 } | |
501 else | |
502 { | |
503 dv.resize (rank); | |
4815 | 504 for (hsize_t i = 0, j = rank - 1; i < rank; i++, j--) |
4687 | 505 dv(j) = hdims[i]; |
506 } | |
507 | |
5275 | 508 octave_idx_type nel = dv.numel (); |
6276 | 509 OCTAVE_LOCAL_BUFFER (hbool_t, htmp, nel); |
6718 | 510 if (H5Dread (data_hid, H5T_NATIVE_HBOOL, H5S_ALL, H5S_ALL, H5P_DEFAULT, htmp) >= 0) |
4687 | 511 { |
512 retval = true; | |
513 | |
514 boolNDArray btmp (dv); | |
5275 | 515 for (octave_idx_type i = 0; i < nel; i++) |
4687 | 516 btmp.elem (i) = htmp[i]; |
517 | |
518 matrix = btmp; | |
519 } | |
520 | |
521 H5Dclose (data_hid); | |
4837 | 522 |
4687 | 523 return retval; |
524 } | |
4944 | 525 |
4687 | 526 #endif |
527 | |
5900 | 528 mxArray * |
529 octave_bool_matrix::as_mxArray (void) const | |
530 { | |
531 mxArray *retval = new mxArray (mxLOGICAL_CLASS, dims (), mxREAL); | |
532 | |
533 bool *pr = static_cast<bool *> (retval->get_data ()); | |
534 | |
6686 | 535 mwSize nel = numel (); |
5900 | 536 |
537 const bool *p = matrix.data (); | |
538 | |
6686 | 539 for (mwIndex i = 0; i < nel; i++) |
5900 | 540 pr[i] = p[i]; |
541 | |
542 return retval; | |
543 } | |
544 | |
2871 | 545 /* |
546 ;;; Local Variables: *** | |
547 ;;; mode: C++ *** | |
548 ;;; End: *** | |
549 */ |