Define bit mask operators for scoped enums bitfields

Close #3887
This commit is contained in:
BogDan Vatra
2016-05-30 14:04:37 +03:00
parent 06eb6e94e3
commit 7dfe8e726b
2 changed files with 33 additions and 1 deletions

View File

@@ -1485,6 +1485,35 @@ volatile __attribute__((weak)) const char *flatbuffer_version_string =
#endif // !defined(_WIN32) && !defined(__CYGWIN__)
#define DEFINE_BITMASK_OPERATORS(E)\
inline E operator | (E lhs, E rhs){\
using T = std::underlying_type<E>::type;\
return E(T(lhs) | T(rhs));\
}\
inline E operator & (E lhs, E rhs){\
using T = std::underlying_type<E>::type;\
return E(T(lhs) & T(rhs));\
}\
inline E operator ^ (E lhs, E rhs){\
using T = std::underlying_type<E>::type;\
return E(T(lhs) ^ T(rhs));\
}\
inline E operator ~ (E lhs){\
using T = std::underlying_type<E>::type;\
return E(~T(lhs));\
}\
inline E operator |= (E &lhs, E rhs){\
lhs = lhs | rhs;\
return lhs;\
}\
inline E operator &= (E &lhs, E rhs){\
lhs = lhs & rhs;\
return lhs;\
}\
inline E operator ^= (E &lhs, E rhs){\
lhs = lhs ^ rhs;\
return lhs;\
}
/// @endcond
} // namespace flatbuffers