Appending static arrays
Nordlöw via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jul 17 15:32:14 PDT 2017
On Monday, 17 July 2017 at 20:01:41 UTC, H. S. Teoh wrote:
> OK, here's an actual, compilable, runnable version:
>
> import std.algorithm : sum;
> import std.meta : allSatisfy, staticMap;
> import std.range : only;
> import std.traits : CommonType, isStaticArray;
>
> alias Elem(A : E[n], E, size_t n) = E;
> enum Length(A) = A.length;
> enum sumLengths(A...) = sum(only(0, staticMap!(Length, A)));
>
> CommonType!(staticMap!(Elem, A))[sumLengths!A] append(A...)(A
> arrays)
> if (allSatisfy!(isStaticArray, A))
> {
> typeof(return) result = void;
> foreach (i, a; arrays) {
> enum offset = sumLengths!(A[0 .. i]);
> result[offset .. offset + a.length] = a[];
This slice assignment doesn't support conversion between
different element-types, for instance from `int[]` to `double[]`.
But I'm not convinced that we should allow `CommonType` when
operator ~ doesn't.
More information about the Digitalmars-d-learn
mailing list