changeset 24278:508d27e82ad1

dim-vector.cc: rewrite dim-vector.cc::squeeze using existing functions
author Andreas Weber <andy.weber.aw@gmail.com>
date Sun, 19 Nov 2017 10:31:14 +0100
parents ca03c9f3fa4b
children a26a8714db26
files liboctave/array/dim-vector.cc
diffstat 1 files changed, 4 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/dim-vector.cc	Sat Nov 18 20:41:41 2017 +0100
+++ b/liboctave/array/dim-vector.cc	Sun Nov 19 10:31:14 2017 +0100
@@ -122,53 +122,11 @@
 dim_vector::squeeze (void) const
 {
   dim_vector new_dims = *this;
-
-  bool dims_changed = 1;
-
-  int k = 0;
-
-  for (int i = 0; i < ndims (); i++)
-    {
-      if (xelem (i) == 1)
-        dims_changed = true;
-      else
-        new_dims(k++) = xelem (i);
-    }
-
-  if (dims_changed)
-    {
-      if (k == 0)
-        new_dims = dim_vector (1, 1);
-      else if (k == 1)
-        {
-          // There is one non-singleton dimension, so we need
-          // to decide the correct orientation.
+  new_dims.chop_all_singletons ();
 
-          if (elem (0) == 1)
-            {
-              // The original dimension vector had a leading
-              // singleton dimension.
-
-              octave_idx_type tmp = new_dims(0);
-
-              new_dims.resize (2);
-
-              new_dims(0) = 1;
-              new_dims(1) = tmp;
-            }
-          else
-            {
-              // The first element of the original dimension vector
-              // was not a singleton dimension.
-
-              new_dims.resize (2);
-
-              new_dims(1) = 1;
-            }
-        }
-      else
-        new_dims.resize (k);
-    }
+  // preserve orientation if there is only one non-singleton dimension left
+  if (new_dims.ndims () == 2 && xelem(0) == 1 && new_dims.elem(1) == 1)
+    return new_dims.as_row ();
 
   return new_dims;
 }