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

Reply via email to