diff options
-rw-r--r-- | include/mbgl/map/update.hpp | 6 | ||||
-rw-r--r-- | include/mbgl/util/traits.hpp | 15 | ||||
-rw-r--r-- | src/mbgl/renderer/render_pass.hpp | 9 |
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 |