26.09.2012 21:52, Dmitry Olshansky пишет:
On 26-Sep-12 21:39, Denis Shelomovskij wrote:
25.09.2012 21:14, Denis Shelomovskij пишет:
.NET has FlagsAttribute, Java has EnumSet. Looks like we need this too.
How about to add a library solution to Phobos?

My variant is here (search for `flagEnum`):
https://bitbucket.org/denis_sh/misc/src/tip/stdd/typecons.d

It has a bug and I have no idea how to fix it:
`AB.init |= AB.a` and `AB.a |= AB.a` are allowed.
(no, we can't make `AB.a` const to disallow the second case because it
will disallow this: `auto a = AB.a; a |= AB.a;`)

Also I'm not sure:
* Should we support converting from a number to a flag enum?

I'd suggest an explicit way to do so. Like to!(flagEnum) or a standalone
helpers.

* If so, should we support values not from enum flags or throw
exceptions (it may be configurable)?
If to! is used I guess throw exceptions if it doesn't fit.

* Is `flagEnum` an appropriate name?

Since it's a type (right?) I'd think EnumFlag, FlagSet or even Java's
EnumSet. Generally I think I like words 'set' and/or 'flag' in the name.

OK. Looks like such functionality isn't needed and I don't have to do a
pull request. What about to close
http://d.puremagic.com/issues/show_bug.cgi?id=6946
with WONTFIX?

First, calm down. Second, I, for one, like it.

Thanks for the answer, but still there are only few guys here interesting in it to be included in Phobos, so WONTFIX-ing the issue looks reasonable. I can just support this struct in my library for you.

The place to go is most likely std.bitmanip or std.typecons. I haven't
looked much at the actual code but the usage seems straightforward.

Another thought is to generalize it to something beyond 1-bit flags. How
about packing various flags (set of 3-state flag, 4-state flag  etc.) in
one fixed struct?

Please give me usage examples (unittests), and I will implement the functionality. Now I don't understand what are n-state flags and what is the difference with std.bitmanip.bitfields.

--
Денис В. Шеломовский
Denis V. Shelomovskij

Reply via email to