tweaks in fill(val), fill(range) and copy() #802
Closed
+172
−74
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
These are TENTATIVE changes, and I think should be discussed.
This does NOT change any document existing behavior.
This change rational is in this post:
http://forum.dlang.org/thread/oiczxzkzxketxitncghl@forum.dlang.org