Re: rank of range

2017-07-01 Thread drug via Digitalmars-d-learn

01.07.2017 20:33, Ali Çehreli пишет:

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


That's what I've done exactly)) Except I didn't tested against long.
Thanks for reply!


Re: rank of range

2017-07-01 Thread Ali Çehreli via Digitalmars-d-learn

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



rank of range

2017-07-01 Thread drug via Digitalmars-d-learn

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);