summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2015-10-29 12:01:05 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2015-10-30 11:17:01 -0700
commitf745f271e3ad4a969d98083b658a905f43e3dcd3 (patch)
tree10e0f426fd6e47c73fcc191d5202a404f9b0a69f /src
parentf6f5d9608d29a27b67e3b6702740c443deba06ac (diff)
downloadqtlocation-mapboxgl-f745f271e3ad4a969d98083b658a905f43e3dcd3.tar.gz
[core] When reparsing a tile, replace all existing buckets
A tile may go from having particular layers, to not having them. (Annotation tiles in particular.)
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/map/tile_worker.cpp2
-rw-r--r--src/mbgl/map/tile_worker.hpp2
-rw-r--r--src/mbgl/map/vector_tile_data.cpp5
3 files changed, 4 insertions, 5 deletions
diff --git a/src/mbgl/map/tile_worker.cpp b/src/mbgl/map/tile_worker.cpp
index 88bbf16a3f..96300a803f 100644
--- a/src/mbgl/map/tile_worker.cpp
+++ b/src/mbgl/map/tile_worker.cpp
@@ -287,6 +287,6 @@ void TileWorker::createSymbolBucket(const GeometryTileLayer& layer,
void TileWorker::insertBucket(const std::string& name, std::unique_ptr<Bucket> bucket) {
if (bucket->hasData()) {
- result.buckets.emplace_back(name, std::move(bucket));
+ result.buckets.emplace(name, std::move(bucket));
}
}
diff --git a/src/mbgl/map/tile_worker.hpp b/src/mbgl/map/tile_worker.hpp
index 27fc0d37fe..44868a12ff 100644
--- a/src/mbgl/map/tile_worker.hpp
+++ b/src/mbgl/map/tile_worker.hpp
@@ -31,7 +31,7 @@ class GeometryTileLayer;
class TileParseResultBuckets {
public:
TileData::State state = TileData::State::invalid;
- std::vector<std::pair<std::string, std::unique_ptr<Bucket>>> buckets;
+ std::unordered_map<std::string, std::unique_ptr<Bucket>> buckets;
};
using TileParseResult = mapbox::util::variant<TileParseResultBuckets, // success
diff --git a/src/mbgl/map/vector_tile_data.cpp b/src/mbgl/map/vector_tile_data.cpp
index 0241b82b98..90603c0a64 100644
--- a/src/mbgl/map/vector_tile_data.cpp
+++ b/src/mbgl/map/vector_tile_data.cpp
@@ -39,6 +39,7 @@ VectorTileData::VectorTileData(const TileID& id_,
if (!tile) {
state = State::parsed;
+ buckets.clear();
callback();
return;
}
@@ -69,9 +70,7 @@ VectorTileData::VectorTileData(const TileID& id_,
// Move over all buckets we received in this parse request, potentially overwriting
// existing buckets in case we got a refresh parse.
- for (auto& bucket : resultBuckets.buckets) {
- buckets[bucket.first] = std::move(bucket.second);
- }
+ buckets = std::move(resultBuckets.buckets);
// The target configuration could have changed since we started placement. In this case,
// we're starting another placement run.