D-Programming-Language/phobos — pull request #802 by monarchdodra (2012-09-18 15:04:17+00:00)
Title: tweaks in fill(val), fill(range) and copy()

Originally meant as a couple of improvements in copy, fill(val) and fill(range):
*Removing case in fill(range) for infinite ranges with slicing. Also removing lots of un-needed stuff when forwarding to copy, as copy is only optimized in case of arrays.
*Re-writing fill(val) to use opSliceAssign, instead of relying on mem-copies. This makes it more simple and more efficient
*Added a case for optimized array copy even with overlap (copy by bands of non-overlap).

While I was on the subject, I've formalized the effect of these methods on reference semantics range: As a general rule:
"source" is always advanced
"target" is not advanced, if possible (target is RA with length). Other wise, it is advanced.

This does NOT change any document existing behavior.

This change rational is in this post: