summaryrefslogtreecommitdiff
path: root/src/mbgl/tile/tile_cache.cpp
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-02-11 17:30:35 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-02-11 17:30:35 -0800
commit62bbf2627a32a57188e4026aca8dc337e07ded7f (patch)
tree4db2a7e2bef2491eb7a8b98b0caa8b61aeae7283 /src/mbgl/tile/tile_cache.cpp
parent43c44eccdc56c50e41e8efbe5f7a34b57eed756f (diff)
downloadqtlocation-mapboxgl-62bbf2627a32a57188e4026aca8dc337e07ded7f.tar.gz
[core] Organize files that were in map folder better
Fixes #996
Diffstat (limited to 'src/mbgl/tile/tile_cache.cpp')
-rw-r--r--src/mbgl/tile/tile_cache.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/mbgl/tile/tile_cache.cpp b/src/mbgl/tile/tile_cache.cpp
new file mode 100644
index 0000000000..423b355827
--- /dev/null
+++ b/src/mbgl/tile/tile_cache.cpp
@@ -0,0 +1,65 @@
+#include <mbgl/tile/tile_cache.hpp>
+#include <mbgl/tile/tile_data.hpp>
+
+#include <cassert>
+
+namespace mbgl {
+
+void TileCache::setSize(size_t size_) {
+ size = size_;
+
+ while (orderedKeys.size() > size) {
+ auto key = orderedKeys.front();
+ orderedKeys.pop_front();
+ tiles.erase(key);
+ }
+
+ assert(orderedKeys.size() <= size);
+
+ tiles.reserve(size);
+}
+
+void TileCache::add(uint64_t key, std::shared_ptr<TileData> data) {
+
+ // insert new or query existing data
+ if (tiles.emplace(key, data).second) {
+ // remove existing data key
+ orderedKeys.remove(key);
+ }
+
+ // (re-)insert data key as newest
+ orderedKeys.push_back(key);
+
+ // purge oldest key/data if necessary
+ if (orderedKeys.size() > size) {
+ get(orderedKeys.front());
+ }
+
+ assert(orderedKeys.size() <= size);
+};
+
+std::shared_ptr<TileData> TileCache::get(uint64_t key) {
+
+ std::shared_ptr<TileData> data;
+
+ auto it = tiles.find(key);
+ if (it != tiles.end()) {
+ data = it->second;
+ tiles.erase(it);
+ orderedKeys.remove(key);
+ assert(data->isReady());
+ }
+
+ return data;
+};
+
+bool TileCache::has(uint64_t key) {
+ return tiles.find(key) != tiles.end();
+}
+
+void TileCache::clear() {
+ orderedKeys.clear();
+ tiles.clear();
+}
+
+} // namespace mbgl