changeset 6292:3588fc904484

[project @ 2007-02-09 08:33:42 by jwe]
author jwe
date Fri, 09 Feb 2007 08:33:42 +0000
parents 6110e7d4e4c4
children b649aa46950d
files src/ChangeLog src/ls-mat5.cc src/ov-struct.cc
diffstat 3 files changed, 42 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Feb 09 05:14:51 2007 +0000
+++ b/src/ChangeLog	Fri Feb 09 08:33:42 2007 +0000
@@ -1,3 +1,14 @@
+2007-02-09  John W. Eaton  <jwe@octave.org>
+
+	* ls-mat5.cc (read_mat5_binary_element): Don't attempt to read
+	fieldnames if there are no fields.
+	(write_mat5_tag): Don't use small data element format if bytes == 0.
+
+	* ls-mat5.cc (read_mat5_binary_element): Always create a structure
+	that is at least 1x1.
+	* ov-struct.cc (octave_struct::load_ascii,
+	octave_struct::load_binary, octave_struct::load_hdf5): Likewise.
+
 2007-02-08  Michael Goffioul  <michael.goffioul@swing.be>
 
 	* DLD-FUNCTIONS/__glpk__.cc: Include glplib.h if glpk.h does not.
--- a/src/ls-mat5.cc	Fri Feb 09 05:14:51 2007 +0000
+++ b/src/ls-mat5.cc	Fri Feb 09 08:33:42 2007 +0000
@@ -717,7 +717,7 @@
 
     case MAT_FILE_STRUCT_CLASS:
       {
-	Octave_map m;
+	Octave_map m (dim_vector (1, 1));
 	int32_t fn_type;
 	int32_t fn_len;
 	int32_t field_name_length;
@@ -729,7 +729,7 @@
 	// space.
 	if (read_mat5_tag (is, swap, fn_type, fn_len) || fn_type != miINT32)
 	  {
-	    error ("load: invalid field name subelement");
+	    error ("load: invalid field name length subelement");
 	    goto data_read_error;
 	  }
 
@@ -749,37 +749,40 @@
 
 	octave_idx_type n_fields = fn_len/field_name_length;
 
-	fn_len = PAD (fn_len);
+	if (n_fields > 0)
+	  {
+	    fn_len = PAD (fn_len);
 
-	OCTAVE_LOCAL_BUFFER (char, elname, fn_len);
+	    OCTAVE_LOCAL_BUFFER (char, elname, fn_len);
 
-	if (! is.read (elname, fn_len))
-	  goto data_read_error;
+	    if (! is.read (elname, fn_len))
+	      goto data_read_error;
 
-	std::vector<Cell> elt (n_fields);
+	    std::vector<Cell> elt (n_fields);
+
+	    for (octave_idx_type i = 0; i < n_fields; i++)
+	      elt[i] = Cell (dims);
 
-	for (octave_idx_type i = 0; i < n_fields; i++)
-	  elt[i] = Cell (dims);
+	    octave_idx_type n = dims.numel ();
 
-	octave_idx_type n = dims.numel ();
+	    // fields subelements
+	    for (octave_idx_type j = 0; j < n; j++)
+	      {
+		for (octave_idx_type i = 0; i < n_fields; i++)
+		  {
+		    octave_value fieldtc;
+		    read_mat5_binary_element (is, filename, swap, global,
+					      fieldtc); 
+		    elt[i](j) = fieldtc;
+		  }
+	      }
 
-	// fields subelements
-	for (octave_idx_type j = 0; j < n; j++)
-	  {
 	    for (octave_idx_type i = 0; i < n_fields; i++)
 	      {
-		octave_value fieldtc;
-		read_mat5_binary_element (is, filename, swap, global, fieldtc);
-		elt[i](j) = fieldtc;
-	      }
+		const char *key = elname + i*field_name_length;
 
-	  }
-
-	for (octave_idx_type i = 0; i < n_fields; i++)
-	  {
-	    const char *key = elname + i*field_name_length;
-
-	    m.assign (key, elt[i]);
+		m.assign (key, elt[i]);
+	      }
 	  }
 
 	tc = m;
@@ -1007,7 +1010,7 @@
 {
   int32_t temp;
 
-  if (bytes <= 4)
+  if (bytes > 0 && bytes <= 4)
     temp = (bytes << 16) + type;
   else
     {
--- a/src/ov-struct.cc	Fri Feb 09 05:14:51 2007 +0000
+++ b/src/ov-struct.cc	Fri Feb 09 08:33:42 2007 +0000
@@ -1087,7 +1087,7 @@
 	    }
 	}
       else if (len == 0 )
-	map = Octave_map ();
+	map = Octave_map (dim_vector (1, 1));
       else
 	panic_impossible ();
     }
@@ -1177,7 +1177,7 @@
 	}
     }
   else if (len == 0 )
-    map = Octave_map ();
+    map = Octave_map (dim_vector (1, 1));
   else
     panic_impossible ();
 
@@ -1224,7 +1224,7 @@
   hdf5_callback_data dsub;
 
   herr_t retval2 = 0;
-  Octave_map m;
+  Octave_map m (dim_vector (1, 1));
   int current_item = 0;
 #ifdef HAVE_H5GGET_NUM_OBJS
   hsize_t num_obj = 0;