On Monday, 16 December 2013 at 21:45:40 UTC, Walter Bright wrote:
uint among(T, Us...)(T v, Us vals) { foreach (i, U; Us) { if (v == vals[i]) return i + 1; } return 0; }This has O(n) behavior, which might be unexpected for the user.
I would expect one table-lookup for this if vals contains strings, not N ifs. If you look at the example, most of them could be done with perfect hashing on a single character.
Is it possible for the compiler/template system to turn this into a switch/dictionary? Or is there something in the language/compiler that makes that impossible?
(I am not trying to be clever, I am curious)
