22 #include <type_traits> 37 template<
typename Enum>
40 using value_type =
typename std::underlying_type<Enum>::type;
43 : flag_value{flag_value} {}
44 constexpr
Flags(Enum flag_value) noexcept
45 : flag_value{
static_cast<value_type>(flag_value)} {}
65 flag_value |= other.flag_value;
71 flag_value &= other.flag_value;
77 flag_value ^= other.flag_value;
83 return flag_value == other.flag_value;
88 return flag_value != other.flag_value;
100 template<
typename Enum>
103 return Flags<Enum>(flags.value() |
static_cast<decltype(flags.
value())
>(e));
106 template<
typename Enum>
109 return Flags<Enum>(flags.value() |
static_cast<decltype(flags.
value())
>(e));
112 template<
typename Enum>
115 return static_cast<Enum
>(flags.value() &
static_cast<decltype(flags.
value())
>(e));
118 template<
typename Enum>
121 return static_cast<Enum
>(flags.value() &
static_cast<decltype(flags.
value())
>(e));
124 template<
typename Enum>
127 return e ==
static_cast<Enum
>(flags.value());
130 template<
typename Enum>
133 return e ==
static_cast<Enum
>(flags.value());
136 template<
typename Enum>
139 return e ==
static_cast<Enum
>(flags.value() &
static_cast<decltype(flags.
value())
>(e));
144 template<
typename Enum>
146 operator|(Enum lhs, Enum rhs) noexcept
151 template<
typename Enum>
153 operator&(Enum lhs, Enum rhs) noexcept
159 template<
typename Enum>
161 operator^(Enum lhs, Enum rhs) noexcept
Definition: as_render_target.h:27
constexpr Flags(value_type flag_value=0) noexcept
Definition: flags.h:42
constexpr Flags< Enum > operator^(Flags< Enum > other) const noexcept
Definition: flags.h:57
constexpr value_type value() const noexcept
Definition: flags.h:91
Flags< Enum > operator^=(Flags< Enum > other) noexcept
Definition: flags.h:75
typename std::underlying_type< DeviceCapability >::type value_type
Definition: flags.h:40
constexpr Flags< Enum > operator|(Flags< Enum > other) const noexcept
Definition: flags.h:47
Flags< Enum > operator&=(Flags< Enum > other) noexcept
Definition: flags.h:69
constexpr bool operator==(Flags< Enum > other) const noexcept
Definition: flags.h:81
constexpr bool operator!=(Flags< Enum > other) const noexcept
Definition: flags.h:86
constexpr Flags(Enum flag_value) noexcept
Definition: flags.h:44
constexpr Flags< Enum > operator&(Flags< Enum > other) const noexcept
Definition: flags.h:52
constexpr bool contains(Flags< Enum > flags, Enum e) noexcept
Definition: flags.h:137
Flags< Enum > & operator|=(Flags< Enum > other) noexcept
Definition: flags.h:63