[EMAIL PROTECTED] (Lars Gullik Bjønnes) writes:
| right there.
| (I have a slightly more updated version in my tree, but it is far from
| finished yet.)
And this is a more updated version:
template <class E>
class EnumSet {
public:
EnumSet() : e_(static_cast<E>(0)) {}
EnumSet(E val) : e_(val) {};
EnumSet & set() { e_ = ~0; }
EnumSet & set(E v) { e_ = static_cast<E>(e_ | v); }
EnumSet & reset() { e_ = 0; }
EnumSet & reset(E v) { e_ = static_cast<E>(e_ & ~v); }
bool test(E v) {
return e_ & v; }
bool any() const { return e_ != 0; }
bool none() const { return e_ == 0; }
E val() const { return e_; }
private:
E e_;
};
template <class E>
E operator&(E e1, E e2)
{
return static_cast<E>(static_cast<int>(e1) & static_cast<int>(e2));
}
template <class E>
E operator|(E e1, E e2)
{
return static_cast<E>(static_cast<int>(e1) | static_cast<int>(e2));
}
I am not sure how safe those template operators are.
--
Lgb