summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/tile_cache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile/tile_cache.cpp')
-rw-r--r--src/mbgl/tile/tile_cache.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/mbgl/tile/tile_cache.cpp b/src/mbgl/tile/tile_cache.cpp
index 0f0a231d54..15e8a38ce5 100644
--- a/src/mbgl/tile/tile_cache.cpp
+++ b/src/mbgl/tile/tile_cache.cpp
@@ -17,10 +17,13 @@ void TileCache::setSize(size_t size_) {
assert(orderedKeys.size() <= size);
}
-void TileCache::add(const OverscaledTileID& key, std::shared_ptr<TileData> data) {
+void TileCache::add(const OverscaledTileID& key, std::unique_ptr<TileData> data) {
+ if (!data->isReady() || !size) {
+ return;
+ }
// insert new or query existing data
- if (tiles.emplace(key, data).second) {
+ if (tiles.emplace(key, std::move(data)).second) {
// remove existing data key
orderedKeys.remove(key);
}
@@ -36,13 +39,13 @@ void TileCache::add(const OverscaledTileID& key, std::shared_ptr<TileData> data)
assert(orderedKeys.size() <= size);
};
-std::shared_ptr<TileData> TileCache::get(const OverscaledTileID& key) {
+std::unique_ptr<TileData> TileCache::get(const OverscaledTileID& key) {
- std::shared_ptr<TileData> data;
+ std::unique_ptr<TileData> data;
auto it = tiles.find(key);
if (it != tiles.end()) {
- data = it->second;
+ data = std::move(it->second);
tiles.erase(it);
orderedKeys.remove(key);
assert(data->isReady());