27 #include <type_traits>
30 #ifndef DOXYGEN_SHOULD_SKIP_THIS
77 : m_data(
static_cast<Type>(e))
88 return Flags(~m_data);
98 m_data |= flags.m_data;
109 m_data &= flags.m_data;
129 return (m_data &
static_cast<Type>(flag)) != 0;
138 m_data |=
static_cast<Type>(flag);
147 m_data &= ~
static_cast<Type>(flag);
151 using Type =
typename std::underlying_type<E>::type;
226 #ifndef DOXYGEN_SHOULD_SKIP_THIS
230 #ifndef DOXYGEN_SHOULD_SKIP_THIS
233 struct EnableBitmaskOperators {
234 static constexpr bool value =
false;
241 #ifndef DOXYGEN_SHOULD_SKIP_THIS
243 typename std::enable_if<
gf::EnableBitmaskOperators<E>::value,
gf::
Flags<E>>::type
244 operator|(E lhs, E rhs){
251 typename std::enable_if<
gf::EnableBitmaskOperators<E>::value,
gf::
Flags<E>>::type
252 operator&(E lhs, E rhs){
Flags< E > & operator|=(const Flags< E > &flags)
Binary OR and assignment.
Definition: Flags.h:97
operator bool() const
Test if any flag is set.
Definition: Flags.h:118
Bitfield relying on an enumeration.
Definition: Flags.h:60
Flags< E > & operator&=(const Flags< E > &flags)
Binary AND and assignment.
Definition: Flags.h:108
void reset(E flag)
Reset a flag.
Definition: Flags.h:146
Flags< E > operator&(Flags< E > lhs, Flags< E > rhs)
Binary AND between two bitfields.
Definition: Flags.h:204
void set(E flag)
Set a flag.
Definition: Flags.h:137
constexpr Flags(E e)
Constructor with an enum value.
Definition: Flags.h:76
Flags< E > operator|(Flags< E > lhs, Flags< E > rhs)
Binary OR between two bitfields.
Definition: Flags.h:172
bool test(E flag) const
Test if a specified flag is set.
Definition: Flags.h:128
Flags< E > operator|(Flags< E > lhs, E rhs)
Binary OR between a bitfield and a flag.
Definition: Flags.h:188
constexpr Flags()
Default constructor.
Definition: Flags.h:65
constexpr Flags< E > operator~() const
Binary NOT operator.
Definition: Flags.h:87
Flags< E > operator&(Flags< E > lhs, E rhs)
Binary AND between a bitfield and a flag.
Definition: Flags.h:220