diff liboctave/Array.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/Array.cc
+++ b/liboctave/Array.cc
@@ -2609,11 +2609,17 @@
         ("cat: dimension mismatch");
 
   Array<T> retval (dv);
-  Array<idx_vector> idxa (dv.length (), 1, idx_vector::colon);
+  int nidx = std::max (dv.length (), dim + 1);
+  Array<idx_vector> idxa (nidx, 1, idx_vector::colon);
   octave_idx_type l = 0;
 
   for (octave_idx_type i = 0; i < n; i++)
     {
+      if (array_list[i].dims ().zero_by_zero ())
+        continue;
+
+      octave_quit ();
+
       octave_idx_type u;
       if (dim < array_list[i].ndims ())
         u = l + array_list[i].dims ()(dim);
@@ -2623,6 +2629,8 @@
       idxa(dim) = idx_vector (l, u);
 
       retval.assign (idxa, array_list[i]);
+
+      l = u;
     }
 
   return retval;