From 15f6382666564b445f0354c3563c9944eb8fd5b1 Mon Sep 17 00:00:00 2001 From: Andrei Alexandrescu Date: Wed, 5 May 2021 13:23:44 -0400 Subject: [PATCH] Use alias assignment in Stride --- std/meta.d | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/std/meta.d b/std/meta.d index 2ec601276f8..f8d59f693f2 100644 --- a/std/meta.d +++ b/std/meta.d @@ -1691,23 +1691,16 @@ Returns: An `AliasSeq` filtered by the selected stride. template Stride(int stepSize, Args...) if (stepSize != 0) { - static if (Args.length == 0) + alias Stride = AliasSeq!(); + static if (stepSize > 0) { - alias Stride = AliasSeq!(); - } - else static if (stepSize > 0) - { - static if (stepSize >= Args.length) - alias Stride = AliasSeq!(Args[0]); - else - alias Stride = AliasSeq!(Args[0], Stride!(stepSize, Args[stepSize .. $])); + static foreach (i; 0 .. (Args.length + stepSize - 1) / stepSize) + Stride = AliasSeq!(Stride, Args[i * stepSize]); } else { - static if (-stepSize >= Args.length) - alias Stride = AliasSeq!(Args[$ - 1]); - else - alias Stride = AliasSeq!(Args[$ - 1], Stride!(stepSize, Args[0 .. $ + stepSize])); + static foreach (i; 0 .. (Args.length - stepSize - 1) / -stepSize) + Stride = AliasSeq!(Stride, Args[$ - 1 + i * stepSize]); } }