Compile-time variadic equality
Nordlöw
per.nordlow at gmail.com
Sat Mar 10 08:49:19 UTC 2018
On Friday, 9 March 2018 at 22:13:39 UTC, Simen Kjærås wrote:
>> static if (allEqual!(staticMap!(ElementEncodingType, Rs)))
>> {
>> // compare Rs byCodeUnit
>> }
>
> NoDuplicates!V.length == 1
BTW, `NoDuplicates` can handle both types and values (mixed)
opposite to my `allSame` and `allSameType` defined as:
template allSame(V...)
if (isExpressions!V)
{
static if (V.length <= 1)
{
enum allSame = true;
}
else static if (V.length & 1) // odd count
{
enum allSame = (V[0] == V[$ - 1] && // first equals last
V[0 .. $/2] == V[$/2 .. $-1] && // (first
half) equals (second half minus last element)
allSame!(V[0 .. $/2]));
}
else // event count
{
enum allSame = (V[0 .. $/2] == V[$/2 .. $] && // (first
half) equals (second half)
allSame!(V[0 .. $/2]));
}
}
and
template allSameType(V...)
// TODO should have template restriction on `V`
{
static if (V.length <= 1)
{
enum allSameType = true;
}
else static if (V.length & 1) // odd count
{
enum allSameType = (is(V[0] == V[$ - 1]) && // first
equals last
is(V[0 .. $/2] == V[$/2 .. $-1]) &&
// (first half) equals (second half minus last element)
allSameType!(V[0 .. $/2]));
}
else // even count
{
enum allSameType = (is(V[0 .. $/2] == V[$/2 .. $]) && //
(first half) equals (second half)
allSameType!(V[0 .. $/2]));
}
}
How do I most conveniently merge these into one single `allSame`
that can operate on mixtures of values and types?
More information about the Digitalmars-d-learn
mailing list