diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-09-10 16:18:54 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-09-13 13:45:48 +0300 |
commit | 796cc3a4d6ce7fd4d857e0985392efccb388dfb1 (patch) | |
tree | b28965df0c17928d146cb383805ca225348f48c6 /include/mbgl/util | |
parent | f9c15f708ecf3d87c756a196bdc5de93b78b8cfc (diff) | |
download | qtlocation-mapboxgl-796cc3a4d6ce7fd4d857e0985392efccb388dfb1.tar.gz |
[core] Bitmask operations for enums
Diffstat (limited to 'include/mbgl/util')
-rw-r--r-- | include/mbgl/util/bitmask_operations.hpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/include/mbgl/util/bitmask_operations.hpp b/include/mbgl/util/bitmask_operations.hpp new file mode 100644 index 0000000000..014fabdea2 --- /dev/null +++ b/include/mbgl/util/bitmask_operations.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include <mbgl/util/traits.hpp> +#include <mbgl/util/util.hpp> + +namespace mbgl { + +template<typename Enum> +MBGL_CONSTEXPR Enum operator|(Enum a, Enum b) { + static_assert(std::is_enum<Enum>::value, "Enum must be an enum type"); + return Enum(mbgl::underlying_type(a) | mbgl::underlying_type(b)); +} + +template<typename Enum> +MBGL_CONSTEXPR Enum& operator|=(Enum& a, Enum b) { + static_assert(std::is_enum<Enum>::value, "Enum must be an enum type"); + return (a = a | b); +} + +template<typename Enum> +MBGL_CONSTEXPR bool operator&(Enum a, Enum b) { + static_assert(std::is_enum<Enum>::value, "Enum must be an enum type"); + return bool(mbgl::underlying_type(a) & mbgl::underlying_type(b)); +} + +template<typename Enum> +MBGL_CONSTEXPR Enum operator~(Enum value) { + static_assert(std::is_enum<Enum>::value, "Enum must be an enum type"); + return Enum(~mbgl::underlying_type(value)); +} + + +} // namespace mbgl
\ No newline at end of file |