Thread overview | ||||||
---|---|---|---|---|---|---|
|
April 18, 2015 Iterate over enum | ||||
---|---|---|---|---|
| ||||
Is it possible iterate over enum (preferable in compile time) or at least check that particular value belong to enum? |
April 18, 2015 Re: Iterate over enum | ||||
---|---|---|---|---|
| ||||
Posted in reply to HaraldZealot | 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 Re: Iterate over enum | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | 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 Re: Iterate over enum | ||||
---|---|---|---|---|
| ||||
Posted in reply to HaraldZealot | 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. |
Copyright © 1999-2021 by the D Language Foundation