diff liboctave/Array.cc @ 10531:2dd8ea8bfd71

basic cat functionality in liboctave
author Jaroslav Hajek <highegg@gmail.com>
date Sun, 18 Apr 2010 17:56:16 +0200
parents aac9f4265048
children f094ac9bc93e
line wrap: on
line diff
--- a/liboctave/Array.cc
+++ b/liboctave/Array.cc
@@ -2595,6 +2595,40 @@
 }
 
 template <class T>
+Array<T>
+Array<T>::cat (int dim, octave_idx_type n, const Array<T> *array_list)
+{
+  if (dim < 0)
+    (*current_liboctave_error_handler)
+      ("cat: invalid dimension");
+
+  dim_vector dv;
+  for (octave_idx_type i = 0; i < n; i++)
+    if (! dv.concat (array_list[i].dims (), dim))
+      (*current_liboctave_error_handler)
+        ("cat: dimension mismatch");
+
+  Array<T> retval (dv);
+  Array<idx_vector> idxa (dv.length (), 1, idx_vector::colon);
+  octave_idx_type l = 0;
+
+  for (octave_idx_type i = 0; i < n; i++)
+    {
+      octave_idx_type u;
+      if (dim < array_list[i].ndims ())
+        u = l + array_list[i].dims ()(dim);
+      else
+        u = l + 1;
+
+      idxa(dim) = idx_vector (l, u);
+
+      retval.assign (idxa, array_list[i]);
+    }
+
+  return retval;
+}
+
+template <class T>
 void
 Array<T>::print_info (std::ostream& os, const std::string& prefix) const
 {