diff src/ov-re-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 a308566c8b42
children 2eb844b27953
line wrap: on
line diff
--- a/src/ov-re-mat.cc	Fri Feb 27 16:40:59 2004 +0000
+++ b/src/ov-re-mat.cc	Tue Mar 02 03:43:15 2004 +0000
@@ -53,6 +53,7 @@
 #include "byte-swap.h"
 #include "ls-oct-ascii.h"
 #include "ls-utils.h"
+#include "ls-hdf5.h"
 
 #if ! defined (UCHAR_MAX)
 #define UCHAR_MAX 255
@@ -508,17 +509,23 @@
 octave_matrix::save_hdf5 (hid_t loc_id, const char *name, 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;
   NDArray m = 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);
 
-  space_hid = H5Screate_simple (rank, hdims, (hsize_t*) 0);
   if (space_hid < 0) return false;
 
   hid_t save_type_hid = H5T_NATIVE_DOUBLE;
@@ -566,6 +573,13 @@
 octave_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);
@@ -584,8 +598,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)
     {