summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-04-28 18:24:24 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-04-28 18:55:55 +0300
commit1f5587b3ea23d03364107f39b24ff16545d04dd7 (patch)
tree9c6c5690c9494389ecf66f00c6b94e301fae7864
parentffb59864dc04e235c898465dbcb8250ff776a7c9 (diff)
downloadqtlocation-mapboxgl-1f5587b3ea23d03364107f39b24ff16545d04dd7.tar.gz
[core] Added mbgl::underlying_type
-rw-r--r--include/mbgl/map/update.hpp6
-rw-r--r--include/mbgl/util/traits.hpp15
-rw-r--r--src/mbgl/renderer/render_pass.hpp9
3 files changed, 23 insertions, 7 deletions
diff --git a/include/mbgl/map/update.hpp b/include/mbgl/map/update.hpp
index e47feea949..4ad1b1d195 100644
--- a/include/mbgl/map/update.hpp
+++ b/include/mbgl/map/update.hpp
@@ -1,6 +1,8 @@
#ifndef MBGL_MAP_UPDATE
#define MBGL_MAP_UPDATE
+#include <mbgl/util/traits.hpp>
+
#include <cstdint>
namespace mbgl {
@@ -16,7 +18,7 @@ enum class Update : uint8_t {
};
inline Update operator| (const Update& lhs, const Update& rhs) {
- return Update(static_cast<uint8_t>(lhs) | static_cast<uint8_t>(rhs));
+ return Update(mbgl::underlying_type(lhs) | mbgl::underlying_type(rhs));
}
inline Update& operator|=(Update& lhs, const Update& rhs) {
@@ -25,7 +27,7 @@ inline Update& operator|=(Update& lhs, const Update& rhs) {
}
inline bool operator& (const Update& lhs, const Update& rhs) {
- return static_cast<uint8_t>(lhs) & static_cast<uint8_t>(rhs);
+ return mbgl::underlying_type(lhs) & mbgl::underlying_type(rhs);
}
} // namespace mbgl
diff --git a/include/mbgl/util/traits.hpp b/include/mbgl/util/traits.hpp
new file mode 100644
index 0000000000..812d9fb547
--- /dev/null
+++ b/include/mbgl/util/traits.hpp
@@ -0,0 +1,15 @@
+#ifndef MBGL_UTIL_TRAITS
+#define MBGL_UTIL_TRAITS
+
+#include <type_traits>
+
+namespace mbgl {
+
+template<typename T>
+constexpr auto underlying_type(T t) -> typename std::underlying_type<T>::type {
+ return static_cast<typename std::underlying_type<T>::type>(t);
+}
+
+} // namespace mbgl
+
+#endif // MBGL_UTIL_TRAITS
diff --git a/src/mbgl/renderer/render_pass.hpp b/src/mbgl/renderer/render_pass.hpp
index a1e965d911..d3b60d0667 100644
--- a/src/mbgl/renderer/render_pass.hpp
+++ b/src/mbgl/renderer/render_pass.hpp
@@ -1,8 +1,9 @@
#ifndef MBGL_RENDERER_RENDER_PASS
#define MBGL_RENDERER_RENDER_PASS
+#include <mbgl/util/traits.hpp>
+
#include <cstdint>
-#include <type_traits>
namespace mbgl {
@@ -13,8 +14,7 @@ enum class RenderPass : uint8_t {
};
constexpr inline RenderPass operator|(RenderPass a, RenderPass b) {
- return static_cast<RenderPass>(static_cast<std::underlying_type<RenderPass>::type>(a) |
- static_cast<std::underlying_type<RenderPass>::type>(b));
+ return static_cast<RenderPass>(mbgl::underlying_type(a) | mbgl::underlying_type(b));
}
inline RenderPass operator|=(RenderPass& a, RenderPass b) {
@@ -22,8 +22,7 @@ inline RenderPass operator|=(RenderPass& a, RenderPass b) {
}
constexpr inline RenderPass operator&(RenderPass a, RenderPass b) {
- return static_cast<RenderPass>(static_cast<std::underlying_type<RenderPass>::type>(a) &
- static_cast<std::underlying_type<RenderPass>::type>(b));
+ return static_cast<RenderPass>(mbgl::underlying_type(a) & mbgl::underlying_type(b));
}
} // namespace mbgl