diff options
author | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2017-11-29 20:18:40 -0800 |
---|---|---|
committer | Asheem Mamoowala <asheem.mamoowala@mapbox.com> | 2017-12-06 19:44:12 -0800 |
commit | 31a216459c564ff7771b0e30837978dbd298de51 (patch) | |
tree | bc33ec1fdd304e8b773efc83438bbb7e4449d5f9 /src/mbgl/style/custom_tile_loader.cpp | |
parent | d783611d1a8a8ef1cce47cb8913fc573fc2e6cf7 (diff) | |
download | qtlocation-mapboxgl-31a216459c564ff7771b0e30837978dbd298de51.tar.gz |
[core] Mark custom geometry tiles stale without clearing data
Diffstat (limited to 'src/mbgl/style/custom_tile_loader.cpp')
-rw-r--r-- | src/mbgl/style/custom_tile_loader.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/mbgl/style/custom_tile_loader.cpp b/src/mbgl/style/custom_tile_loader.cpp index d5bebf0086..af091be5cf 100644 --- a/src/mbgl/style/custom_tile_loader.cpp +++ b/src/mbgl/style/custom_tile_loader.cpp @@ -1,4 +1,5 @@ #include <mbgl/style/custom_tile_loader.hpp> +#include <mbgl/tile/custom_geometry_tile.hpp> namespace mbgl { namespace style { @@ -8,23 +9,23 @@ CustomTileLoader::CustomTileLoader(const TileFunction& fetchTileFn, const TileFu cancelTileFunction = cancelTileFn; } -void CustomTileLoader::fetchTile(const OverscaledTileID& tileID, ActorRef<SetTileDataFunction> callbackRef) { +void CustomTileLoader::fetchTile(const OverscaledTileID& tileID, ActorRef<CustomGeometryTile> tileRef) { auto cachedTileData = dataCache.find(tileID.canonical); if (cachedTileData != dataCache.end()) { - callbackRef.invoke(&SetTileDataFunction::operator(), *(cachedTileData->second)); + tileRef.invoke(&CustomGeometryTile::setTileData, *(cachedTileData->second)); } auto tileCallbacks = tileCallbackMap.find(tileID.canonical); if (tileCallbacks == tileCallbackMap.end()) { - auto tuple = std::make_tuple(tileID.overscaledZ, tileID.wrap, callbackRef); + auto tuple = std::make_tuple(tileID.overscaledZ, tileID.wrap, tileRef); tileCallbackMap.insert({ tileID.canonical, std::vector<OverscaledIDFunctionTuple>(1, tuple) }); } else { for (auto iter = tileCallbacks->second.begin(); iter != tileCallbacks->second.end(); iter++) { if (std::get<0>(*iter) == tileID.overscaledZ && std::get<1>(*iter) == tileID.wrap ) { - std::get<2>(*iter) = callbackRef; + std::get<2>(*iter) = tileRef; return; } } - tileCallbacks->second.emplace_back(std::make_tuple(tileID.overscaledZ, tileID.wrap, callbackRef)); + tileCallbacks->second.emplace_back(std::make_tuple(tileID.overscaledZ, tileID.wrap, tileRef)); } if (cachedTileData == dataCache.end()) { invokeTileFetch(tileID.canonical); @@ -57,11 +58,12 @@ void CustomTileLoader::setTileData(const CanonicalTileID& tileID, const GeoJSON& auto iter = tileCallbackMap.find(tileID); if (iter == tileCallbackMap.end()) return; - dataCache[tileID] = std::make_unique<mapbox::geojson::geojson>(std::move(data));; + auto dataPtr = std::make_unique<mapbox::geojson::geojson>(std::move(data)); for (auto tuple : iter->second) { auto actor = std::get<2>(tuple); - actor.invoke(&SetTileDataFunction::operator(), data); + actor.invoke(&CustomGeometryTile::setTileData, *dataPtr); } + dataCache[tileID] = std::move(dataPtr); } void CustomTileLoader::invalidateTile(const CanonicalTileID& tileID) { @@ -69,7 +71,7 @@ void CustomTileLoader::invalidateTile(const CanonicalTileID& tileID) { if (tileCallbacks == tileCallbackMap.end()) { return; } for (auto iter = tileCallbacks->second.begin(); iter != tileCallbacks->second.end(); iter++) { auto actor = std::get<2>(*iter); - actor.invoke(&SetTileDataFunction::operator(), mapbox::geojson::feature_collection()); + actor.invoke(&CustomGeometryTile::invalidateTileData); invokeTileCancel(tileID); } tileCallbackMap.erase(tileCallbacks); @@ -82,7 +84,7 @@ void CustomTileLoader::invalidateRegion(const LatLngBounds& bounds, Range<uint8_ if (tileBounds.intersects(bounds) || bounds.contains(tileBounds) || tileBounds.contains(bounds)) { for (auto iter = idtuple->second.begin(); iter != idtuple->second.end(); iter++) { auto actor = std::get<2>(*iter); - actor.invoke(&SetTileDataFunction::operator(), mapbox::geojson::feature_collection()); + actor.invoke(&CustomGeometryTile::invalidateTileData); invokeTileCancel(idtuple->first); dataCache.erase(idtuple->first); } |