29#ifndef DOXYGEN_SHOULD_SKIP_THIS
68 : m_data(static_cast<
Type>(~0))
79 : m_data(static_cast<
Type>(e))
90 return Flags(~m_data);
100 return Flags(m_data | flags.m_data);
110 m_data |= flags.m_data;
121 return Flags(m_data & flags.m_data);
131 m_data &= flags.m_data;
140 constexpr operator bool()
const {
150 constexpr bool test(E flag)
const {
151 return (m_data &
static_cast<Type>(flag)) != 0;
160 m_data |=
static_cast<Type>(flag);
169 m_data &= ~static_cast<Type>(flag);
175 using Type =
typename std::underlying_type<E>::type;
280 template<
typename E,
typename ...
F>
282 return Flags<E>(flag) | combineFlags(others ...);
285#ifndef DOXYGEN_SHOULD_SKIP_THIS
292struct EnableBitmaskOperators {
293 static constexpr bool value =
false;
301typename std::enable_if<EnableBitmaskOperators<E>::value,
gf::Flags<E>>::type
302operator|(E lhs, E rhs) {
308typename std::enable_if<EnableBitmaskOperators<E>::value,
gf::Flags<E>>::type
309operator&(E lhs, E rhs) {
315typename std::enable_if<EnableBitmaskOperators<E>::value,
gf::Flags<E>>::type
317 return ~gf::Flags<E>(val);
A deserializer from a binary file.
Definition: Serialization.h:151
Bitfield relying on an enumeration.
Definition: Flags.h:48
constexpr Flags< E > combineFlags(E flag, F ... others)
Combine several enum values into a flag value.
Definition: Flags.h:281
constexpr Flags(E e)
Constructor with an enum value.
Definition: Flags.h:78
Flags< E > & operator|=(Flags< E > flags)
Binary OR and assignment.
Definition: Flags.h:109
constexpr Flags(NoneType)
Constructor with no flag set.
Definition: Flags.h:58
typename std::underlying_type< E >::type Type
The underlying type of the enum.
Definition: Flags.h:175
Flags()=default
Default constructor.
friend Deserializer & operator|(Deserializer &ar, Flags< T > &data)
constexpr Flags< E > operator|(Flags< E > lhs, E rhs)
Binary OR between a bitfield and a flag.
Definition: Flags.h:213
Type getValue() const
Get the underlying value of the flags.
Definition: Flags.h:184
constexpr Flags< E > operator~() const
Binary NOT operator.
Definition: Flags.h:89
constexpr Flags< E > operator&(E lhs, Flags< E > rhs)
Binary AND between a flag and a bitfield.
Definition: Flags.h:255
void set(E flag)
Set a flag.
Definition: Flags.h:159
constexpr Flags< E > operator|(E lhs, Flags< E > rhs)
Binary OR between a flag and a bitfield.
Definition: Flags.h:227
Flags< E > & operator&=(Flags< E > flags)
Binary AND and assignment.
Definition: Flags.h:130
constexpr Flags< E > operator&(Flags< E > lhs, E rhs)
Binary AND between a bitfield and a flag.
Definition: Flags.h:241
constexpr Flags operator|(Flags flags) const
Binary OR between two bitfields.
Definition: Flags.h:99
friend Serializer & operator|(Serializer &ar, Flags< T > data)
constexpr Flags operator&(Flags flags) const
Binary AND between two bitfields.
Definition: Flags.h:120
void reset(E flag)
Reset a flag.
Definition: Flags.h:168
constexpr Flags(AllType)
Constructor with all flags set.
Definition: Flags.h:67
constexpr bool test(E flag) const
Test if a specified flag is set.
Definition: Flags.h:150
constexpr Flags< E > combineFlags(E flag)
Combine a single enum value into a flag value.
Definition: Flags.h:268
A serializer to a binary file.
Definition: Serialization.h:43
The namespace for gf classes.
Semantic type to represent "all".
Definition: Types.h:53
Semantic type to represent "none".
Definition: Types.h:37