Mercurial > hg > octave-nkf
diff liboctave/Sparse-perm-op-defs.h @ 12424:afb65a7bc065
update NEWS
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 09 Feb 2011 16:26:35 -0500 |
parents | fd0a3ac60b0e |
children | e81ddf9cacd5 |
line wrap: on
line diff
--- a/liboctave/Sparse-perm-op-defs.h +++ b/liboctave/Sparse-perm-op-defs.h @@ -34,16 +34,26 @@ const octave_idx_type nent = a.nnz (); SM r (nr, nc, nent); - for (octave_idx_type k = 0; k < nent; ++k) - { - octave_quit (); - r.xridx (k) = pcol[a.ridx (k)]; - r.xdata (k) = a.data (k); - } + octave_sort<octave_idx_type> sort; + for (octave_idx_type j = 0; j <= nc; ++j) r.xcidx (j) = a.cidx (j); - r.maybe_compress (false); + for (octave_idx_type j = 0; j < nc; j++) + { + octave_quit (); + + OCTAVE_LOCAL_BUFFER (octave_idx_type, sidx, r.xcidx(j+1) - r.xcidx(j)); + for (octave_idx_type i = r.xcidx(j), ii = 0; i < r.xcidx(j+1); i++) + { + sidx[ii++]=i; + r.xridx (i) = pcol[a.ridx (i)]; + } + sort.sort (r.xridx() + r.xcidx(j), sidx, r.xcidx(j+1) - r.xcidx(j)); + for (octave_idx_type i = r.xcidx(j), ii = 0; i < r.xcidx(j+1); i++) + r.xdata(i) = a.data (sidx[ii++]); + } + return r; } @@ -105,7 +115,6 @@ } assert (k_src == nent); - r.maybe_compress (false); return r; } @@ -141,7 +150,6 @@ } assert (k == nent); - r.maybe_compress (false); return r; }