diff src/ov-cx-mat.cc @ 4513:508238e65af7

[project @ 2003-09-19 21:40:57 by jwe]
author jwe
date Fri, 19 Sep 2003 21:41:21 +0000
parents abbf63293766
children d44675070f1a
line wrap: on
line diff
--- a/src/ov-cx-mat.cc	Sat Sep 13 07:53:55 2003 +0000
+++ b/src/ov-cx-mat.cc	Fri Sep 19 21:41:21 2003 +0000
@@ -45,7 +45,7 @@
 #include "ov-scalar.h"
 #include "pr-output.h"
 
-template class octave_base_matrix<ComplexMatrix>;
+template class octave_base_matrix<ComplexNDArray>;
 
 DEFINE_OCTAVE_ALLOCATOR (octave_complex_matrix);
 
@@ -56,22 +56,27 @@
 {
   octave_value *retval = 0;
 
-  int nr = matrix.rows ();
-  int nc = matrix.cols ();
+  if (matrix.ndims () == 2)
+    {
+      ComplexMatrix cm = matrix.matrix_value ();
 
-  if (nr == 1 && nc == 1)
-    {
-      Complex c = matrix (0, 0);
+      int nr = cm.rows ();
+      int nc = cm.cols ();
+
+      if (nr == 1 && nc == 1)
+	{
+	  Complex c = matrix (0, 0);
 
-      if (imag (c) == 0.0)
-	retval = new octave_scalar (std::real (c));
-      else
-	retval = new octave_complex (c);
+	  if (imag (c) == 0.0)
+	    retval = new octave_scalar (std::real (c));
+	  else
+	    retval = new octave_complex (c);
+	}
+      else if (nr == 0 || nc == 0)
+	retval = new octave_matrix (Matrix (nr, nc));
+      else if (cm.all_elements_are_real ())
+	retval = new octave_matrix (::real (cm));
     }
-  else if (nr == 0 || nc == 0)
-    retval = new octave_matrix (Matrix (nr, nc));
-  else if (matrix.all_elements_are_real ())
-    retval = new octave_matrix (::real (matrix));
 
   return retval;
 }
@@ -80,7 +85,7 @@
 octave_complex_matrix::assign (const octave_value_list& idx,
 			       const ComplexMatrix& rhs)
 {
-  octave_base_matrix<ComplexMatrix>::assign (idx, rhs);
+  octave_base_matrix<ComplexNDArray>::assign (idx, rhs);
 }
 
 void
@@ -89,35 +94,10 @@
 {
   int len = idx.length ();
 
-  switch (len)
-    {
-    case 2:
-      {
-	idx_vector i = idx (0).index_vector ();
-	idx_vector j = idx (1).index_vector ();
-
-	matrix.set_index (i);
-	matrix.set_index (j);
-
-	::assign (matrix, rhs);
-      }
-      break;
+  for (int i = 0; i < len; i++)
+    matrix.set_index (idx(i).index_vector ());
 
-    case 1:
-      {
-	idx_vector i = idx (0).index_vector ();
-
-	matrix.set_index (i);
-
-	::assign (matrix, rhs);
-      }
-      break;
-
-    default:
-      error ("invalid number of indices (%d) for indexed matrix assignment",
-	     len);
-      break;
-    }
+  ::assign (matrix, rhs);
 }
 
 bool
@@ -158,7 +138,7 @@
   if (! force_conversion && Vwarn_imag_to_real)
     gripe_implicit_conversion ("complex matrix", "real matrix");
 
-  retval = ::real (matrix);
+  retval = ::real (matrix.matrix_value ());
 
   return retval;
 }
@@ -188,7 +168,7 @@
 ComplexMatrix
 octave_complex_matrix::complex_matrix_value (bool) const
 {
-  return matrix;
+  return matrix.matrix_value ();
 }
 
 /*