diff options
Diffstat (limited to 'include/o3tl/typed_flags_set.hxx')
-rw-r--r-- | include/o3tl/typed_flags_set.hxx | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/include/o3tl/typed_flags_set.hxx b/include/o3tl/typed_flags_set.hxx index 4622d41e19f8..501a09a0cc68 100644 --- a/include/o3tl/typed_flags_set.hxx +++ b/include/o3tl/typed_flags_set.hxx @@ -101,6 +101,45 @@ inline typename o3tl::typed_flags<E>::Wrap operator ~( } template<typename E> +inline typename o3tl::typed_flags<E>::Wrap operator ^(E lhs, E rhs) { + assert(static_cast<O3TL_STD_UNDERLYING_TYPE_E>(lhs) >= 0); + assert(static_cast<O3TL_STD_UNDERLYING_TYPE_E>(rhs) >= 0); + return static_cast<typename o3tl::typed_flags<E>::Wrap>( + static_cast<O3TL_STD_UNDERLYING_TYPE_E>(lhs) + ^ static_cast<O3TL_STD_UNDERLYING_TYPE_E>(rhs)); +} + +template<typename E> +inline typename o3tl::typed_flags<E>::Wrap operator ^( + E lhs, typename o3tl::typed_flags<E>::Wrap rhs) +{ + assert(static_cast<O3TL_STD_UNDERLYING_TYPE_E>(lhs) >= 0); + return static_cast<typename o3tl::typed_flags<E>::Wrap>( + static_cast<O3TL_STD_UNDERLYING_TYPE_E>(lhs) + ^ static_cast<O3TL_STD_UNDERLYING_TYPE_E>(rhs)); +} + +template<typename E> +inline typename o3tl::typed_flags<E>::Wrap operator ^( + typename o3tl::typed_flags<E>::Wrap lhs, E rhs) +{ + assert(static_cast<O3TL_STD_UNDERLYING_TYPE_E>(rhs) >= 0); + return static_cast<typename o3tl::typed_flags<E>::Wrap>( + static_cast<O3TL_STD_UNDERLYING_TYPE_E>(lhs) + ^ static_cast<O3TL_STD_UNDERLYING_TYPE_E>(rhs)); +} + +template<typename E> +inline typename o3tl::typed_flags<E>::Wrap operator ^( + typename o3tl::typed_flags<E>::Wrap lhs, + typename o3tl::typed_flags<E>::Wrap rhs) +{ + return static_cast<typename o3tl::typed_flags<E>::Wrap>( + static_cast<O3TL_STD_UNDERLYING_TYPE_E>(lhs) + ^ static_cast<O3TL_STD_UNDERLYING_TYPE_E>(rhs)); +} + +template<typename E> inline typename o3tl::typed_flags<E>::Wrap operator &(E lhs, E rhs) { assert(static_cast<O3TL_STD_UNDERLYING_TYPE_E>(lhs) >= 0); assert(static_cast<O3TL_STD_UNDERLYING_TYPE_E>(rhs) >= 0); |