20 using UT = std::underlying_type_t<T>;
22 using AT = std::conditional_t<scoped_enum<T>,
T,
UT>;
24 using PT = std::common_type_t<UT, int>;
28 constexpr Flags(
void) =
default;
32 constexpr operator T(
void)
const {
return static_cast<T>(this->
v); }
46 constexpr Flags &
comp(
void) {
return *
this = ~*
this; }
77 return std::exchange(*
this, *
this & ~
Flags{
a}) &
a;
Definition fundamental.h:79
constexpr Flags< T > operator|(Flags< T > lhs, Flags< T > rhs)
Definition flags.h:61
constexpr Flags< T > operator^(Flags< T > lhs, Flags< T > rhs)
Definition flags.h:66
constexpr Flags< T > operator&(Flags< T > lhs, Flags< T > rhs)
Definition flags.h:56
constexpr auto to_underlying(T t)
Definition utils.h:138
constexpr auto set_bit(T t, T mask, bool value)
Definition utils.h:187
v[1]
Definition math.lua:22
Wrapper for a small unsigned integral representing flags.
Definition flags.h:18
constexpr Flags & clear(AT a)
Definition flags.h:49
constexpr Flags & comp(void)
Definition flags.h:46
constexpr Flags operator-(void) const
Definition flags.h:37
std::common_type_t< UT, int > PT
Promoted type after an operation involving Ts.
Definition flags.h:24
static constexpr Flags cast(PT x)
Creates an object from the result of an expression.
Definition flags.h:26
constexpr Flags(UT u)
Definition flags.h:29
constexpr bool is_set(AT a) const
Definition flags.h:45
constexpr Flags check_and_clear(AT a)
Definition flags.h:76
UT v
Definition flags.h:52
std::conditional_t< scoped_enum< T >, T, UT > AT
Accepted type for integral arguments.
Definition flags.h:22
constexpr Flags operator^(AT rhs)
Definition flags.h:40
constexpr T operator*(void) const
Definition flags.h:34
constexpr Flags(void)=default
constexpr Flags & set(AT a)
Definition flags.h:47
std::underlying_type_t< T > UT
Value type stored in the object.
Definition flags.h:20
constexpr Flags & operator&=(Flags rhs)
Definition flags.h:41
constexpr Flags operator~(void) const
Definition flags.h:36
constexpr Flags & operator|=(Flags rhs)
Definition flags.h:42
constexpr Flags & operator^=(Flags rhs)
Definition flags.h:43
constexpr Flags operator&(AT rhs)
Definition flags.h:38
constexpr Flags(AT a)
Definition flags.h:30
constexpr Flags operator|(AT rhs)
Definition flags.h:39
constexpr Flags & set(AT a, bool b)
Definition flags.h:71