changeset 2014:b3fd115759b7

[project @ 1996-03-20 10:54:03 by jwe]
author jwe
date Wed, 20 Mar 1996 10:54:03 +0000
parents 909d4d73fa51
children 9e4e71b27b3a
files liboctave/Array-idx.h
diffstat 1 files changed, 1 insertions(+), 574 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/Array-idx.h
+++ b/liboctave/Array-idx.h
@@ -150,7 +150,7 @@
     }
 }
 
-// ??? FIXME ??? -- this doesn't handle assignment of empty vectors
+// ??? FIXME ??? -- this does not handle assignment of empty vectors
 // to delete elements.  Should it?
 
 template <class LT, class RT>
@@ -217,579 +217,6 @@
   return retval;
 }
 
-#if 0 /* XXX */
-template <class T>
-Array2<T>
-Array2<T>::value (void)
-{
-  Array2<T> retval;
-
-  int n_idx = index_count ();
-
-  int nr = d1;
-  int nc = d2;
-
-  if (n_idx == 2)
-    {
-      idx_vector *tmp = get_idx ();
-      idx_vector idx_i = tmp[0];
-      idx_vector idx_j = tmp[1];
-
-      int n = idx_i.freeze (nr, "row", liboctave_pzo_flag);
-      int m = idx_j.freeze (nc, "column", liboctave_pzo_flag);
-
-      if (idx_i && idx_j)
-	{
-	  if (n == 0)
-	    {
-	      if (m == 0 || idx_j.is_colon_equiv (nc, 1))
-		retval.resize (0, 0);
-	      else
-		(*current_liboctave_error_handler)
-		  ("invalid row index = 0");
-	    }
-	  else if (m == 0)
-	    {
-	      if (n == 0 || idx_i.is_colon_equiv (nr, 1))
-		retval.resize (0, 0);
-	      else
-		(*current_liboctave_error_handler)
-		  ("invalid column index = 0");
-	    }
-	  else if (idx_i.is_colon_equiv (nr) && idx_j.is_colon_equiv (nc))
-	    {
-	      retval = *this;
-	    }
-	  else
-	    {
-	      retval.resize (n, m);
-
-	      for (int j = 0; j < m; j++)
-		{
-		  int jj = idx_j.elem (j);
-		  for (int i = 0; i < n; i++)
-		    {
-		      int ii = idx_i.elem (i);
-		      retval.elem (i, j) = elem (ii, jj);
-		    }
-		}
-	    }
-	}
-      // idx_vector::freeze() printed an error message for us.
-    }
-  else if (n_idx == 1)
-    {
-      if (nr == 1 && nc == 1)
-	{
-	  Array<T> tmp = Array<T>::value ();
-
-	  int len = tmp.length ();
-
-	  if (len == 0)
-	    retval = Array2<T> (0, 0);
-	  else
-	    {
-	      if (liboctave_pcv_flag)
-		retval = Array2<T> (tmp, len, 1);
-	      else
-		retval = Array2<T> (tmp, 1, len);
-	    }
-	}
-      else if (nr == 1 || nc == 1)
-	{
-	  int result_is_column_vector = (nc == 1);
-
-	  if (liboctave_dfi_flag)
-	    {
-	      idx_vector *tmp = get_idx ();
-	      idx_vector idx = tmp[0];
-
-	      if (idx.is_colon ())
-		result_is_column_vector = 1;
-	    }
-
-	  Array<T> tmp = Array<T>::value ();
-
-	  int len = tmp.length ();
-
-	  if (len == 0)
-	    retval = Array2<T> (0, 0);
-	  else
-	    {
-	      if (result_is_column_vector)
-		retval = Array2<T> (tmp, len, 1);
-	      else
-		retval = Array2<T> (tmp, 1, len);
-	    }
-	}
-      else if (liboctave_dfi_flag)
-	{
-	  // This code is only for indexing matrices.  The vector
-	  // cases are handled above.
-
-	  idx_vector *tmp = get_idx ();
-	  idx_vector idx = tmp[0];
-
-	  idx.freeze (nr * nc, "matrix", liboctave_pzo_flag);
-
-	  if (idx)
-	    {
-	      int result_nr = idx.orig_rows ();
-	      int result_nc = idx.orig_columns ();
-
-	      if (idx.is_colon ())
-		{
-		  result_nr = nr * nc;
-		  result_nc = 1;
-		}
-	      else if (idx.one_zero_only ())
-		{
-		  result_nr = idx.ones_count ();
-		  result_nc = (result_nr > 0 ? 1 : 0);
-		}
-
-	      retval.resize (result_nr, result_nc);
-
-	      int k = 0;
-	      for (int j = 0; j < result_nc; j++)
-		{
-		  for (int i = 0; i < result_nr; i++)
-		    {
-		      int ii = idx.elem (k++);
-		      int fr = ii % nr;
-		      int fc = (ii - fr) / nr;
-		      retval.elem (i, j) = elem (fr, fc);
-		    }
-		}
-	    }
-	  // idx_vector::freeze() printed an error message for us.
-	}
-      else
-	(*current_liboctave_error_handler)
-	  ("single index only valid for row or column vector");
-    }
-  else
-    (*current_liboctave_error_handler)
-      ("invalid number of indices for matrix expression");
-
-  clear_index ();
-
-  return retval;
-}
-
-template <class T>
-void
-Array2<T>::maybe_delete_elements (idx_vector& idx_i, idx_vector& idx_j)
-{
-  int nr = d1;
-  int nc = d2;
-
-  if (nr == 0 && nc == 0)
-    return;
-
-  if (idx_i.is_colon_equiv (nr, 1))
-    {
-      if (idx_j.is_colon_equiv (nc, 1))
-	resize (0, 0);
-      else
-	{
-	  int num_to_delete = idx_j.length (nc);
-
-	  if (num_to_delete != 0)
-	    {
-	      if (nr == 1 && num_to_delete == nc)
-		resize (0, 0);
-	      else
-		{
-		  int new_nc = nc - num_to_delete;
-		  if (new_nc > 0)
-		    {
-		      T *new_data = new T [nr * new_nc];
-
-		      int jj = 0;
-		      int idx = 0;
-		      for (int j = 0; j < nc; j++)
-			{
-			  if (j == idx_j.elem (idx))
-			    idx++;
-			  else
-			    {
-			      for (int i = 0; i < nr; i++)
-				new_data[nr*jj+i] = elem (i, j);
-			      jj++;
-			    }
-			}
-
-		      if (--rep->count <= 0)
-			delete rep;
-
-		      rep = new ArrayRep (new_data, nr * new_nc);
-
-		      d2 = new_nc;
-
-		      set_max_indices (2);
-		    }
-		  else
-		    (*current_liboctave_error_handler)
-		      ("A(idx) = []: index out of range");
-		}
-	    }
-	}
-    }
-  else if (idx_j.is_colon_equiv (nr, 1))
-    {
-      if (idx_i.is_colon_equiv (nc, 1))
-	resize (0, 0);
-      else
-	{
-	  int num_to_delete = idx_i.length (nr);
-
-	  if (num_to_delete != 0)
-	    {
-	      if (nc == 1 && num_to_delete == nr)
-		resize (0, 0);
-	      else 
-		{
-		  int new_nr = nr - num_to_delete;
-		  if (new_nr > 0)
-		    {
-		      T *new_data = new T [new_nr * nc];
-
-		      int ii = 0;
-		      int idx = 0;
-		      for (int i = 0; i < nr; i++)
-			{
-			  if (i == idx_i.elem (idx))
-			    idx++;
-			  else
-			    {
-			      for (int j = 0; j < nc; j++)
-				new_data[new_nr*j+ii] = elem (i, j);
-			      ii++;
-			    }
-			}
-
-		      if (--rep->count <= 0)
-			delete rep;
-
-		      rep = new ArrayRep (new_data, new_nr * nc);
-
-		      d1 = new_nr;
-
-		      set_max_indices (2);
-		    }
-		  else
-		    (*current_liboctave_error_handler)
-		      ("A(idx) = []: index out of range");
-		}
-	    }
-	}
-    }
-}
-
-template <class LT, class RT>
-int
-assign (Array2<LT>& lhs, const Array2<RT>& rhs)
-{
-  int retval = 1;
-
-  int n_idx = lhs.index_count ();
-
-  int lhs_nr = lhs.rows ();
-  int lhs_nc = lhs.cols ();
-
-  int rhs_nr = rhs.rows ();
-  int rhs_nc = rhs.cols ();
-
-  if (n_idx == 2)
-    {
-      idx_vector *tmp = lhs.get_idx ();
-
-      idx_vector idx_i = tmp[0];
-      idx_vector idx_j = tmp[1];
-
-      int n = idx_i.freeze (lhs_nr, "row", liboctave_pzo_flag,
-			    liboctave_rre_flag);
-
-      int m = idx_j.freeze (lhs_nc, "column", liboctave_pzo_flag,
-			    liboctave_rre_flag);
-
-      int idx_i_is_colon = idx_i.is_colon ();
-      int idx_j_is_colon = idx_j.is_colon ();
-
-      if (idx_i_is_colon)
-	n = rhs_nr;
-
-      if (idx_j_is_colon)
-	m = rhs_nc;
-
-      if (idx_i && idx_j)
-	{
-	  if (rhs_nr == 0 && rhs_nc == 0)
-	    {
-	      lhs.maybe_delete_elements (idx_i, idx_j);
-	    }
-	  else
-	    {
-	      if (liboctave_rre_flag)
-		{
-		  int max_row_idx = idx_i_is_colon ? rhs_nr : idx_i.max () + 1;
-		  int max_col_idx = idx_j_is_colon ? rhs_nc : idx_j.max () + 1;
-
-		  int new_nr = max_row_idx > lhs_nr ? max_row_idx : lhs_nr;
-		  int new_nc = max_col_idx > lhs_nc ? max_col_idx : lhs_nc;
-
-		  lhs.resize (new_nr, new_nc, 0.0);
-		}
-
-	      if (n == rhs_nr && m == rhs_nc)
-		{
-		  for (int j = 0; j < m; j++)
-		    {
-		      int jj = idx_j.elem (j);
-		      for (int i = 0; i < n; i++)
-			{
-			  int ii = idx_i.elem (i);
-			  lhs.elem (ii, jj) = rhs.elem (i, j);
-			}
-		    }
-		}
-	      else if (rhs_nr == 1 && rhs_nc == 1)
-		{
-		  RT scalar = rhs.elem (0, 0);
-
-		  for (int j = 0; j < m; j++)
-		    {
-		      int jj = idx_j.elem (j);
-		      for (int i = 0; i < n; i++)
-			{
-			  int ii = idx_i.elem (i);
-			  lhs.elem (ii, jj) = scalar;
-			}
-		    }
-		}
-	      else
-		{
-		  (*current_liboctave_error_handler)
-    ("A(I, J) = X: X must be a scalar or the number of elements in I must");
-		  (*current_liboctave_error_handler)
-    ("match the number of rows in X and the number of elements in J must");
-		  (*current_liboctave_error_handler)
-    ("match the number of columns in X");
-
-		  retval = 0;
-		}
-	    }
-	}
-      // idx_vector::freeze() printed an error message for us.
-    }
-  else if (n_idx == 1)
-    {
-      if (lhs_nr == 0 || lhs_nc == 0
-	  || (lhs_nr == 1 && lhs_nc == 1))
-	{
-	  idx_vector *tmp = lhs.get_idx ();
-
-	  idx_vector idx = tmp[0];
-
-	  int lhs_len = lhs.length ();
-
-	  int n = idx.freeze (lhs_len, 0, liboctave_pzo_flag,
-			      liboctave_rre_flag);
-
-	  if (idx)
-	    {
-	      if (rhs_nr == 0 && rhs_nc == 0)
-		{
-		  if (n != 0 && (lhs_nr != 0 || lhs_nc != 0))
-		    {
-		      idx_vector tmp (':');
-		      lhs.maybe_delete_elements (idx, tmp);
-		    }
-		}
-	      else
-		{
-		  if (assign ((Array<LT>&) lhs, (Array<RT>&) rhs))
-		    {
-		      int len = lhs.length ();
-
-		      if (len > 0)
-			{
-			  int idx_nr = idx.orig_rows ();
-			  int idx_nc = idx.orig_columns ();
-
-			  if (liboctave_dfi_flag
-			      || (idx_nr == 1 && idx_nc == 1))
-			    {
-			      if (liboctave_pcv_flag)
-				{
-				  lhs.d1 = lhs.length ();
-				  lhs.d2 = 1;
-				}
-			      else
-				{
-				  lhs.d1 = 1;
-				  lhs.d2 = lhs.length ();
-				}
-			    }
-			  else if (idx_nr == 1 && rhs_nr == 1)
-			    {
-			      lhs.d1 = 1;
-			      lhs.d2 = lhs.length ();
-			    }
-			  else if (idx_nc == 1 && rhs_nc == 1)
-			    {
-			      lhs.d1 = lhs.length ();
-			      lhs.d2 = 1;
-			    }
-			  else
-			    (*current_liboctave_error_handler)
-      ("A(I) = X: X must be a scalar or a matrix with the same size as I");
-			}
-		      else
-			{
-			  lhs.d1 = 0;
-			  lhs.d2 = 0;
-			}
-		    }
-		  else
-		    retval = 0;
-		}
-	    }
-	  // idx_vector::freeze() printed an error message for us.
-	}
-      else if (lhs_nr == 1)
-	{
-	  idx_vector *tmp = lhs.get_idx ();
-
-	  idx_vector idx = tmp[0];
-
-	  idx.freeze (lhs_nc, "vector", liboctave_pzo_flag,
-		      liboctave_rre_flag);
-
-	  if (idx)
-	    {
-	      if (rhs_nr == 0 && rhs_nc == 0)
-		{
-		  idx_vector tmp (':');
-		  lhs.maybe_delete_elements (tmp, idx);
-		}
-	      else
-		{
-		  if (assign ((Array<LT>&) lhs, (Array<RT>&) rhs))
-		    lhs.d2 = lhs.length ();
-		  else
-		    retval = 0;
-		}
-	    }
-	  // idx_vector::freeze() printed an error message for us.
-	}
-      else if (lhs_nc == 1)
-	{
-	  idx_vector *tmp = lhs.get_idx ();
-
-	  idx_vector idx = tmp[0];
-
-	  idx.freeze (lhs_nr, "vector", liboctave_pzo_flag,
-		      liboctave_rre_flag);
-
-	  if (idx)
-	    {
-	      if (rhs_nr == 0 && rhs_nc == 0)
-		{
-		  idx_vector tmp (':');
-		  lhs.maybe_delete_elements (idx, tmp);
-		}
-	      else
-		{
-		  if (assign ((Array<LT>&) lhs, (Array<RT>&) rhs))
-		    lhs.d1 = lhs.length ();
-		  else
-		    retval = 0;
-		}
-	    }
-	  // idx_vector::freeze() printed an error message for us.
-	}
-      else if (liboctave_dfi_flag)
-	{
-	  idx_vector *tmp = lhs.get_idx ();
-	  idx_vector idx = tmp[0];
-
-	  int len = idx.freeze (lhs_nr * lhs_nc, "matrix",
-				liboctave_pzo_flag);
-
-	  if (idx)
-	    {
-	      if (len == rhs_nr * rhs_nc)
-		{
-		  int k = 0;
-		  for (int j = 0; j < rhs_nc; j++)
-		    {
-		      for (int i = 0; i < rhs_nr; i++)
-			{
-			  int ii = idx.elem (k++);
-			  int fr = ii % lhs_nr;
-			  int fc = (ii - fr) / lhs_nr;
-			  lhs.elem (fr, fc) = rhs.elem (i, j);
-			}
-		    }
-		}
-	      else
-		{
-		  (*current_liboctave_error_handler)
-      ("A(I) = X: X must be a scalar or a matrix with the same size as I");
-
-		  retval = 0;
-		}
-	    }
-	  // idx_vector::freeze() printed an error message for us.
-	}
-      else
-	{
-	  (*current_liboctave_error_handler)
-	    ("single index only valid for row or column vector");
-
-	  retval = 0;
-	}
-    }
-  else
-    {
-      (*current_liboctave_error_handler)
-	("invalid number of indices for matrix expression");
-
-      retval = 0;
-    }
-
-  lhs.clear_index ();
-
-  return retval;
-}
-
-template <class T>
-void
-Array3<T>::maybe_delete_elements (idx_vector&, idx_vector&, idx_vector&)
-{
-  assert (0);
-}
-
-template <class T>
-Array3<T>
-Array3<T>::value (void)
-{
-  Array3<T> retval;
-  assert (0);
-  return retval;
-}
-
-template <class LT, class RT>
-int
-assign (Array3<LT>&, const Array3<RT>&)
-{
-  assert (0);
-  return 0;
-}
-#endif
-
 /*
 ;;; Local Variables: ***
 ;;; mode: C++ ***