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

Reply via email to