From 2b834001cca8c2b0552c106dd404da1b238f043b Mon Sep 17 00:00:00 2001 From: Mikhail Pozdnyakov Date: Tue, 24 Sep 2019 17:44:39 +0300 Subject: [core] type aliases and conversion traits for mapbox::base::Value --- include/mbgl/style/conversion_impl.hpp | 54 +++++++++++++++++++++++++++++++++- include/mbgl/util/feature.hpp | 10 +++---- 2 files changed, 58 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/mbgl/style/conversion_impl.hpp b/include/mbgl/style/conversion_impl.hpp index f049ba4ffb..7ac4ec649b 100644 --- a/include/mbgl/style/conversion_impl.hpp +++ b/include/mbgl/style/conversion_impl.hpp @@ -1,11 +1,17 @@ #pragma once +#include #include -#include +#include #include #include +#include +#include + +#include #include +#include namespace mbgl { namespace style { @@ -288,6 +294,52 @@ optional convert(const Convertible& value, Error& error, Args&&...args) { return Converter()(value, error, std::forward(args)...); } +template +struct ValueFactory; + +template +struct ValueArrayFactory { + static Value make(const T& arg) { return mapbox::base::ValueArray(arg.begin(), arg.end()); } +}; + +template <> +struct ValueFactory> : public ValueArrayFactory> {}; + +template <> +struct ValueFactory> : public ValueArrayFactory> {}; + +template <> +struct ValueFactory { + static Value make(const ColorRampPropertyValue& value) { return value.getExpression().serialize(); } +}; + +template <> +struct ValueFactory { + static Value make(const Color& color) { return color.toObject(); } +}; + +template +struct ValueFactory::value>::type> { + static Value make(const T& arg) { return {arg}; } +}; + +template +struct ValueFactory::value>::type> { + static Value make(T arg) { return {int64_t(arg)}; } +}; + +template +Value makeValue(T&& arg) { + return ValueFactory>::make(std::forward(arg)); +} + +template +Value makeValue(const PropertyValue& value) { + return value.match([](const Undefined&) -> Value { return {}; }, + [](const T& t) -> Value { return makeValue(t); }, + [](const PropertyExpression& fn) { return fn.getExpression().serialize(); }); +} + } // namespace conversion } // namespace style } // namespace mbgl diff --git a/include/mbgl/util/feature.hpp b/include/mbgl/util/feature.hpp index 390cc65720..6080976945 100644 --- a/include/mbgl/util/feature.hpp +++ b/include/mbgl/util/feature.hpp @@ -3,16 +3,16 @@ #include #include -#include +#include namespace mbgl { -using Value = mapbox::feature::value; -using NullValue = mapbox::feature::null_value_t; -using PropertyMap = mapbox::feature::property_map; +using Value = mapbox::base::Value; +using NullValue = mapbox::base::NullValue; +using PropertyMap = mapbox::base::ValueObject; using FeatureIdentifier = mapbox::feature::identifier; using Feature = mapbox::feature::feature; -using FeatureState = PropertyMap; +using FeatureState = mapbox::base::ValueObject; using FeatureStates = std::unordered_map; // using LayerFeatureStates = std::unordered_map; // -- cgit v1.2.1