7#include "concepts/fundamental.h"
19 using UT = std::underlying_type_t<T>;
20 using AT = std::conditional_t<scoped_enum<T>,
T,
UT>;
22 template<
typename U>
static constexpr Flags cast(U u);
23 constexpr Flags(
void) =
default;
26 constexpr bool is_set(
AT a)
const {
return static_cast<bool>(*
this &
a); }
32 constexpr explicit operator bool()
const {
return t; }
52 return {
static_cast<UT>(u)};
62 return std::exchange(*
this, *
this & ~
a) &
a;
Definition: fundamental.h:79
constexpr auto to_underlying(T t)
Definition: utils.h:138
constexpr auto set_bit(T t, T mask, bool value)
Definition: utils.h:187
Wrapper for an unsigned integral representing flags.
Definition: flags.h:18
constexpr Flags operator~() const
Definition: flags.h:33
constexpr Flags & clear(AT a)
Definition: flags.h:30
static constexpr Flags cast(U u)
constexpr Flags & operator^=(const Flags &f)
Definition: flags.h:46
constexpr Flags & operator&=(const Flags &f)
Definition: flags.h:44
constexpr Flags & operator|=(const Flags &f)
Definition: flags.h:45
constexpr Flags & operator|=(AT a)
Definition: flags.h:39
UT t
Definition: flags.h:21
constexpr Flags operator|(const Flags &f) const
Definition: flags.h:42
constexpr Flags(UT u)
Definition: flags.h:24
constexpr bool is_set(AT a) const
Definition: flags.h:26
constexpr Flags check_and_clear(AT a)
Definition: flags.h:61
constexpr Flags & flip()
Definition: flags.h:27
constexpr Flags operator^(const Flags &f) const
Definition: flags.h:43
constexpr Flags operator&(const Flags &f) const
Definition: flags.h:41
std::conditional_t< scoped_enum< T >, T, UT > AT
Definition: flags.h:20
constexpr Flags operator|(AT a) const
Definition: flags.h:71
constexpr Flags(void)=default
constexpr Flags & set(AT a)
Definition: flags.h:28
std::underlying_type_t< T > UT
Definition: flags.h:19
constexpr Flags & operator&=(AT a)
Definition: flags.h:38
constexpr Flags & operator^=(AT a)
Definition: flags.h:40
constexpr Flags operator^(AT a) const
Definition: flags.h:76
constexpr Flags operator-() const
Definition: flags.h:34
constexpr Flags(AT a)
Definition: flags.h:25
constexpr Flags operator&(AT a) const
Definition: flags.h:66
constexpr Flags & set(AT a, bool b)
Definition: flags.h:56