diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/Utilities/EnumClassFlag.h | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/common/Utilities/EnumClassFlag.h b/src/common/Utilities/EnumClassFlag.h index 999f369da84..2f201fd2d1d 100644 --- a/src/common/Utilities/EnumClassFlag.h +++ b/src/common/Utilities/EnumClassFlag.h @@ -26,51 +26,56 @@ class EnumClassFlag static_assert(std::is_enum<T>::value, "EnumClassFlag must be used only with enums"); public: - /*implicit*/ EnumClassFlag(T value) : _value(value) { } + /*implicit*/ constexpr EnumClassFlag(T value) : _value(value) { } - EnumClassFlag& operator&=(EnumClassFlag right) + constexpr EnumClassFlag& operator&=(EnumClassFlag right) { _value = static_cast<T>(static_cast<std::underlying_type_t<T>>(_value) & static_cast<std::underlying_type_t<T>>(right._value)); return *this; } - friend EnumClassFlag operator&(EnumClassFlag left, EnumClassFlag right) + constexpr friend EnumClassFlag operator&(EnumClassFlag left, EnumClassFlag right) { return left &= right; } - EnumClassFlag& operator|=(EnumClassFlag right) + constexpr EnumClassFlag& operator|=(EnumClassFlag right) { _value = static_cast<T>(static_cast<std::underlying_type_t<T>>(_value) | static_cast<std::underlying_type_t<T>>(right._value)); return *this; } - friend EnumClassFlag operator|(EnumClassFlag left, EnumClassFlag right) + constexpr friend EnumClassFlag operator|(EnumClassFlag left, EnumClassFlag right) { return left |= right; } - EnumClassFlag operator~() const + constexpr EnumClassFlag operator~() const { return static_cast<T>(~static_cast<std::underlying_type_t<T>>(_value)); } - void RemoveFlag(EnumClassFlag flag) + constexpr void RemoveFlag(EnumClassFlag flag) { _value = static_cast<T>(static_cast<std::underlying_type_t<T>>(_value) & ~static_cast<std::underlying_type_t<T>>(flag._value)); } - bool HasFlag(T flag) const + constexpr bool HasFlag(T flag) const { return (static_cast<std::underlying_type_t<T>>(_value) & static_cast<std::underlying_type_t<T>>(flag)) != 0; } - operator T() const + constexpr bool HasAllFlags(T flags) const + { + return (static_cast<std::underlying_type_t<T>>(_value) & static_cast<std::underlying_type_t<T>>(flags)) == static_cast<std::underlying_type_t<T>>(flags); + } + + constexpr operator T() const { return _value; } - std::underlying_type_t<T> AsUnderlyingType() const + constexpr std::underlying_type_t<T> AsUnderlyingType() const { return static_cast<std::underlying_type_t<T>>(_value); } |