kopia lustrzana https://github.com/robhawkes/vizicities
51 wiersze
1.2 KiB
JavaScript
Executable File
51 wiersze
1.2 KiB
JavaScript
Executable File
import LRUCache from 'lru-cache';
|
|
|
|
// TODO: Make sure nothing is left behind in the heap after calling destroy()
|
|
|
|
// This process is based on a similar approach taken by OpenWebGlobe
|
|
// See: https://github.com/OpenWebGlobe/WebViewer/blob/master/source/core/globecache.js
|
|
|
|
class TileCache {
|
|
constructor(cacheLimit, onDestroyTile) {
|
|
this._cache = LRUCache({
|
|
max: cacheLimit,
|
|
dispose: (key, tile) => {
|
|
onDestroyTile(tile);
|
|
}
|
|
});
|
|
}
|
|
|
|
// Returns true if all specified tile providers are ready to be used
|
|
// Otherwise, returns false
|
|
isReady() {
|
|
return false;
|
|
}
|
|
|
|
// Get a cached tile without requesting a new one
|
|
getTile(quadcode) {
|
|
return this._cache.get(quadcode);
|
|
}
|
|
|
|
// Add tile to cache
|
|
setTile(quadcode, tile) {
|
|
this._cache.set(quadcode, tile);
|
|
}
|
|
|
|
// Destroy the cache and remove it from memory
|
|
//
|
|
// TODO: Call destroy method on items in cache
|
|
destroy() {
|
|
this._cache.reset();
|
|
this._cache = null;
|
|
}
|
|
}
|
|
|
|
export default TileCache;
|
|
|
|
var noNew = function(cacheLimit, onDestroyTile) {
|
|
return new TileCache(cacheLimit, onDestroyTile);
|
|
};
|
|
|
|
// Initialise without requiring new keyword
|
|
export {noNew as tileCache};
|