diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-04-12 17:50:33 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-04-12 17:50:33 +0200 |
commit | 676eb6d77f58e987f4bd0a6355b9b6b29f3b45dd (patch) | |
tree | f5b56d9a77717ccfaef7974c42631c18ed9637a5 /src/common/Utilities/EnumClassFlag.h | |
parent | 3b6e5a87d83989151d434d871dfa67ad4f9a2013 (diff) |
Core/Entities: ObjectGuid improvements
* Support creation of all guid types
* Change ToString to output client compatible text (fixes calendar and auction mails)
* Fix saving and loading item soulbound trade allowed traders
* constexpr EnumClassFlag
Diffstat (limited to 'src/common/Utilities/EnumClassFlag.h')
-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); } |