Skip to content

Commit a90f857

Browse files
committed
reduce ndslice template bloat part 2
1 parent c39ec4c commit a90f857

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

std/experimental/ndslice/internal.d

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,8 @@ private bool isValidPartialPermutationImpl(size_t N)(in size_t[] perm, ref int[N
477477
return true;
478478
}
479479

480+
enum toSize_t(size_t i) = i;
481+
enum isSize_t(alias i) = is(typeof(i) == size_t);
480482
enum isIndex(I) = is(I : size_t);
481483
enum is_Slice(S) = is(S : _Slice);
482484

std/experimental/ndslice/iteration.d

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,9 @@ See_also: $(LREF swapped), $(LREF everted)
410410
template transposed(Dimensions...)
411411
if (Dimensions.length)
412412
{
413+
static if (!allSatisfy!(isSize_t, Dimensions))
414+
alias transposed = .transposed!(staticMap!(toSize_t, Dimensions));
415+
else
413416
@fmb Slice!(N, Range) transposed(size_t N, Range)(Slice!(N, Range) slice)
414417
{
415418
mixin DimensionsCountCTError;
@@ -537,6 +540,9 @@ Returns:
537540
template reversed(Dimensions...)
538541
if (Dimensions.length)
539542
{
543+
static if (!allSatisfy!(isSize_t, Dimensions))
544+
alias reversed = .reversed!(staticMap!(toSize_t, Dimensions));
545+
else
540546
@fmb auto reversed(size_t N, Range)(Slice!(N, Range) slice)
541547
{
542548
foreach (i, dimension; Dimensions)
@@ -642,6 +648,9 @@ Returns:
642648
template strided(Dimensions...)
643649
if (Dimensions.length)
644650
{
651+
static if (!allSatisfy!(isSize_t, Dimensions))
652+
alias strided = .strided!(staticMap!(toSize_t, Dimensions));
653+
else
645654
@fmb auto strided(size_t N, Range)(Slice!(N, Range) slice, Repeat!(Dimensions.length, size_t) factors)
646655
body
647656
{
@@ -868,6 +877,9 @@ Returns:
868877
template dropOne(Dimensions...)
869878
if (Dimensions.length)
870879
{
880+
static if (!allSatisfy!(isSize_t, Dimensions))
881+
alias dropOne = .dropOne!(staticMap!(toSize_t, Dimensions));
882+
else
871883
@fmb Slice!(N, Range) dropOne(size_t N, Range)(Slice!(N, Range) slice)
872884
{
873885
foreach (i, dimension; Dimensions)
@@ -900,6 +912,9 @@ body
900912
template dropBackOne(Dimensions...)
901913
if (Dimensions.length)
902914
{
915+
static if (!allSatisfy!(isSize_t, Dimensions))
916+
alias dropBackOne = .dropBackOne!(staticMap!(toSize_t, Dimensions));
917+
else
903918
@fmb Slice!(N, Range) dropBackOne(size_t N, Range)(Slice!(N, Range) slice)
904919
{
905920
foreach (i, dimension; Dimensions)
@@ -987,6 +1002,9 @@ Returns:
9871002
template dropExactly(Dimensions...)
9881003
if (Dimensions.length)
9891004
{
1005+
static if (!allSatisfy!(isSize_t, Dimensions))
1006+
alias dropExactly = .dropExactly!(staticMap!(toSize_t, Dimensions));
1007+
else
9901008
@fmb Slice!(N, Range) dropExactly(size_t N, Range)(Slice!(N, Range) slice, Repeat!(Dimensions.length, size_t) ns)
9911009
body
9921010
{
@@ -1015,6 +1033,9 @@ body
10151033
template dropBackExactly(Dimensions...)
10161034
if (Dimensions.length)
10171035
{
1036+
static if (!allSatisfy!(isSize_t, Dimensions))
1037+
alias dropBackExactly = .dropBackExactly!(staticMap!(toSize_t, Dimensions));
1038+
else
10181039
@fmb Slice!(N, Range) dropBackExactly(size_t N, Range)(Slice!(N, Range) slice, Repeat!(Dimensions.length, size_t) ns)
10191040
body
10201041
{
@@ -1076,6 +1097,9 @@ Returns:
10761097
template drop(Dimensions...)
10771098
if (Dimensions.length)
10781099
{
1100+
static if (!allSatisfy!(isSize_t, Dimensions))
1101+
alias drop = .drop!(staticMap!(toSize_t, Dimensions));
1102+
else
10791103
@fmb Slice!(N, Range) drop(size_t N, Range)(Slice!(N, Range) slice, Repeat!(Dimensions.length, size_t) ns)
10801104
body
10811105
{
@@ -1104,6 +1128,9 @@ body
11041128
template dropBack(Dimensions...)
11051129
if (Dimensions.length)
11061130
{
1131+
static if (!allSatisfy!(isSize_t, Dimensions))
1132+
alias dropBack = .dropBack!(staticMap!(toSize_t, Dimensions));
1133+
else
11071134
@fmb Slice!(N, Range) dropBack(size_t N, Range)(Slice!(N, Range) slice, Repeat!(Dimensions.length, size_t) ns)
11081135
body
11091136
{

std/experimental/ndslice/selection.d

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ Returns:
7575
+/
7676
template pack(K...)
7777
{
78+
static if (!allSatisfy!(isSize_t, K))
79+
alias pack = .pack!(staticMap!(toSize_t, K));
80+
else
7881
@fmb auto pack(size_t N, Range)(Slice!(N, Range) slice)
7982
{
8083
template Template(size_t NInner, Range, R...)

0 commit comments

Comments
 (0)