26#define DEFINE_ENUM_FLAG(enumType) constexpr bool IsEnumFlag(enumType) { return true; }
31 using IsFlag = std::conjunction<std::is_enum<T>, std::integral_constant<bool,
IsEnumFlag(T{})>>;
34template<typename T, std::enable_if_t<EnumTraits::IsFlag<T>::value, std::nullptr_t> =
nullptr>
37 return static_cast<T
>(
static_cast<std::underlying_type_t<T>
>(left) &
static_cast<std::underlying_type_t<T>
>(right));
40template<typename T, std::enable_if_t<EnumTraits::IsFlag<T>::value, std::nullptr_t> =
nullptr>
43 return left = left & right;
46template<typename T, std::enable_if_t<EnumTraits::IsFlag<T>::value, std::nullptr_t> =
nullptr>
49 return static_cast<T
>(
static_cast<std::underlying_type_t<T>
>(left) |
static_cast<std::underlying_type_t<T>
>(right));
52template<typename T, std::enable_if_t<EnumTraits::IsFlag<T>::value, std::nullptr_t> =
nullptr>
55 return left = left | right;
58template<typename T, std::enable_if_t<EnumTraits::IsFlag<T>::value, std::nullptr_t> =
nullptr>
61 return static_cast<T
>(~static_cast<std::underlying_type_t<T>>(value));
98 return static_cast<T
>(~static_cast<std::underlying_type_t<T>>(
_value));
108 using i = std::underlying_type_t<T>;
109 return static_cast<i
>(
_value & flag) !=
static_cast<i
>(0);
117 constexpr operator T()
const
124 return static_cast<std::underlying_type_t<T>
>(
_value);
uint16 flags
Definition: DisableMgr.cpp:49
constexpr T & operator&=(T &left, T right)
Definition: EnumFlag.h:41
constexpr T operator&(T left, T right)
Definition: EnumFlag.h:35
constexpr T & operator|=(T &left, T right)
Definition: EnumFlag.h:53
constexpr T operator~(T value)
Definition: EnumFlag.h:59
constexpr T operator|(T left, T right)
Definition: EnumFlag.h:47
constexpr bool IsEnumFlag(T)
Definition: EnumFlag.h:24
Definition: EnumFlag.h:66
constexpr void RemoveFlag(EnumFlag flag)
Definition: EnumFlag.h:101
constexpr EnumFlag operator~() const
Definition: EnumFlag.h:96
constexpr bool HasFlag(T flag) const
Definition: EnumFlag.h:106
T _value
Definition: EnumFlag.h:128
constexpr EnumFlag(T value)
Definition: EnumFlag.h:70
constexpr friend EnumFlag operator&(EnumFlag left, EnumFlag right)
Definition: EnumFlag.h:80
constexpr EnumFlag & operator|=(EnumFlag right)
Definition: EnumFlag.h:85
constexpr bool HasAllFlags(T flags) const
Definition: EnumFlag.h:112
constexpr friend EnumFlag operator|(EnumFlag left, EnumFlag right)
Definition: EnumFlag.h:91
constexpr std::underlying_type_t< T > AsUnderlyingType() const
Definition: EnumFlag.h:122
constexpr EnumFlag & operator&=(EnumFlag right)
Definition: EnumFlag.h:74
Definition: EnumFlag.h:29
std::conjunction< std::is_enum< T >, std::integral_constant< bool, IsEnumFlag(T{})> > IsFlag
Definition: EnumFlag.h:31