diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2015-10-29 12:01:05 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-10-30 11:17:01 -0700 |
commit | f745f271e3ad4a969d98083b658a905f43e3dcd3 (patch) | |
tree | 10e0f426fd6e47c73fcc191d5202a404f9b0a69f /src | |
parent | f6f5d9608d29a27b67e3b6702740c443deba06ac (diff) | |
download | qtlocation-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.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/map/tile_worker.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/map/vector_tile_data.cpp | 5 |
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. |