meta.metafunction: Add Enumerate and EnumerateFrom
This commit is contained in:
parent
0a2798cc96
commit
4566cf7857
@ -1801,3 +1801,62 @@ if (T.length == 2)
|
|||||||
static assert(is(Select!(true, int, float) == int));
|
static assert(is(Select!(true, int, float) == int));
|
||||||
static assert(is(Select!(false, int, float) == float));
|
static assert(is(Select!(false, int, float) == float));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attaces a numeric index to each element from $(D_PARAM Args).
|
||||||
|
*
|
||||||
|
* $(D_PSYMBOL EnumerateFrom) returns a sequence of tuples ($(D_PSYMBOL Pack)s)
|
||||||
|
* consisting of the index of each element and the element itself.
|
||||||
|
*
|
||||||
|
* Params:
|
||||||
|
* start = Enumeration initial value.
|
||||||
|
* Args = Enumerated sequence.
|
||||||
|
*
|
||||||
|
* See_Also: $(D_PSYMBOL Enumerate).
|
||||||
|
*/
|
||||||
|
template EnumerateFrom(size_t start, Args...)
|
||||||
|
{
|
||||||
|
static if (Args.length == 0)
|
||||||
|
{
|
||||||
|
alias EnumerateFrom = AliasSeq!();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
alias EnumerateFrom = AliasSeq!(Pack!(start, Args[0]), EnumerateFrom!(start + 1, Args[1 .. $]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
@nogc nothrow pure @safe unittest
|
||||||
|
{
|
||||||
|
static assert(EnumerateFrom!(0, int, uint, bool).length == 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
@nogc nothrow pure @safe unittest
|
||||||
|
{
|
||||||
|
alias Expected = AliasSeq!(Pack!(cast(size_t) 0, int),
|
||||||
|
Pack!(cast(size_t) 1, uint));
|
||||||
|
static assert(is(EnumerateFrom!(0, int, uint) == Expected));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attaces a numeric index to each element from $(D_PARAM Args).
|
||||||
|
*
|
||||||
|
* $(D_PSYMBOL EnumerateFrom) returns a sequence of tuples ($(D_PSYMBOL Pack)s)
|
||||||
|
* consisting of the index of each element and the element itself.
|
||||||
|
*
|
||||||
|
* Params:
|
||||||
|
* Args = Enumerated sequence.
|
||||||
|
*
|
||||||
|
* See_Also: $(D_PSYMBOL EnumerateFrom).
|
||||||
|
*/
|
||||||
|
alias Enumerate(Args...) = EnumerateFrom!(0, Args);
|
||||||
|
|
||||||
|
///
|
||||||
|
@nogc nothrow pure @safe unittest
|
||||||
|
{
|
||||||
|
alias Expected = AliasSeq!(Pack!(cast(size_t) 0, int),
|
||||||
|
Pack!(cast(size_t) 1, uint));
|
||||||
|
static assert(is(Enumerate!(int, uint) == Expected));
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user