From 676eb6d77f58e987f4bd0a6355b9b6b29f3b45dd Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 12 Apr 2020 17:50:33 +0200 Subject: 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 --- src/common/Utilities/EnumClassFlag.h | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'src/common/Utilities/EnumClassFlag.h') 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::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(static_cast>(_value) & static_cast>(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(static_cast>(_value) | static_cast>(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(~static_cast>(_value)); } - void RemoveFlag(EnumClassFlag flag) + constexpr void RemoveFlag(EnumClassFlag flag) { _value = static_cast(static_cast>(_value) & ~static_cast>(flag._value)); } - bool HasFlag(T flag) const + constexpr bool HasFlag(T flag) const { return (static_cast>(_value) & static_cast>(flag)) != 0; } - operator T() const + constexpr bool HasAllFlags(T flags) const + { + return (static_cast>(_value) & static_cast>(flags)) == static_cast>(flags); + } + + constexpr operator T() const { return _value; } - std::underlying_type_t AsUnderlyingType() const + constexpr std::underlying_type_t AsUnderlyingType() const { return static_cast>(_value); } -- cgit v1.2.3