You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add an optimization for:
Range2 copy(Range1, Range2)(Range1 source, Range2 target);
...to use the c function memmove when it is safe to do so and the two ranges overlap each other (when they don't overlap, a vectorized copy should be faster). As far as I can tell, it is safe to use memmove for copying source over target if all of the following are true:
1) Both ranges are arrays (static or dynamic)
2) Both arrays have the same element type
3) hasElaborateAssign!T is false for the element type T
I haven't benchmarked anything, but all the good C++ standard library implementations of std::copy seem to do this optimization, and I trust that they know what they are doing.
The text was updated successfully, but these errors were encountered:
(In reply to comment #0)
> Add an optimization for:> > Range2 copy(Range1, Range2)(Range1 source, Range2 target);> > ...to use the c function memmove when it is safe to do so and the two ranges> overlap each other (when they don't overlap, a vectorized copy should be> faster). As far as I can tell, it is safe to use memmove for copying source> over target if all of the following are true:> > 1) Both ranges are arrays (static or dynamic)> 2) Both arrays have the same element type> 3) hasElaborateAssign!T is false for the element type T> > I haven't benchmarked anything, but all the good C++ standard library> implementations of std::copy seem to do this optimization, and I trust that> they know what they are doing.
Also, the documentation for std.algorithm.copy should be changed to indicate that the ranges are allowed to overlap if the above conditions hold.
tommitissari reported this on 2013-06-18T05:24:34Z
Transfered from https://issues.dlang.org/show_bug.cgi?id=10402
Description
The text was updated successfully, but these errors were encountered: