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.

Reply via email to