digitalmars.D.learn - rank of range
- drug (5/5) Jul 01 2017 Hello!
- =?UTF-8?Q?Ali_=c3=87ehreli?= (18/23) Jul 01 2017 I'm not aware of one but this seems to work:
- drug (3/34) Jul 01 2017 That's what I've done exactly)) Except I didn't tested against long.
Hello! Is there a convenient way to get rank of range a.k.a. count of dimensions in compile time? Like: static assert( rankOf!(uint[]) == 1); static assert( rankOf!(uint[][][]) == 3);
Jul 01 2017
On 07/01/2017 10:05 AM, drug wrote:Hello! Is there a convenient way to get rank of range a.k.a. count of dimensions in compile time? Like: static assert( rankOf!(uint[]) == 1); static assert( rankOf!(uint[][][]) == 3);I'm not aware of one but this seems to work: template rankOf(R) { import std.range : isInputRange, ElementType; static if (isInputRange!R) { enum rankOf = rankOf!(ElementType!R) + 1; } else { enum rankOf = 0; } } unittest { static assert (rankOf!long == 0); static assert (rankOf!(int[]) == 1); static assert (rankOf!(int[][][]) == 3); } void main() { } Ali
Jul 01 2017
01.07.2017 20:33, Ali Çehreli пишет:On 07/01/2017 10:05 AM, drug wrote:That's what I've done exactly)) Except I didn't tested against long. Thanks for reply!Hello! Is there a convenient way to get rank of range a.k.a. count of dimensions in compile time? Like: static assert( rankOf!(uint[]) == 1); static assert( rankOf!(uint[][][]) == 3);I'm not aware of one but this seems to work: template rankOf(R) { import std.range : isInputRange, ElementType; static if (isInputRange!R) { enum rankOf = rankOf!(ElementType!R) + 1; } else { enum rankOf = 0; } } unittest { static assert (rankOf!long == 0); static assert (rankOf!(int[]) == 1); static assert (rankOf!(int[][][]) == 3); } void main() { } Ali
Jul 01 2017