Jose Abilio Oliveira Matos <[EMAIL PROTECTED]> writes:
| This is my code, I will replace it tonight, unless someone beats
| me first.
I have some helper classes that can be useful, but not quite finished
and tested yet:
template <class E>
class EnumSet {
public:
EnumSet() : e_(static_cast<E>(0)) {}
EnumSet(E val) : e_(val) {};
EnumSet & operator&=(EnumSet const & s);
EnumSet & operator|=(EnumSet const & s);
EnumSet & operator^=(EnumSet const & s);
EnumSet & set() { e_ = ~0; }
EnumSet & set(E v) { e_ = static_cast<E>(e_ | v); }
EnumSet & reset() { e_ = 0; }
EnumSet & reset(E v) { e_ &= ~v; }
EnumSet & flip() { e_ = ~e_; }
EnumSet operator~() const { return EnumSet(~e_); }
bool operator==(EnumSet const & s) const { return e_ == s.e_; }
bool operator!=(EnumSet const & s) const { return e_ != s.e_; }
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_;
};
--
Lgb