Is flags enum needed in Phobos?

Denis Shelomovskij verylonglogin.reg at gmail.com
Sun Oct 7 02:10:13 PDT 2012


06.10.2012 23:50, Era Scarecrow пишет:
> On Wednesday, 26 September 2012 at 19:11:37 UTC, bearophile wrote:
>> I think it's a good idea to have a well written EnumFlags data
>> structure in Phobos. In C# this feature is even built-in. So issue
>> 6946 is not closing, unless Andrei or Walter decide it's a bad idea to
>> have something like this in Phobos.
>
>   I've written one I believe if sufficient and am using in my current
> project. I'll add more to my branch as time goes on.
>
> https://github.com/rtcvb32/Side-Projects
>
>   example in documentation
>
> [code]
>    enum ETEST {none = 0, one = 1, two = 2, three = 3, four = 4}
>    handle_flags!(ETEST, int) ftest;
>
>    ftest.set_flag(ETEST.two);    //check flag setting
>    assert(ftest.state == 2);    //int and enum compares.
>    assert(ftest.state == ETEST.two);
>
>    ftest.set_flag(ETEST.four);    //set second flag
>    assert(ftest.state == 6);    //2+4, no 6 enum.
>
>    //Flags can also encompass multiple bits.
>    //in this case all bits returned with an
>    //AND must match the flag.
>    ftest.state = 1;
>    assert(!ftest.checkAll(one, two, three));  //can't be true, only 1 is
> there
>    ftest.state = 3;
>    assert(ftest.checkAll(one, two, three));   //must be true, since 1+2
> includes 3.
> [/code]
>
>   Feel free to scrutinize and offer suggestions.
>
>   Although it doesn't appear to be mentioned, you can also shorthand the
> flag with your alias. So ftest.one would be the same as ETEST.one or
> ftest.Enum.one. I recommend using with when you are using such flags.

I'd like to see enum syntax for flug enum. So I dislike function calls 
like `set_flag`, `checkAll`, etc. (IMHO)
-- 
Денис В. Шеломовский
Denis V. Shelomovskij


More information about the Digitalmars-d mailing list