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