13 template<enumeration_c enum_t>
16 m_EnumFlags = ~m_EnumFlags;
19 template<enumeration_c enum_t>
22 m_EnumFlags << nShift;
25 template<enumeration_c enum_t>
28 m_EnumFlags >> nShift;
31 template<enumeration_c enum_t>
39 template<enumeration_c enum_t>
40 constexpr flags<enum_t>& flags<enum_t>::operator<<=(
size_t nShift) noexcept
46 template<enumeration_c enum_t>
47 constexpr flags<enum_t>& flags<enum_t>::operator>>=(
size_t nShift) noexcept
53 template<enumeration_c enum_t>
54 constexpr flags<enum_t> flags<enum_t>::operator<<(
size_t nShift)
const noexcept
61 template<enumeration_c enum_t>
62 constexpr flags<enum_t> flags<enum_t>::operator>>(
size_t nShift)
const noexcept
69 template<enumeration_c enum_t>
74 template<enumeration_c enum_t>
75 template<
class... args_t>
76 requires(
sizeof...(args_t) >= 2 && are_specific_v<enum_t, args_t...>)
82 template<enumeration_c enum_t>
83 template<
class... args_t>
84 requires(
sizeof...(args_t) >= 1 && are_specific_v<enum_t, args_t...>)
87 ((m_EnumFlags |= underlying_type(
flags)), ...);
90 template<enumeration_c enum_t>
91 template<
class... args_t>
92 requires(
sizeof...(args_t) >= 1 && are_specific_v<enum_t, args_t...>)
95 ((m_EnumFlags &= ~underlying_type(
flags)), ...);
98 template<enumeration_c enum_t>
99 template<
class... args_t>
100 requires(
sizeof...(args_t) >= 1 && are_specific_v<enum_t, args_t...>)
103 ((m_EnumFlags ^= underlying_type(
flags)), ...);
106 template<enumeration_c enum_t>
109 return underlying_type(m_EnumFlags) <=> underlying_type(eFlag);
112 template<enumeration_c enum_t>
113 constexpr flags<enum_t>& flags<enum_t>::operator=(enum_t eFlag) noexcept
115 m_EnumFlags = underlying_type(eFlag);
119 template<enumeration_c enum_t>
120 constexpr flags<enum_t>& flags<enum_t>::operator|=(enum_t eFlag) noexcept
126 template<enumeration_c enum_t>
127 constexpr flags<enum_t>& flags<enum_t>::operator&=(enum_t eFlag) noexcept
133 template<enumeration_c enum_t>
134 constexpr flags<enum_t>& flags<enum_t>::operator^=(enum_t eFlag) noexcept
140 template<enumeration_c enum_t>
141 constexpr flags<enum_t> flags<enum_t>::operator|(enum_t eFlag)
const noexcept
143 flags result = *
this;
148 template<enumeration_c enum_t>
149 constexpr flags<enum_t> flags<enum_t>::operator&(enum_t eFlag)
const noexcept
151 flags result = *
this;
156 template<enumeration_c enum_t>
157 constexpr flags<enum_t> flags<enum_t>::operator^(enum_t eFlag)
const noexcept
159 flags result = *
this;
164 template<enumeration_c enum_t>
167 m_EnumFlags |= flags_.m_EnumFlags;
170 template<enumeration_c enum_t>
173 m_EnumFlags &= flags_.m_EnumFlags;
176 template<enumeration_c enum_t>
179 m_EnumFlags ^= flags_.m_EnumFlags;
182 template<enumeration_c enum_t>
183 constexpr flags<enum_t>& flags<enum_t>::operator|=(flags flags_) noexcept
189 template<enumeration_c enum_t>
190 constexpr flags<enum_t>& flags<enum_t>::operator&=(flags flags_) noexcept
196 template<enumeration_c enum_t>
197 constexpr flags<enum_t>& flags<enum_t>::operator^=(flags flags_) noexcept
203 template<enumeration_c enum_t>
204 constexpr flags<enum_t> flags<enum_t>::operator|(flags flags_)
const noexcept
206 flags result = *
this;
211 template<enumeration_c enum_t>
212 constexpr flags<enum_t> flags<enum_t>::operator&(flags flags_)
const noexcept
214 flags result = *
this;
219 template<enumeration_c enum_t>
220 constexpr flags<enum_t> flags<enum_t>::operator^(flags flags_)
const noexcept
222 flags result = *
this;
227 template<enumeration_c enum_t>
230 return m_EnumFlags & underlying_type(eFlag);
233 template<enumeration_c enum_t>
234 template<
class... args_t>
235 requires(
sizeof...(args_t) >= 2 && are_specific_v<enum_t, args_t...>)
236 constexpr
bool flags<enum_t>::contains_all(args_t... flags)
const noexcept
241 template<enumeration_c enum_t>
242 template<
class... args_t>
243 requires(
sizeof...(args_t) >= 2 && are_specific_v<enum_t, args_t...>)
244 constexpr
bool flags<enum_t>::contains_any(args_t... flags)
const noexcept
249 template<enumeration_c enum_t>
Wrapper for enumerations to be used as a list of flags.
constexpr void remove(flags flags_) noexcept
Remove all the flags specified.
constexpr void shift_left(size_t nShift) noexcept
Shift bits to the left.
constexpr bool contains(enum_t eFlag) const noexcept
Check if flag is present.
constexpr void xor_(flags flags_) noexcept
Apply a bitwise XOR to a flags value.
constexpr void add(flags flags_) noexcept
Add all the flags specified.
constexpr void reverse() noexcept
Reverse (or logically negotiate) all bits.
constexpr void shift_right(size_t nShift) noexcept
Shift bits to the right.
constexpr underlying_type to_integer() const noexcept
Convert to the corresponding integer value.
Check that tuple type contains T.