diff src/ls-mat5.cc @ 10623:0e98fb2068fc

Fix error when saving sparse arrays to matlab files (bug #29786)
author David Bateman <dbateman@free.fr>
date Wed, 12 May 2010 02:17:18 +0200
parents 12884915a8e4
children 3eafa521550b
line wrap: on
line diff
--- a/src/ls-mat5.cc
+++ b/src/ls-mat5.cc
@@ -1788,10 +1788,13 @@
         {
           SparseComplexMatrix m = tc.sparse_complex_matrix_value ();
           octave_idx_type nc = m.cols ();
-          octave_idx_type nnz = m.nzmax ();
+          octave_idx_type nnz = m.nzmax (); // Yes its nzmax
 
-          ret += 16 + PAD (nnz * sizeof (int)) + PAD ((nc + 1) * sizeof (int)) +
-            save_mat5_array_length (m.data (), nnz, save_as_floats);
+          ret += 16 + save_mat5_array_length (m.data (), nnz, save_as_floats);
+          if (nnz > 1)
+            ret += PAD (nnz * sizeof (int32_t));
+          if (nc > 1)
+            ret += PAD ((nc + 1) * sizeof (int32_t));
         }
       else
         {
@@ -1799,8 +1802,11 @@
           octave_idx_type nc = m.cols ();
           octave_idx_type nnz = m.nzmax ();
 
-          ret += 16 + PAD (nnz * sizeof (int)) + PAD ((nc + 1) * sizeof (int)) +
-            save_mat5_array_length (m.data (), nnz, save_as_floats);
+          ret += 16 + save_mat5_array_length (m.data (), nnz, save_as_floats);
+          if (nnz > 1)
+            ret += PAD (nnz * sizeof (int32_t));
+          if (nc > 1)
+            ret += PAD ((nc + 1) * sizeof (int32_t));
         }
     }
 
@@ -1896,7 +1902,7 @@
                                 const octave_idx_type *idx,
                                 octave_idx_type nel)
 {
-  int tmp = sizeof (int);
+  int tmp = sizeof (int32_t);
 
   OCTAVE_LOCAL_BUFFER (int32_t, tmp_idx, nel);
 
@@ -2132,9 +2138,10 @@
         {
           SparseComplexMatrix m = tc.sparse_complex_matrix_value ();
           octave_idx_type nnz = m.nnz ();
+          octave_idx_type nzmax = m.nzmax ();
           octave_idx_type nc = m.cols ();
 
-          write_mat5_sparse_index_vector (os, m.ridx (), nnz);
+          write_mat5_sparse_index_vector (os, m.ridx (), nzmax);
           write_mat5_sparse_index_vector (os, m.cidx (), nc + 1);
 
           NDArray buf (dim_vector (nnz, 1));
@@ -2153,9 +2160,10 @@
         {
           SparseMatrix m = tc.sparse_matrix_value ();
           octave_idx_type nnz = m.nnz ();
+          octave_idx_type nzmax = m.nzmax ();
           octave_idx_type nc = m.cols ();
 
-          write_mat5_sparse_index_vector (os, m.ridx (), nnz);
+          write_mat5_sparse_index_vector (os, m.ridx (), nzmax);
           write_mat5_sparse_index_vector (os, m.cidx (), nc + 1);
 
           // FIXME