# HG changeset patch # User Kai T. Ohlhus # Date 1417781316 -3600 # Node ID af41e41ad28ea05ca0426de04f49e3f1de32c48c # Parent 5db5619fe54e0e6a59cf2daf4bc2e523b7301f0a replace oct-mem.h inline indirections by standard function calls. * Array.h: replaced copy_or_memcpy, fill_or_memset, and no_ctor_new * Array.cc: replaced copy_or_memcpy, and fill_or_memset * idx-vector.h: replaced copy_or_memcpy, and fill_or_memset * idx-vector.cc: replaced copy_or_memcpy * boolSparse.cc: replaced copy_or_memcpy, and fill_or_memset * Sparse.h: replaced copy_or_memcpy * Sparse.cc: replaced copy_or_memcpy, and fill_or_memset * oct-binmap.h: replaced copy_or_memcpy * mx-inlines.cc: new standard header dependency * module.mk: removed header entry * oct-mem.h: removed unused header diff -r 5db5619fe54e -r af41e41ad28e liboctave/array/Array.cc --- a/liboctave/array/Array.cc Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/array/Array.cc Fri Dec 05 13:08:36 2014 +0100 @@ -76,7 +76,7 @@ slice_data = rep->data; } else - fill_or_memset (slice_len, val, slice_data); + std::fill_n (slice_data, slice_len, val); } template @@ -399,7 +399,7 @@ octave_idx_type len = dim[0]; if (step == 1) { - copy_or_memcpy (len, src, dest); + std::copy (src, src + len, dest); dest += len; } else @@ -683,8 +683,8 @@ { if (lev == 0) { - copy_or_memcpy (cext[0], src, dest); - fill_or_memset (dext[0] - cext[0], rfv, dest + cext[0]); + std::copy (src, src+cext[0], dest); + std::fill_n (dest + cext[0], dext[0] - cext[0], rfv); } else { @@ -694,7 +694,7 @@ for (k = 0; k < cext[lev]; k++) do_resize_fill (src + k * sd, dest + k * dd, rfv, lev - 1); - fill_or_memset (dext[lev] - k * dd, rfv, dest + k * dd); + std::fill_n (dest + k * dd, dext[lev] - k * dd, rfv); } } @@ -959,7 +959,7 @@ Array tmp (Array (dim_vector (nn, 1)), dv, 0, n); T *dest = tmp.fortran_vec (); - copy_or_memcpy (nx, data (), dest); + std::copy (data (), data () + nx, dest); dest[nx] = rfv; *this = tmp; @@ -972,8 +972,8 @@ octave_idx_type n0 = std::min (n, nx); octave_idx_type n1 = n - n0; - copy_or_memcpy (n0, data (), dest); - fill_or_memset (n1, rfv, dest + n0); + std::copy (data (), data () + n0, dest); + std::fill_n (dest + n0, n1, rfv); *this = tmp; } @@ -1003,22 +1003,22 @@ const T *src = data (); if (r == rx) { - copy_or_memcpy (r * c0, src, dest); + std::copy (src, src + r * c0, dest); dest += r * c0; } else { for (octave_idx_type k = 0; k < c0; k++) { - copy_or_memcpy (r0, src, dest); + std::copy (src, src + r0, dest); src += rx; dest += r0; - fill_or_memset (r1, rfv, dest); + std::fill_n (dest, r1, rfv); dest += r1; } } - fill_or_memset (r * c1, rfv, dest); + std::fill_n (dest, r * c1, rfv); *this = tmp; } @@ -1416,8 +1416,8 @@ Array tmp (dim_vector (col_vec ? m : 1, !col_vec ? m : 1)); const T *src = data (); T *dest = tmp.fortran_vec (); - copy_or_memcpy (l, src, dest); - copy_or_memcpy (n - u, src + u, dest + l); + std::copy (src, src + l, dest); + std::copy (src + u, src + n, dest + l); *this = tmp; } else @@ -1469,9 +1469,9 @@ l *= dl; u *= dl; n *= dl; for (octave_idx_type k = 0; k < du; k++) { - copy_or_memcpy (l, src, dest); + std::copy (src, src + l, dest); dest += l; - copy_or_memcpy (n - u, src + u, dest); + std::copy (src + u, src + n, dest); dest += n - u; src += n; } diff -r 5db5619fe54e -r af41e41ad28e liboctave/array/Array.h --- a/liboctave/array/Array.h Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/array/Array.h Fri Dec 05 13:08:36 2014 +0100 @@ -38,7 +38,6 @@ #include "lo-utils.h" #include "oct-sort.h" #include "quit.h" -#include "oct-mem.h" #include "oct-refcount.h" //!Handles the reference counting for all the derived classes. @@ -58,14 +57,14 @@ octave_refcount count; ArrayRep (T *d, octave_idx_type l) - : data (no_ctor_new (l)), len (l), count (1) + : data (new T [l]), len (l), count (1) { - copy_or_memcpy (l, d, data); + std::copy (d, d+l, data); } template ArrayRep (U *d, octave_idx_type l) - : data (no_ctor_new (l)), len (l), count (1) + : data (new T [l]), len (l), count (1) { std::copy (d, d+l, data); } @@ -73,21 +72,21 @@ ArrayRep (void) : data (0), len (0), count (1) { } explicit ArrayRep (octave_idx_type n) - : data (no_ctor_new (n)), len (n), count (1) { } + : data (new T [n]), len (n), count (1) { } explicit ArrayRep (octave_idx_type n, const T& val) - : data (no_ctor_new (n)), len (n), count (1) + : data (new T [n]), len (n), count (1) { - fill_or_memset (n, val, data); + std::fill_n (data, n, val); } ArrayRep (const ArrayRep& a) - : data (no_ctor_new (a.len)), len (a.len), count (1) + : data (new T [a.len]), len (a.len), count (1) { - copy_or_memcpy (a.len, a.data, data); + std::copy (a.data, a.data + a.len, data); } - ~ArrayRep (void) { no_ctor_delete (data); } + ~ArrayRep (void) { delete [] data; } octave_idx_type length (void) const { return len; } diff -r 5db5619fe54e -r af41e41ad28e liboctave/array/Sparse.cc --- a/liboctave/array/Sparse.cc Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/array/Sparse.cc Fri Dec 05 13:08:36 2014 +0100 @@ -170,13 +170,13 @@ octave_idx_type min_nzmx = std::min (nz, nzmx); octave_idx_type * new_ridx = new octave_idx_type [nz]; - copy_or_memcpy (min_nzmx, r, new_ridx); + std::copy (r, r + min_nzmx, new_ridx); delete [] r; r = new_ridx; T * new_data = new T [nz]; - copy_or_memcpy (min_nzmx, d, new_data); + std::copy (d, d + min_nzmx, new_data); delete [] d; d = new_data; @@ -978,13 +978,13 @@ if (c != rep->ncols) { octave_idx_type *new_cidx = new octave_idx_type [c+1]; - copy_or_memcpy (std::min (c, rep->ncols)+1, rep->c, new_cidx); + std::copy (rep->c, rep->c + std::min (c, rep->ncols) + 1, new_cidx); delete [] rep->c; rep->c = new_cidx; if (c > rep->ncols) - fill_or_memset (c - rep->ncols, rep->c[rep->ncols], - rep->c + rep->ncols + 1); + std::fill_n (rep->c + rep->ncols + 1, c - rep->ncols, + rep->c[rep->ncols]); } rep->ncols = dimensions(1) = c; @@ -1180,9 +1180,9 @@ // Copy data and adjust indices. octave_idx_type nz_new = nz - (ui - li); *this = Sparse (nr - (ub - lb), 1, nz_new); - copy_or_memcpy (li, tmp.data (), data ()); - copy_or_memcpy (li, tmp.ridx (), xridx ()); - copy_or_memcpy (nz - ui, tmp.data () + ui, xdata () + li); + std::copy (tmp.data (), tmp.data () + li, data ()); + std::copy (tmp.ridx (), tmp.ridx () + li, xridx ()); + std::copy (tmp.data () + ui, tmp.data () + nz, xdata () + li); mx_inline_sub (nz - ui, xridx () + li, tmp.ridx () + ui, ub - lb); xcidx (1) = nz_new; } @@ -1207,8 +1207,8 @@ } *this = Sparse (nr - sl, 1, nz_new); - copy_or_memcpy (nz_new, ridx_new, ridx ()); - copy_or_memcpy (nz_new, data_new, xdata ()); + std::copy (ridx_new, ridx_new + nz_new, ridx ()); + std::copy (data_new, data_new + nz_new, xdata ()); xcidx (1) = nz_new; } } @@ -1223,10 +1223,10 @@ octave_idx_type ubi = tmp.cidx (ub); octave_idx_type new_nz = nz - (ubi - lbi); *this = Sparse (1, nc - (ub - lb), new_nz); - copy_or_memcpy (lbi, tmp.data (), data ()); - copy_or_memcpy (nz - ubi, tmp.data () + ubi, xdata () + lbi); - fill_or_memset (new_nz, static_cast (0), ridx ()); - copy_or_memcpy (lb, tmp.cidx () + 1, cidx () + 1); + std::copy (tmp.data (), tmp.data () + lbi, data ()); + std::copy (tmp.data () + ubi, tmp.data () + nz , xdata () + lbi); + std::fill_n (ridx (), new_nz, static_cast (0)); + std::copy (tmp.cidx () + 1, tmp.cidx () + 1 + lb, cidx () + 1); mx_inline_sub (nc - ub, xcidx () + 1, tmp.cidx () + ub + 1, ubi - lbi); } @@ -1282,11 +1282,11 @@ octave_idx_type new_nz = nz - (ubi - lbi); *this = Sparse (nr, nc - (ub - lb), new_nz); - copy_or_memcpy (lbi, tmp.data (), data ()); - copy_or_memcpy (lbi, tmp.ridx (), ridx ()); - copy_or_memcpy (nz - ubi, tmp.data () + ubi, xdata () + lbi); - copy_or_memcpy (nz - ubi, tmp.ridx () + ubi, xridx () + lbi); - copy_or_memcpy (lb, tmp.cidx () + 1, cidx () + 1); + std::copy (tmp.data (), tmp.data () + lbi, data ()); + std::copy (tmp.ridx (), tmp.ridx () + lbi, ridx ()); + std::copy (tmp.data () + ubi, tmp.data () + nz, xdata () + lbi); + std::copy (tmp.ridx () + ubi, tmp.ridx () + nz, xridx () + lbi); + std::copy (tmp.cidx () + 1, tmp.cidx () + 1 + lb, cidx () + 1); mx_inline_sub (nc - ub, xcidx () + lb + 1, tmp.cidx () + ub + 1, ubi - lbi); } @@ -1467,7 +1467,7 @@ // Copy data and adjust indices. octave_idx_type nz_new = ui - li; retval = Sparse (ub - lb, 1, nz_new); - copy_or_memcpy (nz_new, data () + li, retval.data ()); + std::copy (data () + li, data () + li + nz_new, retval.data ()); mx_inline_sub (nz_new, retval.xridx (), ridx () + li, lb); retval.xcidx (1) = nz_new; } @@ -1480,7 +1480,7 @@ for (octave_idx_type j = 0; j < nz; j++) retval.ridx (j) = nr - ridx (nz - j - 1) - 1; - copy_or_memcpy (2, cidx (), retval.cidx ()); + std::copy (cidx (), cidx () + 2, retval.cidx ()); std::reverse_copy (data (), data () + nz, retval.data ()); } else @@ -1552,9 +1552,8 @@ octave_idx_type ubi = cidx (ub); octave_idx_type new_nz = ubi - lbi; retval = Sparse (1, ub - lb, new_nz); - copy_or_memcpy (new_nz, data () + lbi, retval.data ()); - fill_or_memset (new_nz, static_cast (0), - retval.ridx ()); + std::copy (data () + lbi, data () + lbi + new_nz, retval.data ()); + std::fill_n (retval.ridx (), new_nz, static_cast (0)); mx_inline_sub (ub - lb + 1, retval.cidx (), cidx () + lb, lbi); } else @@ -1639,8 +1638,8 @@ octave_idx_type ubi = cidx (ub); octave_idx_type new_nz = ubi - lbi; retval = Sparse (nr, ub - lb, new_nz); - copy_or_memcpy (new_nz, data () + lbi, retval.data ()); - copy_or_memcpy (new_nz, ridx () + lbi, retval.ridx ()); + std::copy (data () + lbi, data () + lbi + new_nz, retval.data ()); + std::copy (ridx () + lbi, ridx () + lbi + new_nz, retval.ridx ()); mx_inline_sub (ub - lb + 1, retval.cidx (), cidx () + lb, lbi); } else @@ -1662,8 +1661,8 @@ octave_idx_type lj = retval.xcidx (j); octave_idx_type nzj = retval.xcidx (j+1) - lj; - copy_or_memcpy (nzj, data () + ljj, retval.data () + lj); - copy_or_memcpy (nzj, ridx () + ljj, retval.ridx () + lj); + std::copy (data () + ljj, data () + ljj + nzj, retval.data () + lj); + std::copy (ridx () + ljj, ridx () + ljj + nzj, retval.ridx () + lj); } } } @@ -1893,7 +1892,7 @@ } // Copy data and adjust indices from rhs. - copy_or_memcpy (rnz, rhs.data (), data () + li); + std::copy (rhs.data (), rhs.data () + rnz, data () + li); mx_inline_add (rnz, ridx () + li, rhs.ridx (), lb); } else @@ -1904,17 +1903,17 @@ *this = Sparse (nr, 1, new_nz); // Head ... - copy_or_memcpy (li, tmp.data (), data ()); - copy_or_memcpy (li, tmp.ridx (), ridx ()); + std::copy (tmp.data (), tmp.data () + li, data ()); + std::copy (tmp.ridx (), tmp.ridx () + li, ridx ()); // new stuff ... - copy_or_memcpy (rnz, rhs.data (), data () + li); + std::copy (rhs.data (), rhs.data () + rnz, data () + li); mx_inline_add (rnz, ridx () + li, rhs.ridx (), lb); // ...tail - copy_or_memcpy (nz - ui, tmp.data () + ui, + std::copy (tmp.data () + ui, tmp.data () + nz, data () + li + rnz); - copy_or_memcpy (nz - ui, tmp.ridx () + ui, + std::copy (tmp.ridx () + ui, tmp.ridx () + nz, ridx () + li + rnz); } @@ -1950,8 +1949,8 @@ // Disassembly our matrix... Array new_ri (dim_vector (new_nz, 1)); Array new_data (dim_vector (new_nz, 1)); - copy_or_memcpy (nz, tmp.ridx (), new_ri.fortran_vec ()); - copy_or_memcpy (nz, tmp.data (), new_data.fortran_vec ()); + std::copy (tmp.ridx (), tmp.ridx () + nz, new_ri.fortran_vec ()); + std::copy (tmp.data (), tmp.data () + nz, new_data.fortran_vec ()); // ... insert new data (densified) ... idx.copy_data (new_ri.fortran_vec () + nz); new_data.assign (idx_vector (nz, new_nz), rhs.array_value ()); @@ -2077,8 +2076,8 @@ } // Copy data and indices from rhs. - copy_or_memcpy (rnz, rhs.data (), data () + li); - copy_or_memcpy (rnz, rhs.ridx (), ridx () + li); + std::copy (rhs.data (), rhs.data () + rnz, data () + li); + std::copy (rhs.ridx (), rhs.ridx () + rnz, ridx () + li); mx_inline_add (ub - lb, cidx () + lb + 1, rhs.cidx () + 1, li); @@ -2092,20 +2091,20 @@ *this = Sparse (nr, nc, new_nz); // Head... - copy_or_memcpy (li, tmp.data (), data ()); - copy_or_memcpy (li, tmp.ridx (), ridx ()); - copy_or_memcpy (lb, tmp.cidx () + 1, cidx () + 1); + std::copy (tmp.data (), tmp.data () + li, data ()); + std::copy (tmp.ridx (), tmp.ridx () + li, ridx ()); + std::copy (tmp.cidx () + 1, tmp.cidx () + 1 + lb, cidx () + 1); // new stuff... - copy_or_memcpy (rnz, rhs.data (), data () + li); - copy_or_memcpy (rnz, rhs.ridx (), ridx () + li); + std::copy (rhs.data (), rhs.data () + rnz, data () + li); + std::copy (rhs.ridx (), rhs.ridx () + rnz, ridx () + li); mx_inline_add (ub - lb, cidx () + lb + 1, rhs.cidx () + 1, li); // ...tail. - copy_or_memcpy (nz - ui, tmp.data () + ui, + std::copy (tmp.data () + ui, tmp.data () + nz, data () + li + rnz); - copy_or_memcpy (nz - ui, tmp.ridx () + ui, + std::copy (tmp.ridx () + ui, tmp.ridx () + nz, ridx () + li + rnz); mx_inline_add (nc - ub, cidx () + ub + 1, tmp.cidx () + ub + 1, new_nz - nz); @@ -2156,15 +2155,19 @@ { // from rhs octave_idx_type k = rhs.cidx (j); - copy_or_memcpy (u - l, rhs.data () + k, xdata () + l); - copy_or_memcpy (u - l, rhs.ridx () + k, xridx () + l); + std::copy (rhs.data () + k, rhs.data () + k + u - l, + xdata () + l); + std::copy (rhs.ridx () + k, rhs.ridx () + k + u - l, + xridx () + l); } else { // original octave_idx_type k = tmp.cidx (i); - copy_or_memcpy (u - l, tmp.data () + k, xdata () + l); - copy_or_memcpy (u - l, tmp.ridx () + k, xridx () + l); + std::copy (tmp.data () + k, tmp.data () + k + u - l, + xdata () + l); + std::copy (tmp.ridx () + k, tmp.ridx () + k + u - l, + xridx () + l); } } diff -r 5db5619fe54e -r af41e41ad28e liboctave/array/Sparse.h --- a/liboctave/array/Sparse.h Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/array/Sparse.h Fri Dec 05 13:08:36 2014 +0100 @@ -38,7 +38,6 @@ #include "lo-utils.h" #include "oct-sort.h" -#include "oct-mem.h" class idx_vector; class PermMatrix; @@ -102,9 +101,9 @@ nzmx (a.nzmx), nrows (a.nrows), ncols (a.ncols), count (1) { octave_idx_type nz = a.nnz (); - copy_or_memcpy (nz, a.d, d); - copy_or_memcpy (nz, a.r, r); - copy_or_memcpy (ncols + 1, a.c, c); + 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); } ~SparseRep (void) { delete [] d; delete [] r; delete [] c; } @@ -213,8 +212,8 @@ { octave_idx_type nz = a.nnz (); std::copy (a.rep->d, a.rep->d + nz, rep->d); - copy_or_memcpy (nz, a.rep->r, rep->r); - copy_or_memcpy (rep->ncols + 1, a.rep->c, rep->c); + std::copy (a.rep->r, a.rep->r + nz, rep->r); + std::copy (a.rep->c, a.rep->c + rep->ncols + 1, rep->c); } // No type conversion case. diff -r 5db5619fe54e -r af41e41ad28e liboctave/array/boolSparse.cc --- a/liboctave/array/boolSparse.cc Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/array/boolSparse.cc Fri Dec 05 13:08:36 2014 +0100 @@ -35,7 +35,6 @@ #include "boolSparse.h" #include "dSparse.h" -#include "oct-mem.h" #include "oct-locbuf.h" #include "Sparse-op-defs.h" @@ -160,8 +159,8 @@ retval.xcidx (i+1) = retval.xcidx (i) + (cidx (i+1) > cidx (i)); octave_idx_type new_nz = retval.xcidx (nc); retval.change_capacity (new_nz); - fill_or_memset (new_nz, static_cast (0), retval.ridx ()); - fill_or_memset (new_nz, true, retval.data ()); + std::fill_n (retval.ridx (), new_nz, static_cast (0)); + std::fill_n (retval.data (), new_nz, true); } else if (dim == 1) { @@ -177,7 +176,7 @@ else { Array tmp (dim_vector (nz, 1)); - copy_or_memcpy (nz, ridx (), tmp.fortran_vec ()); + std::copy (ridx (), ridx () + nz, tmp.fortran_vec ()); retval = Sparse (Array (dim_vector (1, 1), true), idx_vector (tmp), idx_vector (static_cast (0)), @@ -206,7 +205,7 @@ retval.xcidx (i+1) = retval.xcidx (i) + (cidx (i+1) > cidx (i)); octave_idx_type new_nz = retval.xcidx (nc); retval.change_capacity (new_nz); - fill_or_memset (new_nz, static_cast (0), retval.ridx ()); + std::fill_n (retval.ridx (), new_nz, static_cast (0)); for (octave_idx_type i = 0, k = 0; i < nc; i++) { octave_idx_type c = cidx (i+1) - cidx (i); @@ -228,7 +227,7 @@ else { Array tmp (dim_vector (nz, 1)); - copy_or_memcpy (nz, ridx (), tmp.fortran_vec ()); + std::copy (ridx (), ridx () + nz, tmp.fortran_vec ()); retval = Sparse (Array (dim_vector (1, 1), 1.0), idx_vector (tmp), idx_vector (static_cast (0)), diff -r 5db5619fe54e -r af41e41ad28e liboctave/array/idx-vector.cc --- a/liboctave/array/idx-vector.cc Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/array/idx-vector.cc Fri Dec 05 13:08:36 2014 +0100 @@ -1093,7 +1093,7 @@ { idx_vector_rep * r = dynamic_cast (rep); const octave_idx_type *rdata = r->get_data (); - copy_or_memcpy (len, rdata, data); + std::copy (rdata, rdata + len, data); } break; diff -r 5db5619fe54e -r af41e41ad28e liboctave/array/idx-vector.h --- a/liboctave/array/idx-vector.h Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/array/idx-vector.h Fri Dec 05 13:08:36 2014 +0100 @@ -26,6 +26,7 @@ #define octave_idx_vector_h 1 #include +#include #include #include @@ -34,7 +35,6 @@ #include "dim-vector.h" #include "oct-inttypes.h" #include "oct-alloc.h" -#include "oct-mem.h" #include "oct-refcount.h" template class Array; @@ -631,7 +631,7 @@ switch (rep->idx_class ()) { case class_colon: - copy_or_memcpy (len, src, dest); + std::copy (src, src + len, dest); break; case class_range: @@ -641,7 +641,7 @@ octave_idx_type step = r->get_step (); const T *ssrc = src + start; if (step == 1) - copy_or_memcpy (len, ssrc, dest); + std::copy (ssrc, ssrc + len, dest); else if (step == -1) std::reverse_copy (ssrc - len + 1, ssrc + 1, dest); else if (step == 0) @@ -705,7 +705,7 @@ switch (rep->idx_class ()) { case class_colon: - copy_or_memcpy (len, src, dest); + std::copy (src, src + len, dest); break; case class_range: @@ -715,7 +715,7 @@ octave_idx_type step = r->get_step (); T *sdest = dest + start; if (step == 1) - copy_or_memcpy (len, src, sdest); + std::copy (src, src + len, sdest); else if (step == -1) std::reverse_copy (src, src + len, sdest - len + 1); else diff -r 5db5619fe54e -r af41e41ad28e liboctave/operators/mx-inlines.cc --- a/liboctave/operators/mx-inlines.cc Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/operators/mx-inlines.cc Fri Dec 05 13:08:36 2014 +0100 @@ -27,6 +27,7 @@ #include #include +#include #include #include "quit.h" diff -r 5db5619fe54e -r af41e41ad28e liboctave/util/module.mk --- a/liboctave/util/module.mk Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/util/module.mk Fri Dec 05 13:08:36 2014 +0100 @@ -26,7 +26,6 @@ util/oct-inttypes.h \ util/oct-locbuf.h \ util/oct-md5.h \ - util/oct-mem.h \ util/oct-mutex.h \ util/oct-refcount.h \ util/oct-rl-edit.h \ diff -r 5db5619fe54e -r af41e41ad28e liboctave/util/oct-binmap.h --- a/liboctave/util/oct-binmap.h Thu Dec 04 16:22:26 2014 -0500 +++ b/liboctave/util/oct-binmap.h Fri Dec 05 13:08:36 2014 +0100 @@ -226,8 +226,8 @@ { octave_idx_type nz = ys.nnz (); Sparse retval (ys.rows (), ys.cols (), nz); - copy_or_memcpy (nz, ys.ridx (), retval.ridx ()); - copy_or_memcpy (ys.cols () + 1, ys.cidx (), retval.cidx ()); + std::copy (ys.ridx (), ys.ridx () + nz, retval.ridx ()); + std::copy (ys.cidx (), ys.cidx () + ys.cols () + 1, retval.cidx ()); for (octave_idx_type i = 0; i < nz; i++) { @@ -257,8 +257,8 @@ { octave_idx_type nz = xs.nnz (); Sparse retval (xs.rows (), xs.cols (), nz); - copy_or_memcpy (nz, xs.ridx (), retval.ridx ()); - copy_or_memcpy (xs.cols () + 1, xs.cidx (), retval.cidx ()); + std::copy (xs.ridx (), xs.ridx () + nz, retval.ridx ()); + std::copy (xs.cidx (), xs.cidx () + xs.cols () + 1, retval.cidx ()); for (octave_idx_type i = 0; i < nz; i++) { diff -r 5db5619fe54e -r af41e41ad28e liboctave/util/oct-mem.h --- a/liboctave/util/oct-mem.h Thu Dec 04 16:22:26 2014 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -/* - -Copyright (C) 2009-2013 VZLU Prague - -This file is part of Octave. - -Octave is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 3 of the License, or (at your -option) any later version. - -Octave is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with Octave; see the file COPYING. If not, see -. - -*/ - -#if !defined (octave_oct_mem_h) -#define octave_oct_mem_h 1 - -#include -#include -#include - -#include "oct-cmplx.h" -#include "oct-inttypes.h" - -// NOTE: These functions are used to optimize stuff where performance is a -// priority. They assume that the std::complex and octave_int can be -// manipulated as plain memory, an assumption that is always true in practice -// but not theoretically guaranteed by the C++ standard. In the future, C++ may -// provide a better way to accomplish these tasks. - -inline size_t safe_size_comp (size_t n, size_t size) -{ - if (n > static_cast (-1) / size) - throw std::bad_alloc (); - return n * size; -} - -// Unaliased copy. This boils down to memcpy, even for octave_int and -// complex types. - -template -inline void copy_or_memcpy (size_t n, const T *src, T *dest) -{ std::copy (src, src + n, dest); } - -#define DEFINE_POD_UCOPY(T) \ -inline void copy_or_memcpy (size_t n, const T *src, T *dest) \ -{ std::memcpy (dest, src, n * sizeof (T)); } - -DEFINE_POD_UCOPY (double) -DEFINE_POD_UCOPY (float) -DEFINE_POD_UCOPY (char) -DEFINE_POD_UCOPY (short) -DEFINE_POD_UCOPY (int) -DEFINE_POD_UCOPY (long) -DEFINE_POD_UCOPY (unsigned char) -DEFINE_POD_UCOPY (unsigned short) -DEFINE_POD_UCOPY (unsigned int) -DEFINE_POD_UCOPY (unsigned long) - -DEFINE_POD_UCOPY (Complex) -DEFINE_POD_UCOPY (FloatComplex) - -template -DEFINE_POD_UCOPY (octave_int) - -// Fill by value, with a check for zero. This boils down to memset if value is -// a POD zero. -template -inline void fill_or_memset (size_t n, const T& value, T *dest) -{ std::fill_n (dest, n, value); } - -template -inline bool helper_is_zero_mem (const T& value) -{ - // get integer type of the same size. - typedef typename query_integer_type::type IT; - return *(reinterpret_cast(&value)) == 0; -} - -template -inline bool helper_is_zero_mem (const std::complex& value) -{ - return (helper_is_zero_mem (value.real ()) - && helper_is_zero_mem (value.imag ())); -} - -template -inline bool helper_is_zero_mem (const octave_int& value) -{ return value.value () == T (); } - -#define DEFINE_POD_FILL(T) \ -inline void fill_or_memset (size_t n, const T& value, T *dest) \ -{ \ - if (helper_is_zero_mem (value)) \ - std::memset (dest, 0, n * sizeof (T)); \ - else \ - std::fill_n (dest, n, value); \ -} - -DEFINE_POD_FILL (double) -DEFINE_POD_FILL (float) -DEFINE_POD_FILL (char) -DEFINE_POD_FILL (short) -DEFINE_POD_FILL (int) -DEFINE_POD_FILL (long) -DEFINE_POD_FILL (unsigned char) -DEFINE_POD_FILL (unsigned short) -DEFINE_POD_FILL (unsigned int) -DEFINE_POD_FILL (unsigned long) - -DEFINE_POD_FILL (Complex) -DEFINE_POD_FILL (FloatComplex) - -template -DEFINE_POD_FILL (octave_int) - -// Uninitialized allocation. -// Will not initialize memory for complex and octave_int. -// Memory allocated by octave_new should be freed by octave_delete. -template -inline T *no_ctor_new (size_t n) -{ - // Some systems let us allocate > 2GB memory even though size_t, which is - // either buggy or completely cuckoo, so let's check here to stay safe. - safe_size_comp (n, sizeof (T)); - return new T [n]; -} -template -inline void no_ctor_delete (T *ptr) -{ delete [] ptr; } - -#define DEFINE_POD_NEW_DELETE(T) \ -template <> \ -inline T *no_ctor_new (size_t n) \ -{ return reinterpret_cast (new char [safe_size_comp (n, sizeof (T))]); } \ -template <> \ -inline void no_ctor_delete (T *ptr) \ -{ delete [] reinterpret_cast (ptr); } - -DEFINE_POD_NEW_DELETE (Complex) -DEFINE_POD_NEW_DELETE (FloatComplex) - -DEFINE_POD_NEW_DELETE (octave_int8) -DEFINE_POD_NEW_DELETE (octave_int16) -DEFINE_POD_NEW_DELETE (octave_int32) -DEFINE_POD_NEW_DELETE (octave_int64) -DEFINE_POD_NEW_DELETE (octave_uint8) -DEFINE_POD_NEW_DELETE (octave_uint16) -DEFINE_POD_NEW_DELETE (octave_uint32) -DEFINE_POD_NEW_DELETE (octave_uint64) - -#endif /* octave_oct_mem_h */