GNU Octave 7.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
ov-bool-sparse.cc
Go to the documentation of this file.
1////////////////////////////////////////////////////////////////////////
2//
3// Copyright (C) 1998-2022 The Octave Project Developers
4//
5// See the file COPYRIGHT.md in the top-level directory of this
6// distribution or <https://octave.org/copyright/>.
7//
8// This file is part of Octave.
9//
10// Octave is free software: you can redistribute it and/or modify it
11// under the terms of the GNU General Public License as published by
12// the Free Software Foundation, either version 3 of the License, or
13// (at your option) any later version.
14//
15// Octave is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18// GNU General Public License for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with Octave; see the file COPYING. If not, see
22// <https://www.gnu.org/licenses/>.
23//
24////////////////////////////////////////////////////////////////////////
25
26#if defined (HAVE_CONFIG_H)
27# include "config.h"
28#endif
29
30#include <istream>
31#include <ostream>
32#include <vector>
33
34#include "dim-vector.h"
35
36#include "mxarray.h"
37#include "ov-base.h"
38#include "ov-scalar.h"
39#include "ov-bool.h"
40#include "ov-bool-mat.h"
41#include "errwarn.h"
42#include "ops.h"
43#include "oct-locbuf.h"
44
45#include "oct-hdf5.h"
46
47#include "ov-re-sparse.h"
48#include "ov-cx-sparse.h"
49#include "ov-bool-sparse.h"
50
51#include "ov-base-sparse.h"
52#include "ov-base-sparse.cc"
53
55
57 "sparse bool matrix", "logical");
58
59static octave_base_value *
61{
63 = dynamic_cast<const octave_sparse_bool_matrix&> (a);
64
65 return
67}
68
71{
74}
75
78{
79 octave_base_value *retval = nullptr;
80
82 {
83 // Don't use numel, since it can overflow for very large matrices
84 // Note that for the second test, this means it becomes approximative
85 // since it involves a cast to double to avoid issues of overflow
86 if (matrix.rows () == 1 && matrix.cols () == 1)
87 {
88 // Const copy of the matrix, so the right version of () operator used
89 const SparseBoolMatrix tmp (matrix);
90
91 retval = new octave_bool (tmp (0));
92 }
93 else if (matrix.cols () > 0 && matrix.rows () > 0
94 && (double (matrix.byte_size ()) > double (matrix.rows ())
95 * double (matrix.cols ()) * sizeof (bool)))
96 retval = new octave_bool_matrix (matrix.matrix_value ());
97 }
98
99 return retval;
100}
101
102double
104{
105 if (isempty ())
106 err_invalid_conversion ("bool sparse matrix", "real scalar");
107
108 if (numel () > 1)
109 warn_implicit_conversion ("Octave:array-to-scalar",
110 "bool sparse matrix", "real scalar");
111
112 return matrix(0, 0);
113}
114
117{
118 if (rows () == 0 || columns () == 0)
119 err_invalid_conversion ("bool sparse matrix", "complex scalar");
120
121 if (numel () > 1)
122 warn_implicit_conversion ("Octave:array-to-scalar",
123 "bool sparse matrix", "complex scalar");
124
125 return Complex (matrix(0, 0), 0);
126}
127
130 char type) const
131{
133 return tmp.convert_to_str (pad, force, type);
134}
135
136// FIXME: These are inefficient ways of creating full matrices
137
138Matrix
140{
141 return Matrix (matrix.matrix_value ());
142}
143
146{
148}
149
152{
154}
155
158{
159 return NDArray (Matrix (matrix.matrix_value ()));
160}
161
164{
165 charNDArray retval (dims (), 0);
168
169 for (octave_idx_type j = 0; j < nc; j++)
170 for (octave_idx_type i = matrix.cidx (j); i < matrix.cidx (j+1); i++)
171 retval(matrix.ridx (i) + nr * j) = static_cast<char> (matrix.data (i));
172
173 return retval;
174}
175
178{
179 return matrix.matrix_value ();
180}
181
184{
185 return boolNDArray (matrix.matrix_value ());
186}
187
190{
191 return SparseMatrix (this->matrix);
192}
193
196{
197 return SparseComplexMatrix (this->matrix);
198}
199
202{
203 return SparseMatrix (this->matrix);
204}
205
206bool
208{
209 dim_vector dv = this->dims ();
210 if (dv.ndims () < 1)
211 return false;
212
213 // Ensure that additional memory is deallocated
215
216 int nr = dv(0);
217 int nc = dv(1);
218 int nz = nnz ();
219
220 int32_t itmp;
221 // Use negative value for ndims to be consistent with other formats
222 itmp = -2;
223 os.write (reinterpret_cast<char *> (&itmp), 4);
224
225 itmp = nr;
226 os.write (reinterpret_cast<char *> (&itmp), 4);
227
228 itmp = nc;
229 os.write (reinterpret_cast<char *> (&itmp), 4);
230
231 itmp = nz;
232 os.write (reinterpret_cast<char *> (&itmp), 4);
233
234 // add one to the printed indices to go from
235 // zero-based to one-based arrays
236 for (int i = 0; i < nc+1; i++)
237 {
238 octave_quit ();
239 itmp = matrix.cidx (i);
240 os.write (reinterpret_cast<char *> (&itmp), 4);
241 }
242
243 for (int i = 0; i < nz; i++)
244 {
245 octave_quit ();
246 itmp = matrix.ridx (i);
247 os.write (reinterpret_cast<char *> (&itmp), 4);
248 }
249
250 OCTAVE_LOCAL_BUFFER (char, htmp, nz);
251
252 for (int i = 0; i < nz; i++)
253 htmp[i] = (matrix.data (i) ? 1 : 0);
254
255 os.write (htmp, nz);
256
257 return true;
258}
259
260bool
261octave_sparse_bool_matrix::load_binary (std::istream& is, bool swap,
263{
264 int32_t nz, nc, nr, tmp;
265 if (! is.read (reinterpret_cast<char *> (&tmp), 4))
266 return false;
267
268 if (swap)
269 swap_bytes<4> (&tmp);
270
271 if (tmp != -2)
272 error ("load: only 2-D sparse matrices are supported");
273
274 if (! is.read (reinterpret_cast<char *> (&nr), 4))
275 return false;
276 if (! is.read (reinterpret_cast<char *> (&nc), 4))
277 return false;
278 if (! is.read (reinterpret_cast<char *> (&nz), 4))
279 return false;
280
281 if (swap)
282 {
283 swap_bytes<4> (&nr);
284 swap_bytes<4> (&nc);
285 swap_bytes<4> (&nz);
286 }
287
288 SparseBoolMatrix m (static_cast<octave_idx_type> (nr),
289 static_cast<octave_idx_type> (nc),
290 static_cast<octave_idx_type> (nz));
291
292 for (int i = 0; i < nc+1; i++)
293 {
294 octave_quit ();
295 if (! is.read (reinterpret_cast<char *> (&tmp), 4))
296 return false;
297 if (swap)
298 swap_bytes<4> (&tmp);
299 m.cidx (i) = tmp;
300 }
301
302 for (int i = 0; i < nz; i++)
303 {
304 octave_quit ();
305 if (! is.read (reinterpret_cast<char *> (&tmp), 4))
306 return false;
307 if (swap)
308 swap_bytes<4> (&tmp);
309 m.ridx (i) = tmp;
310 }
311
312 if (! is)
313 return false;
314
315 OCTAVE_LOCAL_BUFFER (char, htmp, nz);
316
317 if (! is.read (htmp, nz))
318 return false;
319
320 for (int i = 0; i < nz; i++)
321 m.data(i) = (htmp[i] ? 1 : 0);
322
323 if (! m.indices_ok ())
324 return false;
325
326 matrix = m;
327
328 return true;
329}
330
331bool
333 bool)
334{
335 bool retval = false;
336
337#if defined (HAVE_HDF5)
338
339 dim_vector dv = dims ();
340 int empty = save_hdf5_empty (loc_id, name, dv);
341 if (empty)
342 return (empty > 0);
343
344 // Ensure that additional memory is deallocated
346#if defined (HAVE_HDF5_18)
347 hid_t group_hid = H5Gcreate (loc_id, name, octave_H5P_DEFAULT,
349#else
350 hid_t group_hid = H5Gcreate (loc_id, name, 0);
351#endif
352 if (group_hid < 0)
353 return false;
354
355 hid_t space_hid, data_hid;
356 space_hid = data_hid = -1;
358 octave_idx_type tmp;
359 hsize_t hdims[2];
360
361 space_hid = H5Screate_simple (0, hdims, nullptr);
362 if (space_hid < 0)
363 {
364 H5Gclose (group_hid);
365 return false;
366 }
367#if defined (HAVE_HDF5_18)
368 data_hid = H5Dcreate (group_hid, "nr", H5T_NATIVE_IDX, space_hid,
371#else
372 data_hid = H5Dcreate (group_hid, "nr", H5T_NATIVE_IDX, space_hid,
374#endif
375 if (data_hid < 0)
376 {
377 H5Sclose (space_hid);
378 H5Gclose (group_hid);
379 return false;
380 }
381
382 tmp = m.rows ();
383 retval = H5Dwrite (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL,
385 H5Dclose (data_hid);
386 if (! retval)
387 {
388 H5Sclose (space_hid);
389 H5Gclose (group_hid);
390 return false;
391 }
392
393#if defined (HAVE_HDF5_18)
394 data_hid = H5Dcreate (group_hid, "nc", H5T_NATIVE_IDX, space_hid,
397#else
398 data_hid = H5Dcreate (group_hid, "nc", H5T_NATIVE_IDX, space_hid,
400#endif
401 if (data_hid < 0)
402 {
403 H5Sclose (space_hid);
404 H5Gclose (group_hid);
405 return false;
406 }
407
408 tmp = m.cols ();
409 retval = H5Dwrite (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
410 octave_H5P_DEFAULT, &tmp) >= 0;
411 H5Dclose (data_hid);
412 if (! retval)
413 {
414 H5Sclose (space_hid);
415 H5Gclose (group_hid);
416 return false;
417 }
418
419#if defined (HAVE_HDF5_18)
420 data_hid = H5Dcreate (group_hid, "nz", H5T_NATIVE_IDX, space_hid,
423#else
424 data_hid = H5Dcreate (group_hid, "nz", H5T_NATIVE_IDX, space_hid,
426#endif
427 if (data_hid < 0)
428 {
429 H5Sclose (space_hid);
430 H5Gclose (group_hid);
431 return false;
432 }
433
434 tmp = m.nnz ();
435 retval = H5Dwrite (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
436 octave_H5P_DEFAULT, &tmp) >= 0;
437 H5Dclose (data_hid);
438 if (! retval)
439 {
440 H5Sclose (space_hid);
441 H5Gclose (group_hid);
442 return false;
443 }
444
445 H5Sclose (space_hid);
446
447 hdims[0] = m.cols () + 1;
448 hdims[1] = 1;
449
450 space_hid = H5Screate_simple (2, hdims, nullptr);
451
452 if (space_hid < 0)
453 {
454 H5Gclose (group_hid);
455 return false;
456 }
457
458#if defined (HAVE_HDF5_18)
459 data_hid = H5Dcreate (group_hid, "cidx", H5T_NATIVE_IDX, space_hid,
462#else
463 data_hid = H5Dcreate (group_hid, "cidx", H5T_NATIVE_IDX, space_hid,
465#endif
466 if (data_hid < 0)
467 {
468 H5Sclose (space_hid);
469 H5Gclose (group_hid);
470 return false;
471 }
472
473 octave_idx_type *itmp = m.xcidx ();
474 retval = H5Dwrite (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
475 octave_H5P_DEFAULT, itmp) >= 0;
476 H5Dclose (data_hid);
477 if (! retval)
478 {
479 H5Sclose (space_hid);
480 H5Gclose (group_hid);
481 return false;
482 }
483
484 H5Sclose (space_hid);
485
486 hdims[0] = m.nnz ();
487 hdims[1] = 1;
488
489 space_hid = H5Screate_simple (2, hdims, nullptr);
490
491 if (space_hid < 0)
492 {
493 H5Gclose (group_hid);
494 return false;
495 }
496
497#if defined (HAVE_HDF5_18)
498 data_hid = H5Dcreate (group_hid, "ridx", H5T_NATIVE_IDX, space_hid,
501#else
502 data_hid = H5Dcreate (group_hid, "ridx", H5T_NATIVE_IDX, space_hid,
504#endif
505 if (data_hid < 0)
506 {
507 H5Sclose (space_hid);
508 H5Gclose (group_hid);
509 return false;
510 }
511
512 itmp = m.xridx ();
513 retval = H5Dwrite (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
514 octave_H5P_DEFAULT, itmp) >= 0;
515 H5Dclose (data_hid);
516 if (! retval)
517 {
518 H5Sclose (space_hid);
519 H5Gclose (group_hid);
520 return false;
521 }
522
523#if defined (HAVE_HDF5_18)
524 data_hid = H5Dcreate (group_hid, "data", H5T_NATIVE_HBOOL, space_hid,
527#else
528 data_hid = H5Dcreate (group_hid, "data", H5T_NATIVE_HBOOL, space_hid,
530#endif
531 if (data_hid < 0)
532 {
533 H5Sclose (space_hid);
534 H5Gclose (group_hid);
535 return false;
536 }
537
538 OCTAVE_LOCAL_BUFFER (hbool_t, htmp, m.nnz ());
539 for (int i = 0; i < m.nnz (); i++)
540 htmp[i] = m.xdata(i);
541
542 retval = H5Dwrite (data_hid, H5T_NATIVE_HBOOL, octave_H5S_ALL, octave_H5S_ALL,
543 octave_H5P_DEFAULT, htmp) >= 0;
544 H5Dclose (data_hid);
545 H5Sclose (space_hid);
546 H5Gclose (group_hid);
547
548#else
549 octave_unused_parameter (loc_id);
550 octave_unused_parameter (name);
551
552 warn_save ("hdf5");
553#endif
554
555 return retval;
556}
557
558bool
560{
561 bool retval = false;
562
563#if defined (HAVE_HDF5)
564
565 octave_idx_type nr, nc, nz;
566 hid_t group_hid, data_hid, space_hid;
567 hsize_t rank;
568
569 dim_vector dv;
570 int empty = load_hdf5_empty (loc_id, name, dv);
571 if (empty > 0)
572 matrix.resize (dv);
573 if (empty)
574 return (empty > 0);
575
576#if defined (HAVE_HDF5_18)
577 group_hid = H5Gopen (loc_id, name, octave_H5P_DEFAULT);
578#else
579 group_hid = H5Gopen (loc_id, name);
580#endif
581 if (group_hid < 0) return false;
582
583#if defined (HAVE_HDF5_18)
584 data_hid = H5Dopen (group_hid, "nr", octave_H5P_DEFAULT);
585#else
586 data_hid = H5Dopen (group_hid, "nr");
587#endif
588 space_hid = H5Dget_space (data_hid);
589 rank = H5Sget_simple_extent_ndims (space_hid);
590
591 if (rank != 0)
592 {
593 H5Dclose (data_hid);
594 H5Gclose (group_hid);
595 return false;
596 }
597
598 if (H5Dread (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
600 < 0)
601 {
602 H5Dclose (data_hid);
603 H5Gclose (group_hid);
604 return false;
605 }
606
607 H5Dclose (data_hid);
608
609#if defined (HAVE_HDF5_18)
610 data_hid = H5Dopen (group_hid, "nc", octave_H5P_DEFAULT);
611#else
612 data_hid = H5Dopen (group_hid, "nc");
613#endif
614 space_hid = H5Dget_space (data_hid);
615 rank = H5Sget_simple_extent_ndims (space_hid);
616
617 if (rank != 0)
618 {
619 H5Dclose (data_hid);
620 H5Gclose (group_hid);
621 return false;
622 }
623
624 if (H5Dread (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
626 < 0)
627 {
628 H5Dclose (data_hid);
629 H5Gclose (group_hid);
630 return false;
631 }
632
633 H5Dclose (data_hid);
634
635#if defined (HAVE_HDF5_18)
636 data_hid = H5Dopen (group_hid, "nz", octave_H5P_DEFAULT);
637#else
638 data_hid = H5Dopen (group_hid, "nz");
639#endif
640 space_hid = H5Dget_space (data_hid);
641 rank = H5Sget_simple_extent_ndims (space_hid);
642
643 if (rank != 0)
644 {
645 H5Dclose (data_hid);
646 H5Gclose (group_hid);
647 return false;
648 }
649
650 if (H5Dread (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
652 < 0)
653 {
654 H5Dclose (data_hid);
655 H5Gclose (group_hid);
656 return false;
657 }
658
659 H5Dclose (data_hid);
660
661 SparseBoolMatrix m (static_cast<octave_idx_type> (nr),
662 static_cast<octave_idx_type> (nc),
663 static_cast<octave_idx_type> (nz));
664
665#if defined (HAVE_HDF5_18)
666 data_hid = H5Dopen (group_hid, "cidx", octave_H5P_DEFAULT);
667#else
668 data_hid = H5Dopen (group_hid, "cidx");
669#endif
670 space_hid = H5Dget_space (data_hid);
671 rank = H5Sget_simple_extent_ndims (space_hid);
672
673 if (rank != 2)
674 {
675 H5Sclose (space_hid);
676 H5Dclose (data_hid);
677 H5Gclose (group_hid);
678 return false;
679 }
680
681 OCTAVE_LOCAL_BUFFER (hsize_t, hdims, rank);
682 OCTAVE_LOCAL_BUFFER (hsize_t, maxdims, rank);
683
684 H5Sget_simple_extent_dims (space_hid, hdims, maxdims);
685
686 if (static_cast<int> (hdims[0]) != nc + 1
687 || static_cast<int> (hdims[1]) != 1)
688 {
689 H5Sclose (space_hid);
690 H5Dclose (data_hid);
691 H5Gclose (group_hid);
692 return false;
693 }
694
695 octave_idx_type *itmp = m.xcidx ();
696 if (H5Dread (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
697 octave_H5P_DEFAULT, itmp)
698 < 0)
699 {
700 H5Sclose (space_hid);
701 H5Dclose (data_hid);
702 H5Gclose (group_hid);
703 return false;
704 }
705
706 H5Sclose (space_hid);
707 H5Dclose (data_hid);
708
709#if defined (HAVE_HDF5_18)
710 data_hid = H5Dopen (group_hid, "ridx", octave_H5P_DEFAULT);
711#else
712 data_hid = H5Dopen (group_hid, "ridx");
713#endif
714 space_hid = H5Dget_space (data_hid);
715 rank = H5Sget_simple_extent_ndims (space_hid);
716
717 if (rank != 2)
718 {
719 H5Sclose (space_hid);
720 H5Dclose (data_hid);
721 H5Gclose (group_hid);
722 return false;
723 }
724
725 H5Sget_simple_extent_dims (space_hid, hdims, maxdims);
726
727 if (static_cast<int> (hdims[0]) != nz
728 || static_cast<int> (hdims[1]) != 1)
729 {
730 H5Sclose (space_hid);
731 H5Dclose (data_hid);
732 H5Gclose (group_hid);
733 return false;
734 }
735
736 itmp = m.xridx ();
737 if (H5Dread (data_hid, H5T_NATIVE_IDX, octave_H5S_ALL, octave_H5S_ALL,
738 octave_H5P_DEFAULT, itmp) < 0)
739 {
740 H5Sclose (space_hid);
741 H5Dclose (data_hid);
742 H5Gclose (group_hid);
743 return false;
744 }
745
746 H5Sclose (space_hid);
747 H5Dclose (data_hid);
748
749#if defined (HAVE_HDF5_18)
750 data_hid = H5Dopen (group_hid, "data", octave_H5P_DEFAULT);
751#else
752 data_hid = H5Dopen (group_hid, "data");
753#endif
754 space_hid = H5Dget_space (data_hid);
755 rank = H5Sget_simple_extent_ndims (space_hid);
756
757 if (rank != 2)
758 {
759 H5Sclose (space_hid);
760 H5Dclose (data_hid);
761 H5Gclose (group_hid);
762 return false;
763 }
764
765 H5Sget_simple_extent_dims (space_hid, hdims, maxdims);
766
767 if (static_cast<int> (hdims[0]) != nz
768 || static_cast<int> (hdims[1]) != 1)
769 {
770 H5Sclose (space_hid);
771 H5Dclose (data_hid);
772 H5Gclose (group_hid);
773 return false;
774 }
775
776 OCTAVE_LOCAL_BUFFER (hbool_t, htmp, nz);
777
778 if (H5Dread (data_hid, H5T_NATIVE_HBOOL, octave_H5S_ALL, octave_H5S_ALL,
779 octave_H5P_DEFAULT, htmp) >= 0
780 && m.indices_ok ())
781 {
782 retval = true;
783
784 for (int i = 0; i < nz; i++)
785 m.xdata(i) = htmp[i];
786
787 matrix = m;
788 }
789
790 H5Sclose (space_hid);
791 H5Dclose (data_hid);
792 H5Gclose (group_hid);
793
794#else
795 octave_unused_parameter (loc_id);
796 octave_unused_parameter (name);
797
798 warn_load ("hdf5");
799#endif
800
801 return retval;
802}
803
804mxArray *
806{
807 mwSize nz = nzmax ();
808 mwSize nr = rows ();
809 mwSize nc = columns ();
810
811 mxArray *retval = new mxArray (interleaved, mxLOGICAL_CLASS, nr, nc, nz,
812 mxREAL);
813
814 mxLogical *pd = static_cast<mxLogical *> (retval->get_data ());
815 mwIndex *ir = retval->get_ir ();
816
817 const bool *pdata = matrix.data ();
818 const octave_idx_type *pridx = matrix.ridx ();
819
820 for (mwIndex i = 0; i < nz; i++)
821 {
822 pd[i] = pdata[i];
823
824 ir[i] = pridx[i];
825 }
826
827 mwIndex *jc = retval->get_jc ();
828
829 const octave_idx_type *pcidx = matrix.cidx ();
830
831 for (mwIndex i = 0; i < nc + 1; i++)
832 jc[i] = pcidx[i];
833
834 return retval;
835}
void swap_bytes< 4 >(void *ptr)
Definition: byte-swap.h:63
Definition: dMatrix.h:42
OCTAVE_API boolMatrix matrix_value(void) const
Definition: boolSparse.cc:248
octave_idx_type rows(void) const
Definition: Sparse.h:351
T * data(void)
Definition: Sparse.h:574
std::size_t byte_size(void) const
Definition: Sparse.h:364
OCTAVE_API void resize(octave_idx_type r, octave_idx_type c)
Definition: Sparse.cc:991
T * xdata(void)
Definition: Sparse.h:576
octave_idx_type nnz(void) const
Actual number of nonzero terms.
Definition: Sparse.h:339
octave_idx_type * xridx(void)
Definition: Sparse.h:589
octave_idx_type * ridx(void)
Definition: Sparse.h:583
octave_idx_type * cidx(void)
Definition: Sparse.h:596
octave_idx_type * xcidx(void)
Definition: Sparse.h:602
Sparse< T, Alloc > maybe_compress(bool remove_zeros=false)
Definition: Sparse.h:531
octave_idx_type cols(void) const
Definition: Sparse.h:352
bool indices_ok(void) const
Definition: Sparse.h:749
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:94
octave_idx_type ndims(void) const
Number of dimensions.
Definition: dim-vector.h:257
mwIndex * get_jc(void) const
Definition: mxarray.h:634
mwIndex * get_ir(void) const
Definition: mxarray.h:632
void * get_data(void) const
Definition: mxarray.h:497
octave_idx_type nnz(void) const
octave_idx_type nzmax(void) const
octave_idx_type numel(void) const
octave_idx_type columns(void) const
Definition: ov-base.h:355
OCTINTERP_API void warn_load(const char *type) const
Definition: ov-base.cc:1152
octave_idx_type rows(void) const
Definition: ov-base.h:348
friend class octave_value
Definition: ov-base.h:256
OCTINTERP_API void warn_save(const char *type) const
Definition: ov-base.cc:1161
bool isempty(void) const
Definition: ov-base.h:391
bool save_hdf5(octave_hdf5_id loc_id, const char *name, bool save_as_floats)
double double_value(bool=false) const
SparseComplexMatrix sparse_complex_matrix_value(bool=false) const
NDArray array_value(bool=false) const
Complex complex_value(bool=false) const
bool load_binary(std::istream &is, bool swap, octave::mach_info::float_format fmt)
charNDArray char_array_value(bool=false) const
ComplexMatrix complex_matrix_value(bool=false) const
boolMatrix bool_matrix_value(bool=false) const
ComplexNDArray complex_array_value(bool=false) const
octave_value as_double(void) const
octave_value convert_to_str_internal(bool pad, bool force, char type) const
SparseMatrix sparse_matrix_value(bool=false) const
octave_base_value * try_narrowing_conversion(void)
SparseBoolMatrix sparse_bool_matrix_value(bool=false) const
bool save_binary(std::ostream &os, bool save_as_floats)
Matrix matrix_value(bool=false) const
bool load_hdf5(octave_hdf5_id loc_id, const char *name)
type_conv_info numeric_conversion_function(void) const
mxArray * as_mxArray(bool interleaved) const
boolNDArray bool_array_value(bool=false) const
static int static_type_id(void)
Definition: ov-re-sparse.h:162
octave_value convert_to_str(bool pad=false, bool force=false, char type='\'') const
Definition: ov.h:1411
const octave_hdf5_id octave_H5P_DEFAULT
const octave_hdf5_id octave_H5S_ALL
void error(const char *fmt,...)
Definition: error.cc:980
void err_invalid_conversion(const std::string &from, const std::string &to)
Definition: errwarn.cc:71
void warn_implicit_conversion(const char *id, const char *from, const char *to)
Definition: errwarn.cc:344
QString name
int save_hdf5_empty(octave_hdf5_id loc_id, const char *name, const dim_vector &d)
Definition: ls-hdf5.cc:1251
int load_hdf5_empty(octave_hdf5_id loc_id, const char *name, dim_vector &d)
Definition: ls-hdf5.cc:1307
void mxArray
Definition: mex.h:58
class OCTAVE_API NDArray
Definition: mx-fwd.h:38
class OCTAVE_API boolNDArray
Definition: mx-fwd.h:42
class OCTAVE_API Matrix
Definition: mx-fwd.h:31
class OCTAVE_API ComplexMatrix
Definition: mx-fwd.h:32
class OCTAVE_API SparseMatrix
Definition: mx-fwd.h:55
class OCTAVE_API ComplexNDArray
Definition: mx-fwd.h:39
class OCTAVE_API SparseComplexMatrix
Definition: mx-fwd.h:56
std::complex< double > Complex
Definition: oct-cmplx.h:33
int64_t octave_hdf5_id
#define H5T_NATIVE_IDX
Definition: oct-hdf5.h:42
#define OCTAVE_LOCAL_BUFFER(T, buf, size)
Definition: oct-locbuf.h:44
bool Vsparse_auto_mutate
Definition: ov-base.cc:103
#define DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(t, n, c)
Definition: ov-base.h:222
static octave_base_value * default_numeric_conversion_function(const octave_base_value &a)