24 #include <type_traits> 29 #ifndef DOXYGEN_SHOULD_SKIP_THIS 99 : m_data(
static_cast<Type>(e))
110 return Flags(~m_data);
120 return Flags(m_data | flags.m_data);
130 m_data |= flags.m_data;
141 return Flags(m_data & flags.m_data);
151 m_data &= flags.m_data;
170 constexpr bool test(E flag)
const {
171 return (m_data &
static_cast<Type>(flag)) != 0;
180 m_data |=
static_cast<Type>(flag);
189 m_data &= ~
static_cast<Type>(flag);
192 using Type =
typename std::underlying_type<E>::type;
206 constexpr Flags(Type data)
226 return lhs |
Flags<E>(rhs);
240 return Flags<E>(lhs) | rhs;
254 return lhs &
Flags<E>(rhs);
268 return Flags<E>(lhs) & rhs;
281 return Flags<E>(flag);
292 template<
typename E,
typename ... F>
294 return Flags<E>(flag) | combineFlags(others ...);
297 #ifndef DOXYGEN_SHOULD_SKIP_THIS 304 struct EnableBitmaskOperators {
305 static constexpr bool value =
false;
313 typename std::enable_if<EnableBitmaskOperators<E>::value,
gf::
Flags<E>>::type
314 operator|(E lhs, E rhs) {
320 typename std::enable_if<EnableBitmaskOperators<E>::value,
gf::
Flags<E>>::type
321 operator&(E lhs, E rhs) {
327 typename std::enable_if<EnableBitmaskOperators<E>::value,
gf::
Flags<E>>::type
Semantic type to represent "none".
Definition: Types.h:37
Bitfield relying on an enumeration.
Definition: Flags.h:68
Flags< E > & operator &=(Flags< E > flags)
Binary AND and assignment.
Definition: Flags.h:150
constexpr Flags< E > combineFlags(E flag, F ... others)
Combine several enum values into a flag value.
Definition: Flags.h:293
void reset(E flag)
Reset a flag.
Definition: Flags.h:188
constexpr Flags(NoneType)
Constructor with no flag set.
Definition: Flags.h:78
Semantic type to represent "all".
Definition: Types.h:53
constexpr Flags operator &(Flags flags) const
Binary AND between two bitfields.
Definition: Flags.h:140
constexpr Flags(AllType)
Constructor with all flags set.
Definition: Flags.h:87
constexpr Flags< E > operator~() const
Binary NOT operator.
Definition: Flags.h:109
void set(E flag)
Set a flag.
Definition: Flags.h:179
constexpr Flags(E e)
Constructor with an enum value.
Definition: Flags.h:98
constexpr bool test(E flag) const
Test if a specified flag is set.
Definition: Flags.h:170
Flags()=default
Default constructor.
Type getValue() const
Get the underlying value of the flags.
Definition: Flags.h:201
The namespace for gf classes.
Definition: Action.h:34
Flags< E > & operator|=(Flags< E > flags)
Binary OR and assignment.
Definition: Flags.h:129
constexpr Flags operator|(Flags flags) const
Binary OR between two bitfields.
Definition: Flags.h:119
constexpr Flags< E > operator&(Flags< E > lhs, E rhs)
Binary AND between a bitfield and a flag.
Definition: Flags.h:253
constexpr Flags< E > operator|(Flags< E > lhs, E rhs)
Binary OR between a bitfield and a flag.
Definition: Flags.h:225
constexpr Flags< E > operator&(E lhs, Flags< E > rhs)
Binary AND between a flag and a bitfield.
Definition: Flags.h:267
constexpr Flags< E > operator|(E lhs, Flags< E > rhs)
Binary OR between a flag and a bitfield.
Definition: Flags.h:239
constexpr operator bool() const
Test if any flag is set.
Definition: Flags.h:160
constexpr Flags< E > combineFlags(E flag)
Combine a single enum value into a flag value.
Definition: Flags.h:280