On Friday, 25 January 2019 at 15:53:10 UTC, Thomas Gregory wrote:
I would like to check that a char (unknown at compile time)
matches a particular type but I would like to do so without if
statements or a hash map as I would like it to be as fast as
possible.
Ideally I would choose something like this:
enum typeIndex{
byte = 0,
ubyte,
short,
ushort,
int,
uint
}
char[6] typechars="cCsSiI";
bool check(T)(char c){
return typechars[typeIndex(typeof(T))]==c;
}
Though I know this is implementation is not remotely correct D.
You can do this with AliasSeq and staticIndexOf:
import std.meta;
alias Types = AliasSeq!(byte, ubyte, short, ushort, int, uint);
enum typeIndex(T) = staticIndexOf!(T, Types);
char[6] typechars="cCsSiI";
bool check(T)(char c) {
return typechars[typeIndex!T] == c;
}
Runnable version: https://run.dlang.io/is/Tps38K