diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-01-16 20:12:13 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-01-22 14:30:26 +0200 |
commit | e6ddcf9beb8e0aad52d4185dac0c0b1d15205a16 (patch) | |
tree | 0b6189a8f0ea9f0430d4c05706867f71d3c2a264 /src/mbgl/text | |
parent | 5a4568b2ac355f807b7ea8e7d99b812db8a01a15 (diff) | |
download | qtlocation-mapboxgl-e6ddcf9beb8e0aad52d4185dac0c0b1d15205a16.tar.gz |
[core] Simplify CrossTileSymbolIndex::addLayer()
Diffstat (limited to 'src/mbgl/text')
-rw-r--r-- | src/mbgl/text/cross_tile_symbol_index.cpp | 16 | ||||
-rw-r--r-- | src/mbgl/text/cross_tile_symbol_index.hpp | 5 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/mbgl/text/cross_tile_symbol_index.cpp b/src/mbgl/text/cross_tile_symbol_index.cpp index d8bd0292ec..5b9d6ae69c 100644 --- a/src/mbgl/text/cross_tile_symbol_index.cpp +++ b/src/mbgl/text/cross_tile_symbol_index.cpp @@ -67,7 +67,7 @@ void TileLayerIndex::findMatches(SymbolBucket& bucket, } } -CrossTileSymbolLayerIndex::CrossTileSymbolLayerIndex() = default; +CrossTileSymbolLayerIndex::CrossTileSymbolLayerIndex(uint32_t& maxCrossTileID_) : maxCrossTileID(maxCrossTileID_) {} /* * Sometimes when a user pans across the antimeridian the longitude value gets wrapped. @@ -95,7 +95,7 @@ void CrossTileSymbolLayerIndex::handleWrapJump(float newLng) { lng = newLng; } -bool CrossTileSymbolLayerIndex::addBucket(const OverscaledTileID& tileID, SymbolBucket& bucket, uint32_t& maxCrossTileID) { +bool CrossTileSymbolLayerIndex::addBucket(const OverscaledTileID& tileID, SymbolBucket& bucket) { auto& thisZoomIndexes = indexes[tileID.overscaledZ]; auto previousIndex = thisZoomIndexes.find(tileID); if (previousIndex != thisZoomIndexes.end()) { @@ -177,7 +177,15 @@ bool CrossTileSymbolLayerIndex::removeStaleBuckets(const std::unordered_set<uint CrossTileSymbolIndex::CrossTileSymbolIndex() = default; auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, float lng) -> AddLayerResult { - auto& layerIndex = layerIndexes[layer.getID()]; + auto found = layerIndexes.find(layer.getID()); + if (found == layerIndexes.end()) { + found = layerIndexes + .emplace(std::piecewise_construct, + std::forward_as_tuple(layer.getID()), + std::forward_as_tuple(maxCrossTileID)) + .first; + } + auto& layerIndex = found->second; AddLayerResult result = AddLayerResult::NoChanges; std::unordered_set<uint32_t> currentBucketIDs; @@ -187,7 +195,7 @@ auto CrossTileSymbolIndex::addLayer(const RenderLayer& layer, float lng) -> AddL for (const auto& item : layer.getPlacementData()) { const RenderTile& renderTile = item.tile; Bucket& bucket = item.bucket; - auto pair = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID(), maxCrossTileID); + auto pair = bucket.registerAtCrossTileIndex(layerIndex, renderTile.getOverscaledTileID()); assert(pair.first != 0u); if (pair.second) result |= AddLayerResult::BucketsAdded; currentBucketIDs.insert(pair.first); diff --git a/src/mbgl/text/cross_tile_symbol_index.hpp b/src/mbgl/text/cross_tile_symbol_index.hpp index ddcdb814c6..3b7c367726 100644 --- a/src/mbgl/text/cross_tile_symbol_index.hpp +++ b/src/mbgl/text/cross_tile_symbol_index.hpp @@ -47,8 +47,8 @@ public: class CrossTileSymbolLayerIndex { public: - CrossTileSymbolLayerIndex(); - bool addBucket(const OverscaledTileID&, SymbolBucket&, uint32_t& maxCrossTileID); + CrossTileSymbolLayerIndex(uint32_t& maxCrossTileID); + bool addBucket(const OverscaledTileID&, SymbolBucket&); bool removeStaleBuckets(const std::unordered_set<uint32_t>& currentIDs); void handleWrapJump(float newLng); private: @@ -57,6 +57,7 @@ private: std::map<uint8_t, std::map<OverscaledTileID,TileLayerIndex>> indexes; std::map<uint8_t, std::set<uint32_t>> usedCrossTileIDs; float lng = 0; + uint32_t& maxCrossTileID; }; class CrossTileSymbolIndex { |