summaryrefslogtreecommitdiff
path: root/include/mbgl/util/bitmask_operations.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/util/bitmask_operations.hpp')
-rw-r--r--include/mbgl/util/bitmask_operations.hpp33
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