6#define ENUM_CLASS_FLAGS(Enum) \
7 inline constexpr Enum& operator|=(Enum& Lhs, Enum Rhs) { return Lhs = (Enum)((__underlying_type(Enum))Lhs | (__underlying_type(Enum))Rhs); } \
8 inline constexpr Enum& operator&=(Enum& Lhs, Enum Rhs) { return Lhs = (Enum)((__underlying_type(Enum))Lhs & (__underlying_type(Enum))Rhs); } \
9 inline constexpr Enum& operator^=(Enum& Lhs, Enum Rhs) { return Lhs = (Enum)((__underlying_type(Enum))Lhs ^ (__underlying_type(Enum))Rhs); } \
10 inline constexpr Enum operator| (Enum Lhs, Enum Rhs) { return (Enum)((__underlying_type(Enum))Lhs | (__underlying_type(Enum))Rhs); } \
11 inline constexpr Enum operator& (Enum Lhs, Enum Rhs) { return (Enum)((__underlying_type(Enum))Lhs & (__underlying_type(Enum))Rhs); } \
12 inline constexpr Enum operator^ (Enum Lhs, Enum Rhs) { return (Enum)((__underlying_type(Enum))Lhs ^ (__underlying_type(Enum))Rhs); } \
13 inline constexpr bool operator! (Enum E) { return !(__underlying_type(Enum))E; } \
14 inline constexpr Enum operator~ (Enum E) { return (Enum)~(__underlying_type(Enum))E; }
17#define FRIEND_ENUM_CLASS_FLAGS(Enum) \
18 friend constexpr Enum& operator|=(Enum& Lhs, Enum Rhs); \
19 friend constexpr Enum& operator&=(Enum& Lhs, Enum Rhs); \
20 friend constexpr Enum& operator^=(Enum& Lhs, Enum Rhs); \
21 friend constexpr Enum operator| (Enum Lhs, Enum Rhs); \
22 friend constexpr Enum operator& (Enum Lhs, Enum Rhs); \
23 friend constexpr Enum operator^ (Enum Lhs, Enum Rhs); \
24 friend constexpr bool operator! (Enum E); \
25 friend constexpr Enum operator~ (Enum E);
27template<
typename Enum>
30 using UnderlyingType = __underlying_type(
Enum);
31 return ((UnderlyingType)
Flags & (UnderlyingType)Contains) == (UnderlyingType)Contains;
34template<
typename Enum>
37 using UnderlyingType = __underlying_type(
Enum);
38 return ((UnderlyingType)
Flags & (UnderlyingType)Contains) != 0;
54template <
typename Enum>
68template <
typename Enum>
71 using UnderlyingType = __underlying_type(
Enum);
72 return ((UnderlyingType)
Flags != 0) && (((UnderlyingType)
Flags & ((UnderlyingType)
Flags - 1)) == 0);
83template <
typename Enum>
86 using UnderlyingType = __underlying_type(
Enum);
90template<
typename Enum>
93 using UnderlyingType = __underlying_type(
Enum);
97template<
typename Enum>
100 using UnderlyingType = __underlying_type(
Enum);
104template <
typename Enum>
107 using UnderlyingType = __underlying_type(
Enum);
109 #pragma warning(push)
110 #pragma warning(disable : 4146)
118template <
typename Enum>
121 using UnderlyingType = __underlying_type(
Enum);
122 return (
Enum)((UnderlyingType)
Flags & ((UnderlyingType)
Flags - 1));
125template <
typename Enum>
128 using UnderlyingType = __underlying_type(
Enum);
131 UnderlyingType
Int = (UnderlyingType)
Flags;
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumOnlyContainsFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:55
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
constexpr bool EnumHasAllFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:28
constexpr void EnumRemoveFlags(Enum &Flags, Enum FlagsToRemove)
Definition EnumClassFlags.h:98
constexpr void EnumAddFlags(Enum &Flags, Enum FlagsToAdd)
Definition EnumClassFlags.h:91
constexpr bool EnumHasAnyOneFlag(Enum Flags, Enum OneOfFlags)
Definition EnumClassFlags.h:84
constexpr Enum EnumLowestSetFlag(Enum Flags)
Definition EnumClassFlags.h:105
constexpr int EnumNumSetFlags(Enum Flags)
Definition EnumClassFlags.h:126
constexpr bool EnumHasOneFlag(Enum Flags)
Definition EnumClassFlags.h:69
constexpr Enum EnumRemoveLowestSetFlag(Enum Flags)
Definition EnumClassFlags.h:119