diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-24 18:19:00 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-25 17:36:35 +0300 |
commit | 273ad436fb4d2a18c6749bd4e40fa56546e9285c (patch) | |
tree | ba1c66084f43adb5d9a66c48279723fc62d35288 /src/mbgl/tile | |
parent | e6e1e15f950dc246e609cf4acf5b9d6ca13f8806 (diff) | |
download | qtlocation-mapboxgl-273ad436fb4d2a18c6749bd4e40fa56546e9285c.tar.gz |
[core] Avoid copying feature properties
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r-- | src/mbgl/tile/geojson_tile_data.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_data.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_data.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.hpp | 3 |
5 files changed, 14 insertions, 5 deletions
diff --git a/src/mbgl/tile/geojson_tile_data.hpp b/src/mbgl/tile/geojson_tile_data.hpp index 21a65144d9..5559965cd7 100644 --- a/src/mbgl/tile/geojson_tile_data.hpp +++ b/src/mbgl/tile/geojson_tile_data.hpp @@ -17,7 +17,7 @@ public: return apply_visitor(ToFeatureType(), feature.geometry); } - PropertyMap getProperties() const override { + const PropertyMap& getProperties() const override { return feature.properties; } diff --git a/src/mbgl/tile/geometry_tile_data.cpp b/src/mbgl/tile/geometry_tile_data.cpp index db9f37ad4b..5320df6893 100644 --- a/src/mbgl/tile/geometry_tile_data.cpp +++ b/src/mbgl/tile/geometry_tile_data.cpp @@ -179,6 +179,11 @@ Feature convertFeature(const GeometryTileFeature& geometryTileFeature, const Can return feature; } +const PropertyMap& GeometryTileFeature::getProperties() const { + static const PropertyMap dummy; + return dummy; +} + const GeometryCollection& GeometryTileFeature::getGeometries() const { static const GeometryCollection dummy; return dummy; diff --git a/src/mbgl/tile/geometry_tile_data.hpp b/src/mbgl/tile/geometry_tile_data.hpp index a06e2be835..5d43a68388 100644 --- a/src/mbgl/tile/geometry_tile_data.hpp +++ b/src/mbgl/tile/geometry_tile_data.hpp @@ -49,7 +49,7 @@ public: virtual ~GeometryTileFeature() = default; virtual FeatureType getType() const = 0; virtual optional<Value> getValue(const std::string& key) const = 0; - virtual PropertyMap getProperties() const { return PropertyMap(); } + virtual const PropertyMap& getProperties() const; virtual FeatureIdentifier getID() const { return NullValue {}; } virtual const GeometryCollection& getGeometries() const; }; diff --git a/src/mbgl/tile/vector_tile_data.cpp b/src/mbgl/tile/vector_tile_data.cpp index 926e596080..d53f1deba6 100644 --- a/src/mbgl/tile/vector_tile_data.cpp +++ b/src/mbgl/tile/vector_tile_data.cpp @@ -26,8 +26,11 @@ optional<Value> VectorTileFeature::getValue(const std::string& key) const { return value->is<NullValue>() ? nullopt : std::move(value); } -std::unordered_map<std::string, Value> VectorTileFeature::getProperties() const { - return feature.getProperties(); +const PropertyMap& VectorTileFeature::getProperties() const { + if (!properties) { + properties = feature.getProperties(); + } + return *properties; } FeatureIdentifier VectorTileFeature::getID() const { diff --git a/src/mbgl/tile/vector_tile_data.hpp b/src/mbgl/tile/vector_tile_data.hpp index 525c7935e4..f5086936f8 100644 --- a/src/mbgl/tile/vector_tile_data.hpp +++ b/src/mbgl/tile/vector_tile_data.hpp @@ -15,13 +15,14 @@ public: FeatureType getType() const override; optional<Value> getValue(const std::string& key) const override; - std::unordered_map<std::string, Value> getProperties() const override; + const PropertyMap& getProperties() const override; FeatureIdentifier getID() const override; const GeometryCollection& getGeometries() const override; private: mapbox::vector_tile::feature feature; mutable optional<GeometryCollection> lines; + mutable optional<PropertyMap> properties; }; class VectorTileLayer : public GeometryTileLayer { |