diff src/ov-bool-mat.cc @ 4805:b0d6da24caeb

[project @ 2004-03-02 03:43:15 by jwe]
author jwe
date Tue, 02 Mar 2004 03:43:15 +0000
parents 14dc2267c343
children 2eb844b27953
line wrap: on
line diff
--- a/src/ov-bool-mat.cc
+++ b/src/ov-bool-mat.cc
@@ -344,16 +344,20 @@
 			       bool /* save_as_floats */)
 {
   dim_vector d = dims ();
-  hsize_t hdims[d.length () > 2 ? d.length () : 3];
+  int empty = save_hdf5_empty (loc_id, name, d);
+  if (empty != 0)
+    return (empty > 0);
+
+  int rank = d.length ();
   hid_t space_hid = -1, data_hid = -1;
-  int rank = ( (d (0) == 1) && (d.length () == 2) ? 1 : d.length ());
   bool retval = true;
-
   boolNDArray m = bool_array_value ();
 
+  OCTAVE_LOCAL_BUFFER (hsize_t, hdims, rank);
+
   // Octave uses column-major, while HDF5 uses row-major ordering
-  for (int i = 0, j = d.length() - 1; i < d.length (); i++, j--)
-    hdims[i] = d (j);
+  for (int i = 0; i < rank; i++)
+    hdims[i] = d (rank-i-1);
 
   space_hid = H5Screate_simple (rank, hdims, (hsize_t*) 0);
   if (space_hid < 0) return false;
@@ -385,6 +389,13 @@
 octave_bool_matrix::load_hdf5 (hid_t loc_id, const char *name,
 			       bool /* have_h5giterate_bug */)
 {
+  dim_vector dv;
+  int empty = load_hdf5_empty (loc_id, name, dv);
+  if (empty > 0)
+    matrix.resize(dv);
+  if (empty != 0)
+      return (empty > 0);
+
   bool retval = false;
   hid_t data_hid = H5Dopen (loc_id, name);
   hid_t space_id = H5Dget_space (data_hid);
@@ -402,8 +413,6 @@
 
   H5Sget_simple_extent_dims (space_id, hdims, maxdims);
 
-  dim_vector dv;
-
   // Octave uses column-major, while HDF5 uses row-major ordering
   if (rank == 1)
     {