Mercurial > octave-libtiff
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; }