aboutsummaryrefslogtreecommitdiff
path: root/src/common/Utilities/EnumClassFlag.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-04-12 17:50:33 +0200
committerShauren <shauren.trinity@gmail.com>2020-04-12 17:50:33 +0200
commit676eb6d77f58e987f4bd0a6355b9b6b29f3b45dd (patch)
treef5b56d9a77717ccfaef7974c42631c18ed9637a5 /src/common/Utilities/EnumClassFlag.h
parent3b6e5a87d83989151d434d871dfa67ad4f9a2013 (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.h25
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);
}