diff liboctave/Array.cc @ 4673:6639c2574023

[project @ 2003-12-10 16:11:54 by jwe]
author jwe
date Wed, 10 Dec 2003 16:11:54 +0000
parents 12b6fbd57436
children 4d2e1623c9a9
line wrap: on
line diff
--- a/liboctave/Array.cc
+++ b/liboctave/Array.cc
@@ -1859,6 +1859,7 @@
 	  else
 	    {
 	      dim_vector new_dims;
+
 	      new_dims.resize (n_dims);
 
 	      for (int i = 0; i < n_dims; i++)
@@ -1867,6 +1868,8 @@
 		    new_dims(i) = 1;
 		}
 
+	      new_dims.chop_trailing_singletons ();
+
 	      retval = Array<T> (new_dims);
 	    }
 	}
@@ -1885,6 +1888,8 @@
 		    new_dims(i) = 1;
 	        }
 
+	      new_dims.chop_trailing_singletons ();
+
 	      retval = Array<T> (tmp, new_dims);
 	    }
 	  else
@@ -1917,6 +1922,8 @@
 	      result_dims(1) = (ntot > 0 ? 1 : 0);
 	    }
 
+	  result_dims.chop_trailing_singletons ();
+
 	  retval.resize (result_dims);
 
 	  int n = number_of_elements (result_dims);
@@ -2022,14 +2029,12 @@
     {
       if (all_ok (ra_idx))
 	{
-	  if (any_orig_empty (ra_idx))
+	  if (any_orig_empty (ra_idx) || any_zero_len (frozen_lengths))
 	    {
+	      frozen_lengths.chop_trailing_singletons ();
+
 	      retval.resize (frozen_lengths);
 	    }
-	  else if (any_zero_len (frozen_lengths))
-	    {
-	      retval.resize (get_zero_len_size (frozen_lengths, dimensions));
-	    }
 	  else if (all_colon_equiv (ra_idx, dimensions) 
 		    && frozen_lengths.length () == n_dims)
 	    {
@@ -2037,9 +2042,13 @@
 	    }
 	  else
 	    {
-	      retval.resize (frozen_lengths);
-
-	      int n = number_of_elements (frozen_lengths);
+	      dim_vector frozen_lengths_for_resize = frozen_lengths;
+
+	      frozen_lengths_for_resize.chop_trailing_singletons ();
+
+	      retval.resize (frozen_lengths_for_resize);
+
+	      int n = retval.length ();
 
 	      Array<int> result_idx (ra_idx.length (), 0);
 
@@ -2051,17 +2060,13 @@
 		{
 		  elt_idx = get_elt_idx (ra_idx, result_idx); 
 	
-		  int numelem_result = 
-		    get_scalar_idx (result_idx, frozen_lengths);
-
 		  int numelem_elt = get_scalar_idx (elt_idx, this_dims);
 
-		  if (numelem_result > length () || numelem_result < 0 
-		      || numelem_elt > length () || numelem_elt < 0)
+		  if (numelem_elt > length () || numelem_elt < 0)
 		    (*current_liboctave_error_handler)
-		      ("attempt to grow array along ambiguous dimension");
+		      ("invalid N-d array index");
 		  else
-		    retval.checkelem (numelem_result) = checkelem (numelem_elt);
+		    retval.elem (i) = elem (numelem_elt);
 		
 		  increment_index (result_idx, frozen_lengths);