28 #ifndef RTTR_ENUM_FLAGS_H_ 29 #define RTTR_ENUM_FLAGS_H_ 31 #include "rttr/detail/base/core_prerequisites.h" 32 #include "rttr/detail/misc/std_type_traits.h" 34 #include <type_traits> 85 template<
typename Enum>
88 static_assert(
sizeof(Enum) <=
sizeof(int32_t),
"Cannot store enums value with the given type." 89 "Please use an enum which fits into an 'int32_t'." );
92 using enum_type = detail::conditional_t<std::is_signed<typename std::underlying_type<Enum>::type>
::value,
100 RTTR_CONSTEXPR RTTR_INLINE
enum_flags(
zero =
nullptr) RTTR_NOEXCEPT;
105 RTTR_CONSTEXPR RTTR_INLINE
enum_flags(Enum flag) RTTR_NOEXCEPT;
113 RTTR_CONSTEXPR RTTR_INLINE
enum_flags(detail::enum_flag v) RTTR_NOEXCEPT;
123 RTTR_CXX14_CONSTEXPR RTTR_INLINE
enum_flags& operator&=(
int mask) RTTR_NOEXCEPT;
131 RTTR_CXX14_CONSTEXPR RTTR_INLINE
enum_flags& operator&=(uint32_t mask) RTTR_NOEXCEPT;
139 RTTR_CXX14_CONSTEXPR RTTR_INLINE
enum_flags& operator&=(Enum mask) RTTR_NOEXCEPT;
155 RTTR_CXX14_CONSTEXPR RTTR_INLINE
enum_flags& operator|=(Enum f) RTTR_NOEXCEPT;
171 RTTR_CXX14_CONSTEXPR RTTR_INLINE
enum_flags& operator^=(Enum f) RTTR_NOEXCEPT;
179 RTTR_CONSTEXPR RTTR_INLINE operator
enum_type() const RTTR_NOEXCEPT;
189 RTTR_CONSTEXPR RTTR_INLINE
enum_flags operator|(Enum f) const RTTR_NOEXCEPT;
206 RTTR_CONSTEXPR RTTR_INLINE
enum_flags operator^(Enum f) const RTTR_NOEXCEPT;
222 RTTR_CONSTEXPR RTTR_INLINE
enum_flags operator&(Enum f) const RTTR_NOEXCEPT;
231 RTTR_CONSTEXPR RTTR_INLINE
enum_flags operator&(
int mask) const RTTR_NOEXCEPT;
239 RTTR_CONSTEXPR RTTR_INLINE
enum_flags operator&(uint32_t mask) const RTTR_NOEXCEPT;
247 RTTR_CONSTEXPR RTTR_INLINE
enum_flags operator~() const RTTR_NOEXCEPT;
254 RTTR_CONSTEXPR RTTR_INLINE
bool operator!() const RTTR_NOEXCEPT;
261 RTTR_CONSTEXPR RTTR_INLINE
bool test_flag(Enum flag) const RTTR_NOEXCEPT;
274 class invalid_enum_flag
277 RTTR_CONSTEXPR RTTR_INLINE
explicit invalid_enum_flag(
int v){}
294 #define RTTR_DECLARE_FLAGS(Flags, Enum) 301 #define RTTR_DECLARE_ENUM_FLAGS_OPERATORS(Flags) 305 #define RTTR_DECLARE_FLAGS(Flags, Enum) \ 306 using Flags = rttr::enum_flags<Enum>; 308 #define RTTR_DECLARE_ENUM_FLAGS_OPERATORS(Flags) \ 309 RTTR_CONSTEXPR RTTR_INLINE rttr::enum_flags<Flags::type> operator|(Flags::type lhs, Flags::type rhs) RTTR_NOEXCEPT \ 311 return (rttr::enum_flags<Flags::type>(lhs) | rhs); \ 313 RTTR_CONSTEXPR RTTR_INLINE rttr::enum_flags<Flags::type> operator|(Flags::type lhs, rttr::enum_flags<Flags::type> rhs) RTTR_NOEXCEPT \ 315 return (rhs | lhs); \ 317 RTTR_CONSTEXPR RTTR_INLINE rttr::detail::invalid_enum_flag operator|(Flags::type lhs, int rhs) \ 319 return rttr::detail::invalid_enum_flag(int(lhs) | rhs); \ 326 #include "rttr/detail/impl/enum_flags_impl.h" 328 #endif // RTTR_ENUM_FLAGS_H_ Definition: access_levels.h:33
detail::enum_data< Enum_Type > value(string_view, Enum_Type value)
The value function should be used to add a mapping from enum name to value during the registration pr...
Enum type
Definition: enum_flags.h:91
enum_type * zero
Definition: enum_flags.h:95
The enum_flags class template is used to store OR-combinations of enum values in a type-safe way...
Definition: enum_flags.h:86
detail::conditional_t< std::is_signed< typename std::underlying_type< Enum >::type >::value, int32_t, uint32_t > enum_type
Definition: enum_flags.h:94