shifting array slices

Jonathan M Davis jmdavisProg at gmx.com
Sat Feb 11 10:30:43 PST 2012


On Saturday, February 11, 2012 12:09:32 Ellery Newcomer wrote:
> I'm pretty sure this used to work:
> 
> import std.algorithm;
> 
> int[] ra;
> copy(ra[5 .. 10], ra[4 .. 9]);
> 
> and would correctly shift the range [5 .. 10] down one
> (unlike ra[4 .. 9] = ra[5 .. 10], which is prohibited by spec)
> 
> In dmd 2.057 of course it doesn't work; is this a bug or should I be
> looking elsewhere for this functionality?

copy uses array copying if it can, which is what I would expect it to do. In 
fact, a comment in copy's source states that doing so results in a 10x - 20x 
improvement in speed over the generic implementation. So, I would say that 
it's safe to say that you can't use copy to copy overlapping arrays. I'm not 
even sure it's a good idea to use overlapping ranges. I haven't dealt with 
output ranges enough to say without studying up on them again.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list