summaryrefslogtreecommitdiff
path: root/src/mbgl/text
diff options
context:
space:
mode:
authorMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-01-16 20:12:13 +0200
committerMikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com>2020-01-22 14:30:26 +0200
commite6ddcf9beb8e0aad52d4185dac0c0b1d15205a16 (patch)
tree0b6189a8f0ea9f0430d4c05706867f71d3c2a264 /src/mbgl/text
parent5a4568b2ac355f807b7ea8e7d99b812db8a01a15 (diff)
downloadqtlocation-mapboxgl-e6ddcf9beb8e0aad52d4185dac0c0b1d15205a16.tar.gz
[core] Simplify CrossTileSymbolIndex::addLayer()
Diffstat (limited to 'src/mbgl/text')
-rw-r--r--src/mbgl/text/cross_tile_symbol_index.cpp16
-rw-r--r--src/mbgl/text/cross_tile_symbol_index.hpp5
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 {