aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-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);
}