[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

Reply via email to