Copying array with const correctness
Vindex9
tech.vindex at gmail.com
Sun Sep 6 12:35:56 UTC 2026
More versatile:
```d
T[] copyArray(T)(inout(T)[] arr) {
if (arr.length == 0) {
return null;
}
T[] copy;
static if (is(T == U[], U) && !is(T == immutable(Y)[], Y)) {
copy = new T[arr.length];
foreach(i, ref v; copy) {
v = copyArray(arr[i]);
}
} else static if (is(T == immutable(W)[], W)) {
copy = new T[arr.length];
foreach (i, ref elem; arr) {
copy[i] = elem.idup;
}
} else {
void* raw = GC.calloc(T.sizeof * arr.length, 0,
typeid(T));
copy = (cast(T*) raw)[0 .. arr.length];
foreach(i, ref dest; copy) {
core.lifetime.copyEmplace(arr[i], dest);
}
}
return copy;
}
```
More information about the Digitalmars-d-learn
mailing list