[Issue 13797] New: std.array.extend
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sat Nov 29 05:44:38 PST 2014
https://issues.dlang.org/show_bug.cgi?id=13797
Issue ID: 13797
Summary: std.array.extend
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Severity: enhancement
Priority: P1
Component: Phobos
Assignee: nobody at puremagic.com
Reporter: bearophile_hugs at eml.cc
I suggest to add to Phobos a simple function like this, mainly useful to extend
dynamic arrays with a given lazy iterable (but this works with std.array.array
too):
void extend(A, R)(ref A arr, R iterable)
if (__traits(compiles, { foreach (item; iterable) arr ~= item; })) {
import std.range: hasLength;
static if (hasLength!R && hasLength!A)
arr.reserve(arr.length + iterable.length);
foreach (item; iterable)
arr ~= item;
}
void main() {
import std.stdio, std.range;
int[] arr;
arr.extend(only(1, 2, 3, 4));
writeln(arr);
static struct Gen5 {
int opApply(int delegate(ref int) dg) {
int result;
foreach (i; 0 .. 5) {
result = dg(i);
if (result)
break;
}
return result;
}
}
arr.extend(Gen5());
writeln(arr);
import std.container: Array;
Array!int arr2;
writeln(arr2[]);
arr2.extend(only(1, 2, 3, 4));
writeln(arr2[]);
}
--
More information about the Digitalmars-d-bugs
mailing list