# HG changeset patch # User Rik # Date 1492541964 25200 # Node ID 0af9a1ae09120c3c60419e2a4bea33885c616201 # Parent e265ae9e7a6ca04b704bc44f0bee10281600dce5 maint: Use std::copy_n and std::fill_n for dim_vectors and idx_vectors. * Sparse.h (SparseRep constructors): Use C++ value-initialization rather than explicit loops to initialize arrays to 0. * Sparse.h: Use std::copy_n rather than std::copy where it seems to make more intuitive sense. * dim-vector.cc (chop_all_singletons): Rename local variable l to nd for clarity. * dim-vector.cc (redim): Replace for loops with std::copy_n and std::fill_n. * dim-vector.h (clonerep): Rename local variable l to nd for clarity. Replace for loop with std::copy_n. * dim-vector.h (resizerep): Rename local variable l to nd for clarity. Replace for loops with std::copy_n and std::fill_n. * dim-vector.h (chop_trailing_singletons):Rename local variable l to nd for clarity. * idx-vector.cc (idx_vector_rep::print, idx_mask_rep::print): Rename local variable ii to just i. * idx-vector.cc (complement): Replace for loop with std::fill_n. diff -r e265ae9e7a6c -r 0af9a1ae0912 liboctave/array/Sparse.h --- a/liboctave/array/Sparse.h Tue Apr 18 12:04:30 2017 +0200 +++ b/liboctave/array/Sparse.h Tue Apr 18 11:59:24 2017 -0700 @@ -31,14 +31,13 @@ #include #include +#include #include -#include #include "Array.h" #include "dim-vector.h" #include "lo-error.h" #include "lo-utils.h" - #include "oct-sort.h" class idx_vector; @@ -73,35 +72,21 @@ octave::refcount count; SparseRep (void) - : d (0), r (0), c (new octave_idx_type [1]), nzmx (0), nrows (0), + : d (0), r (0), c (new octave_idx_type [1] {}), nzmx (0), nrows (0), ncols (0), count (1) - { - c[0] = 0; - } + { } SparseRep (octave_idx_type n) - : d (0), r (0), c (new octave_idx_type [n+1]), nzmx (0), nrows (n), + : d (0), r (0), c (new octave_idx_type [n+1] {}), nzmx (0), nrows (n), ncols (n), count (1) - { - for (octave_idx_type i = 0; i < n + 1; i++) - c[i] = 0; - } + { } SparseRep (octave_idx_type nr, octave_idx_type nc, octave_idx_type nz = 0) - : d (nz > 0 ? new T [nz] : 0), - r (nz > 0 ? new octave_idx_type [nz] : 0), - c (new octave_idx_type [nc+1]), nzmx (nz), nrows (nr), + : d (nz > 0 ? new T [nz] {} : 0), + r (nz > 0 ? new octave_idx_type [nz] {} : 0), + c (new octave_idx_type [nc+1] {}), nzmx (nz), nrows (nr), ncols (nc), count (1) - { - for (octave_idx_type i = 0; i < nz; i++) - d[i] = T (); - - for (octave_idx_type i = 0; i < nz; i++) - r[i] = 0; - - for (octave_idx_type i = 0; i < nc + 1; i++) - c[i] = 0; - } + { } SparseRep (const SparseRep& a) : d (new T [a.nzmx]), r (new octave_idx_type [a.nzmx]), @@ -109,9 +94,9 @@ nzmx (a.nzmx), nrows (a.nrows), ncols (a.ncols), count (1) { octave_idx_type nz = a.nnz (); - std::copy (a.d, a.d + nz, d); - std::copy (a.r, a.r + nz, r); - std::copy (a.c, a.c + ncols + 1, c); + std::copy_n (a.d, nz, d); + std::copy_n (a.r, nz, r); + std::copy_n (a.c, ncols + 1, c); } ~SparseRep (void) { delete [] d; delete [] r; delete [] c; } diff -r e265ae9e7a6c -r 0af9a1ae0912 liboctave/array/dim-vector.cc --- a/liboctave/array/dim-vector.cc Tue Apr 18 12:04:30 2017 +0200 +++ b/liboctave/array/dim-vector.cc Tue Apr 18 11:59:24 2017 -0700 @@ -55,9 +55,9 @@ make_unique (); int j = 0; - int l = ndims (); + int nd = ndims (); - for (int i = 0; i < l; i++) + for (int i = 0; i < nd; i++) { if (rep[i] != 1) rep[j++] = rep[i]; @@ -282,31 +282,31 @@ { dim_vector retval = alloc (n); - for (int i = 0; i < n_dims; i++) - retval.rep[i] = rep[i]; - - for (int i = n_dims; i < n; i++) - retval.rep[i] = 1; + std::copy_n (rep, n_dims, retval.rep); + std::fill_n (retval.rep + n_dims, n - n_dims, 1); return retval; } else { - if (n < 1) n = 1; + if (n < 1) + n = 1; dim_vector retval = alloc (n); - retval.rep[1] = 1; + std::copy_n (rep, n-1, retval.rep); - for (int i = 0; i < n-1; i++) - retval.rep[i] = rep[i]; - + // Accumulate overflow dimensions into last remaining dimension int k = rep[n-1]; for (int i = n; i < n_dims; i++) k *= rep[i]; retval.rep[n-1] = k; + // All dim_vectors are at least 2-D. Make Nx1 if necessary. + if (n == 1) + retval.rep[1] = 1; + return retval; } } diff -r e265ae9e7a6c -r 0af9a1ae0912 liboctave/array/dim-vector.h --- a/liboctave/array/dim-vector.h Tue Apr 18 12:04:30 2017 +0200 +++ b/liboctave/array/dim-vector.h Tue Apr 18 11:59:24 2017 -0700 @@ -28,6 +28,7 @@ #include +#include #include #include @@ -109,12 +110,11 @@ octave_idx_type *clonerep (void) { - int l = ndims (); + int nd = ndims (); - octave_idx_type* r = newrep (l); + octave_idx_type* r = newrep (nd); - for (int i = 0; i < l; i++) - r[i] = rep[i]; + std::copy_n (rep, nd, r); return r; } @@ -123,21 +123,18 @@ octave_idx_type *resizerep (int n, octave_idx_type fill_value) { - int l = ndims (); + int nd = ndims (); if (n < 2) n = 2; octave_idx_type* r = newrep (n); - if (l > n) - l = n; + if (nd > n) + nd = n; - int j = 0; - for (; j < l; j++) - r[j] = rep[j]; - for (; j < n; j++) - r[j] = fill_value; + std::copy_n (rep, nd, r); + std::fill_n (r + nd, n - nd, fill_value); return r; } @@ -238,14 +235,14 @@ void chop_trailing_singletons (void) { - int l = ndims (); - if (l > 2 && rep[l-1] == 1) + int nd = ndims (); + if (nd > 2 && rep[nd-1] == 1) { make_unique (); do - l--; - while (l > 2 && rep[l-1] == 1); - rep[-1] = l; + nd--; + while (nd > 2 && rep[nd-1] == 1); + rep[-1] = nd; } } diff -r e265ae9e7a6c -r 0af9a1ae0912 liboctave/array/idx-vector.cc --- a/liboctave/array/idx-vector.cc Tue Apr 18 12:04:30 2017 +0200 +++ b/liboctave/array/idx-vector.cc Tue Apr 18 11:59:24 2017 -0700 @@ -596,8 +596,8 @@ { os << '['; - for (octave_idx_type ii = 0; ii < len - 1; ii++) - os << data[ii] << ',' << ' '; + for (octave_idx_type i = 0; i < len - 1; i++) + os << data[i] << ',' << ' '; if (len > 0) os << data[len-1]; @@ -713,8 +713,8 @@ { os << '['; - for (octave_idx_type ii = 0; ii < ext - 1; ii++) - os << data[ii] << ',' << ' '; + for (octave_idx_type i = 0; i < ext - 1; i++) + os << data[i] << ',' << ' '; if (ext > 0) os << data[ext-1]; @@ -1121,8 +1121,7 @@ bool *ndata = mask.fortran_vec (); for (octave_idx_type i = 0; i < ext; i++) ndata[i] = ! data[i]; - for (octave_idx_type i = ext; i < n; i++) - ndata[i] = true; + std::fill_n (ndata + ext, n - ext, true); retval = new idx_mask_rep (mask, n - nz); } else