Consolidate overloads of copy()

This commit is contained in:
Andrei Alexandrescu 2019-03-27 22:28:59 -04:00
parent ba490f4d7b
commit 439b9a701b

View file

@ -366,8 +366,10 @@ Returns:
The unfilled part of target
*/
TargetRange copy(SourceRange, TargetRange)(SourceRange source, TargetRange target)
if (areCopyCompatibleArrays!(SourceRange, TargetRange))
if (isInputRange!SourceRange && isOutputRange!(TargetRange, ElementType!SourceRange))
{
static if (areCopyCompatibleArrays!(SourceRange, TargetRange))
{
const tlen = target.length;
const slen = source.length;
assert(tlen >= slen,
@ -391,14 +393,9 @@ if (areCopyCompatibleArrays!(SourceRange, TargetRange))
target[0 .. slen] = source[];
return target[slen .. $];
}
}
/// ditto
TargetRange copy(SourceRange, TargetRange)(SourceRange source, TargetRange target)
if (!areCopyCompatibleArrays!(SourceRange, TargetRange) &&
isInputRange!SourceRange &&
isOutputRange!(TargetRange, ElementType!SourceRange))
{
}
else
{
// Specialize for 2 random access ranges.
// Typically 2 random access ranges are faster iterated by common
// index than by x.popFront(), y.popFront() pair
@ -419,6 +416,7 @@ if (!areCopyCompatibleArrays!(SourceRange, TargetRange) &&
put(target, element);
return target;
}
}
}
///