diff liboctave/CNDArray.cc @ 4765:e941e1470d7b

[project @ 2004-02-16 05:56:50 by jwe]
author jwe
date Mon, 16 Feb 2004 05:56:51 +0000
parents bec345670e56
children ef5e598f099b
line wrap: on
line diff
--- a/liboctave/CNDArray.cc
+++ b/liboctave/CNDArray.cc
@@ -250,6 +250,63 @@
   return retval;
 }
 
+ComplexNDArray&
+ComplexNDArray::insert (const NDArray& a, int r, int c)
+{
+  dim_vector a_dv = a.dims ();
+  
+  int n = a_dv.length ();
+  
+  if (n == dimensions.length ())
+    {
+      Array<int> a_ra_idx (a_dv.length (), 0);
+      
+      a_ra_idx.elem (0) = r;
+      a_ra_idx.elem (1) = c;
+      
+      for (int i = 0; i < n; i++)
+	{
+	  if (a_ra_idx (i) < 0 || (a_ra_idx (i) + a_dv (i)) > dimensions (i))
+	    {
+	      (*current_liboctave_error_handler)
+		("Array<T>::insert: range error for insert");
+	      return *this;
+	    }
+	}
+      
+      a_ra_idx.elem (0) = 0;
+      a_ra_idx.elem (1) = 0;
+      
+      int n_elt = a.numel ();
+      
+      // IS make_unique () NECCESSARY HERE??
+
+      for (int i = 0; i < n_elt; i++)
+	{
+	  Array<int> ra_idx = a_ra_idx;
+	  
+	  ra_idx.elem (0) = a_ra_idx (0) + r;
+	  ra_idx.elem (1) = a_ra_idx (1) + c;
+	  
+	  elem (ra_idx) = a.elem (a_ra_idx);
+
+	  increment_index (a_ra_idx, a_dv);
+	}
+    }
+  else
+    (*current_liboctave_error_handler)
+      ("Array<T>::insert: invalid indexing operation");
+
+  return *this;
+}
+
+ComplexNDArray&
+ComplexNDArray::insert (const ComplexNDArray& a, int r, int c)
+{
+  Array<Complex>::insert (a, r, c);
+  return *this;
+}
+
 ComplexMatrix
 ComplexNDArray::matrix_value (void) const
 {