On Monday, 17 July 2017 at 17:38:23 UTC, Nordlöw wrote:
I'm want to define a specialization of `append()` that takes only static arrays as inputs and returns a static array being the sum of the lengths of the inputs.

Have anybody already implemented this?

If not, I'm specifically interested in how to most conveniently infer the length (as an enum) of the returned static array from the `.length`s of inputs (which of course must be enum-values too).

My recursive version:

auto concat(T, size_t N, ARRS...)(auto ref T[N] a, auto ref ARRS arrs) {
    static if(arrs.length == 0) {
        return a;
    } else {
        T[N + arrs[0].length] r = void;
        r[0..N] = a[];
        r[N..$] = arrs[0][];
        return concat(r, arrs[1..$]);
    }
}

unittest {
    int[3] a1 = [1, 2, 3];
    int[3] a2 = [4, 5, 6];
    int[3] a3 = [7, 8, 9];

    static assert(is(typeof(concat(a1)) == int[3]));
    assert(concat(a1) == [1, 2, 3]);

    static assert(is(typeof(concat(a1, a2, a3)) == int[9]));
    assert(concat(a1, a2, a3) == [1, 2, 3, 4, 5, 6, 7, 8, 9]);
}

Reply via email to