ewmscp  ..
enumAsBitmask.h
Go to the documentation of this file.
1 #ifndef __enumAsBitmask_h_
2 #define __enumAsBitmask_h_
3 #include<type_traits>
4 
5 template <typename T> class enumAsBitmask {
6  typename std::underlying_type<T>::type bits;
7  public:
8  typedef T enumType;
10  bits(0) {
11  }
12  enumAsBitmask(const T& aBits) :
13  bits(static_cast<decltype(bits)>(aBits)) {
14  }
15  typename std::underlying_type<T>::type asBits() const {
16  return bits;
17  }
18  enumAsBitmask operator&(const T& aBits) const {
19  enumAsBitmask state;
20  state.bits = this->bits & static_cast<decltype(bits)>(aBits);
21  return state;
22  }
24  bits |= rhs.bits;
25  return *this;
26  }
27  enumAsBitmask operator|=(const T& aBits) {
28  this->bits |= static_cast<decltype(bits)>(aBits);
29  return *this;
30  }
31  void clear(const T aBits) {
32  this->bits &= ~static_cast<decltype(bits)>(aBits);
33  }
34  void set(const T aBits) {
35  this->bits |= static_cast<decltype(bits)>(aBits);
36  }
37  operator bool() const {
38  return this->bits != 0;
39  }
40 };
41 
42 #endif
enumAsBitmask::operator&
enumAsBitmask operator&(const T &aBits) const
Definition: enumAsBitmask.h:18
enumAsBitmask::bits
std::underlying_type< T >::type bits
Definition: enumAsBitmask.h:6
enumAsBitmask::enumAsBitmask
enumAsBitmask(const T &aBits)
Definition: enumAsBitmask.h:12
enumAsBitmask::operator|=
enumAsBitmask operator|=(const T &aBits)
Definition: enumAsBitmask.h:27
enumAsBitmask::enumType
T enumType
Definition: enumAsBitmask.h:8
enumAsBitmask::asBits
std::underlying_type< T >::type asBits() const
Definition: enumAsBitmask.h:15
enumAsBitmask::set
void set(const T aBits)
Definition: enumAsBitmask.h:34
enumAsBitmask
Definition: enumAsBitmask.h:5
enumAsBitmask::clear
void clear(const T aBits)
Definition: enumAsBitmask.h:31
enumAsBitmask::operator|
enumAsBitmask operator|(const enumAsBitmask &rhs)
Definition: enumAsBitmask.h:23
enumAsBitmask::enumAsBitmask
enumAsBitmask()
Definition: enumAsBitmask.h:9