NSUNI/NSLAR Library
a250670
Loading...
Searching...
No Matches
enum_flag.hpp
Go to the documentation of this file.
1
6
7
#include <type_traits>
// IWYU pragma: export
8
16
25
#if defined(__has_cpp_attribute) && __has_cpp_attribute(clang::flag_enum)
26
#define NNL_FLAG_ENUM [[clang::flag_enum]]
27
#else
28
#define NNL_FLAG_ENUM
29
#endif
30
36
#define NNL_DEFINE_ENUM_OPERATORS(ENUMTYPE) \
37
inline ENUMTYPE operator|(ENUMTYPE a, ENUMTYPE b) { \
38
return static_cast<ENUMTYPE>(static_cast<std::underlying_type_t<ENUMTYPE>>(a) | \
39
static_cast<std::underlying_type_t<ENUMTYPE>>(b)); \
40
} \
41
inline ENUMTYPE& operator|=(ENUMTYPE& a, ENUMTYPE b) { return a = a | b; } \
42
inline ENUMTYPE operator&(ENUMTYPE a, ENUMTYPE b) { \
43
return static_cast<ENUMTYPE>(static_cast<std::underlying_type_t<ENUMTYPE>>(a) & \
44
static_cast<std::underlying_type_t<ENUMTYPE>>(b)); \
45
} \
46
inline ENUMTYPE operator&=(ENUMTYPE& a, ENUMTYPE b) { return a = a & b; } \
47
inline ENUMTYPE operator~(ENUMTYPE a) { \
48
return static_cast<ENUMTYPE>(~static_cast<std::underlying_type_t<ENUMTYPE>>(a)); \
49
} \
50
inline ENUMTYPE operator^(ENUMTYPE a, ENUMTYPE b) { \
51
return static_cast<ENUMTYPE>(static_cast<std::underlying_type_t<ENUMTYPE>>(a) ^ \
52
static_cast<std::underlying_type_t<ENUMTYPE>>(b)); \
53
} \
54
inline ENUMTYPE operator^=(ENUMTYPE& a, ENUMTYPE b) { return a = a ^ b; }
55
include
NNL
common
enum_flag.hpp
Generated by
1.14.0