Thread overview
Iterate over enum
Apr 18, 2015
HaraldZealot
Apr 18, 2015
Ali Çehreli
Apr 18, 2015
HaraldZealot
Apr 20, 2015
Per Nordlöw
April 18, 2015
Is it possible iterate over enum (preferable in compile time) or at least check that particular value belong to enum?
April 18, 2015
On 04/18/2015 01:30 PM, HaraldZealot wrote:
> Is it possible iterate over enum (preferable in compile time) or at
> least check that particular value belong to enum?

EnumMembers:

  http://dlang.org/phobos/std_traits.html#EnumMembers

It returns a "static tuple", meaning that a foreach over those members will be a compile-time foreach. (No loop at all at run-time, the body is unrolled for every member.)

Ali

April 18, 2015
On Saturday, 18 April 2015 at 20:42:09 UTC, Ali Çehreli wrote:
> On 04/18/2015 01:30 PM, HaraldZealot wrote:
>> Is it possible iterate over enum (preferable in compile time) or at
>> least check that particular value belong to enum?
>
> EnumMembers:
>
>   http://dlang.org/phobos/std_traits.html#EnumMembers
>
> It returns a "static tuple", meaning that a foreach over those members will be a compile-time foreach. (No loop at all at run-time, the body is unrolled for every member.)
>
> Ali

Many thanks
April 20, 2015
On Saturday, 18 April 2015 at 21:11:28 UTC, HaraldZealot wrote:
> On Saturday, 18 April 2015 at 20:42:09 UTC, Ali Çehreli wrote:
>> On 04/18/2015 01:30 PM, HaraldZealot wrote:
>>> Is it possible iterate over enum (preferable in compile time) or at
>>> least check that particular value belong to enum?
>>
>> EnumMembers:
>>
>>  http://dlang.org/phobos/std_traits.html#EnumMembers
>>
>> It returns a "static tuple", meaning that a foreach over those members will be a compile-time foreach. (No loop at all at run-time, the body is unrolled for every member.)
>>
>> Ali
>
> Many thanks

If you want a dynamic version use

    [EnumMembers!T]

or without enumerator aliases (enumerator value duplicate)

    import std.traits: EnumMembers;
    import std.algorithm: sort, uniq;
    return [EnumMembers!T].sort().uniq;

I've turned this into enumMembers at

https://github.com/nordlow/justd/blob/master/traits_ex.d#L396

This prevents the foreach loop from being inlined. I've had problems with compilation performance with nested foreach-iterating over EnumMembers!T with 100s of elements.