diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-08-19 11:38:26 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-08-19 11:38:26 +0200 |
commit | d147e18153910d4f21eaece75e06725b1249c8f2 (patch) | |
tree | 20cefbfca807774a40270127f7f2da685e97ed7e /include/mbgl/util | |
parent | dbf6d7bcb5502ab7529a0b9b7bfd59c2d2e10944 (diff) | |
download | qtlocation-mapboxgl-d147e18153910d4f21eaece75e06725b1249c8f2.tar.gz |
update mapbox/variant
Diffstat (limited to 'include/mbgl/util')
-rw-r--r-- | include/mbgl/util/recursive_wrapper.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/util/variant.hpp | 25 |
2 files changed, 23 insertions, 4 deletions
diff --git a/include/mbgl/util/recursive_wrapper.hpp b/include/mbgl/util/recursive_wrapper.hpp index a616805c0f..54b27634a3 100644 --- a/include/mbgl/util/recursive_wrapper.hpp +++ b/include/mbgl/util/recursive_wrapper.hpp @@ -3,7 +3,7 @@ #include <utility> -namespace mbgl { namespace util { +namespace mapbox { namespace util { template <typename T> class recursive_wrapper diff --git a/include/mbgl/util/variant.hpp b/include/mbgl/util/variant.hpp index ddc82ee311..1eca5160c7 100644 --- a/include/mbgl/util/variant.hpp +++ b/include/mbgl/util/variant.hpp @@ -35,7 +35,7 @@ // translates to 100 #define VARIANT_VERSION (VARIANT_MAJOR_VERSION*100000) + (VARIANT_MINOR_VERSION*100) + (VARIANT_PATCH_VERSION) -namespace mbgl { namespace util { namespace detail { +namespace mapbox { namespace util { namespace detail { static constexpr std::size_t invalid_value = std::size_t(-1); @@ -487,6 +487,8 @@ private: } // namespace detail +struct no_init {}; + template<typename... Types> class variant { @@ -503,12 +505,16 @@ private: public: + VARIANT_INLINE variant() : type_index(sizeof...(Types) - 1) { new (&data) typename detail::select_type<0, Types...>::type(); } + VARIANT_INLINE variant(no_init) + : type_index(detail::invalid_value) {} + template <typename T, class = typename std::enable_if< detail::is_valid_type<T, Types...>::value>::type> VARIANT_INLINE explicit variant(T const& val) noexcept @@ -715,11 +721,24 @@ auto VARIANT_INLINE static apply_visitor(F f, V & v0, V & v1) -> decltype(V::bin return V::binary_visit(v0, v1, f); } +// getter interface +template<typename ResultType, typename T> +ResultType & get(T & var) +{ + return var.template get<ResultType>(); +} + +template<typename ResultType, typename T> +ResultType const& get(T const& var) +{ + return var.template get<ResultType>(); +} + // operator<< -template <typename charT, typename traits, typename Variant> +template <typename charT, typename traits, typename... Types> VARIANT_INLINE std::basic_ostream<charT, traits>& -operator<< (std::basic_ostream<charT, traits>& out, Variant const& rhs) +operator<< (std::basic_ostream<charT, traits>& out, variant<Types...> const& rhs) { detail::printer<std::basic_ostream<charT, traits>> visitor(out); apply_visitor(visitor, rhs); |