summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-09-24 17:44:39 +0300
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2019-09-26 11:57:39 +0300
commit2b834001cca8c2b0552c106dd404da1b238f043b (patch)
tree0380a5255f99fd104999ddde0f4efd49d8ca5213
parent73a9d33b29fe4be9addf50c07a50de6131a6a002 (diff)
downloadqtlocation-mapboxgl-2b834001cca8c2b0552c106dd404da1b238f043b.tar.gz
[core] type aliases and conversion traits for mapbox::base::Value
-rw-r--r--include/mbgl/style/conversion_impl.hpp54
-rw-r--r--include/mbgl/util/feature.hpp10
-rw-r--r--next/CMakeLists.txt1
-rw-r--r--next/platform/android/android.cmake1
-rwxr-xr-xscripts/generate-file-lists.js3
-rw-r--r--src/mbgl/util/color.cpp8
-rw-r--r--vendor/mapbox-base-files.json1
7 files changed, 67 insertions, 11 deletions
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 <mbgl/style/color_ramp_property_value.hpp>
#include <mbgl/style/conversion.hpp>
-#include <mbgl/util/optional.hpp>
+#include <mbgl/style/property_value.hpp>
#include <mbgl/util/feature.hpp>
#include <mbgl/util/geojson.hpp>
+#include <mbgl/util/optional.hpp>
+#include <mapbox/value.hpp>
+
+#include <array>
#include <string>
+#include <type_traits>
namespace mbgl {
namespace style {
@@ -288,6 +294,52 @@ optional<T> convert(const Convertible& value, Error& error, Args&&...args) {
return Converter<T>()(value, error, std::forward<Args>(args)...);
}
+template <typename T, typename = void>
+struct ValueFactory;
+
+template <typename T>
+struct ValueArrayFactory {
+ static Value make(const T& arg) { return mapbox::base::ValueArray(arg.begin(), arg.end()); }
+};
+
+template <>
+struct ValueFactory<std::array<float, 2>> : public ValueArrayFactory<std::array<float, 2>> {};
+
+template <>
+struct ValueFactory<std::vector<float>> : public ValueArrayFactory<std::vector<float>> {};
+
+template <>
+struct ValueFactory<ColorRampPropertyValue> {
+ static Value make(const ColorRampPropertyValue& value) { return value.getExpression().serialize(); }
+};
+
+template <>
+struct ValueFactory<Color> {
+ static Value make(const Color& color) { return color.toObject(); }
+};
+
+template <typename T>
+struct ValueFactory<T, typename std::enable_if<!std::is_enum<T>::value>::type> {
+ static Value make(const T& arg) { return {arg}; }
+};
+
+template <typename T>
+struct ValueFactory<T, typename std::enable_if<std::is_enum<T>::value>::type> {
+ static Value make(T arg) { return {int64_t(arg)}; }
+};
+
+template <typename T>
+Value makeValue(T&& arg) {
+ return ValueFactory<std::decay_t<T>>::make(std::forward<T>(arg));
+}
+
+template <typename T>
+Value makeValue(const PropertyValue<T>& value) {
+ return value.match([](const Undefined&) -> Value { return {}; },
+ [](const T& t) -> Value { return makeValue(t); },
+ [](const PropertyExpression<T>& 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 <mbgl/util/optional.hpp>
#include <mbgl/util/string.hpp>
-#include <mapbox/feature.hpp>
+#include <mapbox/value.hpp>
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<double>;
-using FeatureState = PropertyMap;
+using FeatureState = mapbox::base::ValueObject;
using FeatureStates = std::unordered_map<std::string, FeatureState>; // <featureID, FeatureState>
using LayerFeatureStates = std::unordered_map<std::string, FeatureStates>; // <sourceLayer, FeatureStates>
diff --git a/next/CMakeLists.txt b/next/CMakeLists.txt
index bc15f04420..dbf6c11918 100644
--- a/next/CMakeLists.txt
+++ b/next/CMakeLists.txt
@@ -912,6 +912,7 @@ target_link_libraries(
Mapbox::Base::geometry.hpp
Mapbox::Base::optional
Mapbox::Base::typewrapper
+ Mapbox::Base::value
Mapbox::Base::variant
Mapbox::Base::weak
mbgl-vendor-expected
diff --git a/next/platform/android/android.cmake b/next/platform/android/android.cmake
index 13818e39a7..1bde72d11d 100644
--- a/next/platform/android/android.cmake
+++ b/next/platform/android/android.cmake
@@ -268,6 +268,7 @@ target_link_libraries(
GLESv2
Mapbox::Base::optional
Mapbox::Base::typewrapper
+ Mapbox::Base::value
Mapbox::Base::weak
log
)
diff --git a/scripts/generate-file-lists.js b/scripts/generate-file-lists.js
index d1f5e77585..546ce38235 100755
--- a/scripts/generate-file-lists.js
+++ b/scripts/generate-file-lists.js
@@ -145,7 +145,8 @@ generateFileList('vendor/mapbox-base-files.json',
'vendor/mapbox-base/mapbox/geojson.hpp',
'vendor/mapbox-base/mapbox/jni.hpp',
'vendor/mapbox-base/mapbox/weak',
- 'vendor/mapbox-base/mapbox/typewrapper' ],
+ 'vendor/mapbox-base/mapbox/typewrapper',
+ 'vendor/mapbox-base/mapbox/value'],
vendorRegex, [ "include/*.hpp", "include/**/*.hpp", "include/**/*.h", "optional.hpp", ":!:include/jni/string_conversion.hpp" ]);
generateFileList('vendor/polylabel-files.json', [ 'vendor/polylabel' ], vendorRegex, [ "include/**/*.hpp" ]);
generateFileList('vendor/protozero-files.json', [ 'vendor/protozero' ], vendorRegex, [ "include/**/*.hpp" ]);
diff --git a/src/mbgl/util/color.cpp b/src/mbgl/util/color.cpp
index 4c2814cf14..8a880e8760 100644
--- a/src/mbgl/util/color.cpp
+++ b/src/mbgl/util/color.cpp
@@ -45,10 +45,10 @@ std::array<double, 4> Color::toArray() const {
}
mbgl::Value Color::toObject() const {
- return std::unordered_map<std::string, mbgl::Value>{{"r", double(r)},
- {"g", double(g)},
- {"b", double(b)},
- {"a", double(a)}};
+ return mapbox::base::ValueObject{{"r", double(r)},
+ {"g", double(g)},
+ {"b", double(b)},
+ {"a", double(a)}};
}
} // namespace mbgl
diff --git a/vendor/mapbox-base-files.json b/vendor/mapbox-base-files.json
index 7c638d2b80..55091e438d 100644
--- a/vendor/mapbox-base-files.json
+++ b/vendor/mapbox-base-files.json
@@ -94,6 +94,7 @@
"mapbox/pixelmatch.hpp": "vendor/mapbox-base/mapbox/pixelmatch-cpp/include/mapbox/pixelmatch.hpp",
"supercluster.hpp": "vendor/mapbox-base/mapbox/supercluster.hpp/include/supercluster.hpp",
"mapbox/type_wrapper.hpp": "vendor/mapbox-base/mapbox/typewrapper/include/mapbox/type_wrapper.hpp",
+ "mapbox/value.hpp": "vendor/mapbox-base/mapbox/value/include/mapbox/value.hpp",
"mapbox/optional.hpp": "vendor/mapbox-base/mapbox/variant/include/mapbox/optional.hpp",
"mapbox/recursive_wrapper.hpp": "vendor/mapbox-base/mapbox/variant/include/mapbox/recursive_wrapper.hpp",
"mapbox/variant.hpp": "vendor/mapbox-base/mapbox/variant/include/mapbox/variant.hpp",