diff liboctave/Sparse.cc @ 10533:f094ac9bc93e

reuse Array<T>::cat and Sparse<T>::cat in cat/horzcat/vertcat
author Jaroslav Hajek <highegg@gmail.com>
date Mon, 19 Apr 2010 15:31:49 +0200
parents 2dd8ea8bfd71
children 3f973f6c841c
line wrap: on
line diff
--- a/liboctave/Sparse.cc
+++ b/liboctave/Sparse.cc
@@ -2402,12 +2402,17 @@
         // sparse vertcat. This is not efficiently handled by assignment, so
         // we'll do it directly.
         octave_idx_type l = 0;
-        for (octave_idx_type j = 0; j < n; j++)
+        for (octave_idx_type j = 0; j < dv(1); j++)
           {
+            octave_quit ();
+
             octave_idx_type rcum = 0;
             for (octave_idx_type i = 0; i < n; i++)
               {
                 const Sparse<T>& spi = sparse_list[i];
+                if (spi.dims ().zero_by_zero ())
+                  continue;
+
                 octave_idx_type kl = spi.cidx(j), ku = spi.cidx(j+1);
                 for (octave_idx_type k = kl; k < ku; k++, l++)
                   {
@@ -2425,12 +2430,14 @@
       }
     case 1:
       {
-        octave_idx_type ccum = 0;
+        octave_idx_type l = 0;
         for (octave_idx_type i = 0; i < n; i++)
           {
-            octave_idx_type l = ccum, u = ccum + sparse_list[i].columns ();
+            octave_quit ();
+
+            octave_idx_type u = l + sparse_list[i].columns ();
             retval.assign (idx_vector::colon, idx_vector (l, u), sparse_list[i]);
-            ccum = u;
+            l = u;
           }
 
         break;