Mercurial > hg > octave-nkf
diff liboctave/Array.cc @ 9773:01f897d8a130
optimize memory manipulation by arrays & indexing
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Tue, 03 Nov 2009 11:35:59 +0100 |
parents | b4fdfee405b5 |
children | 6dafc60dde31 |
line wrap: on
line diff
--- a/liboctave/Array.cc +++ b/liboctave/Array.cc @@ -77,7 +77,7 @@ slice_data = rep->data; } else - std::fill (slice_data, slice_data + slice_len, val); + octave_fill (slice_len, val, slice_data); } template <class T> @@ -568,7 +568,10 @@ { octave_idx_type step = stride[0], len = dim[0]; if (step == 1) - dest = std::copy (src, src + len, dest); + { + octave_ucopy (len, src, dest); + dest += len; + } else { for (octave_idx_type i = 0, j = 0; i < len; i++, j += step) @@ -829,8 +832,8 @@ { if (lev == 0) { - T* destc = std::copy (src, src + cext[0], dest); - std::fill (destc, dest + dext[0], rfv); + octave_ucopy (cext[0], src, dest); + octave_fill (dext[0] - cext[0], rfv, dest + cext[0]); } else { @@ -838,7 +841,7 @@ for (k = 0; k < cext[lev]; k++) do_resize_fill (src + k * sd, dest + k * dd, rfv, lev - 1); - std::fill (dest + k * dd, dest + dext[lev], rfv); + octave_fill (dext[lev] - k * dd, rfv, dest + k * dd); } } public: @@ -1114,7 +1117,7 @@ Array<T> tmp (Array<T> (nn), dv, 0, n); T *dest = tmp.fortran_vec (); - std::copy (data (), data () + nx, dest); + octave_ucopy (nx, data (), dest); dest[nx] = rfv; *this = tmp; @@ -1126,8 +1129,8 @@ T *dest = tmp.fortran_vec (); octave_idx_type n0 = std::min (n, nx), n1 = n - n0; - dest = std::copy (data (), data () + n0, dest); - std::fill (dest, dest + n1, rfv); + octave_ucopy (n0, data (), dest); + octave_fill (n1, rfv, dest + n0); *this = tmp; } @@ -1153,19 +1156,23 @@ octave_idx_type c0 = std::min (c, cx), c1 = c - c0; const T *src = data (); if (r == rx) - dest = std::copy (src, src + r * c0, dest); + { + octave_ucopy (r * c0, src, dest); + dest += r * c0; + } else { for (octave_idx_type k = 0; k < c0; k++) { - dest = std::copy (src, src + r0, dest); + octave_ucopy (r0, src, dest); src += rx; - std::fill (dest, dest + r1, rfv); + dest += r0; + octave_fill (r1, rfv, dest); dest += r1; } } - std::fill (dest, dest + r * c1, rfv); + octave_fill (r * c1, rfv, dest); *this = tmp; } @@ -1550,8 +1557,8 @@ Array<T> tmp (dim_vector (col_vec ? m : 1, !col_vec ? m : 1)); const T *src = data (); T *dest = tmp.fortran_vec (); - dest = std::copy (src, src + l, dest); - dest = std::copy (src + u, src + n, dest); + octave_ucopy (l, src, dest); + octave_ucopy (n - u, src + u, dest + l); *this = tmp; } else @@ -1602,8 +1609,10 @@ l *= dl; u *= dl; n *= dl; for (octave_idx_type k = 0; k < du; k++) { - dest = std::copy (src, src + l, dest); - dest = std::copy (src + u, src + n, dest); + octave_ucopy (l, src, dest); + dest += l; + octave_ucopy (n - u, src + u, dest); + dest += n - u; src += n; }