| 'use strict' |
| |
| class LRUCache { |
| constructor () { |
| this.max = 1000 |
| this.map = new Map() |
| } |
| |
| get (key) { |
| const value = this.map.get(key) |
| if (value === undefined) { |
| return undefined |
| } else { |
| // Remove the key from the map and add it to the end |
| this.map.delete(key) |
| this.map.set(key, value) |
| return value |
| } |
| } |
| |
| delete (key) { |
| return this.map.delete(key) |
| } |
| |
| set (key, value) { |
| const deleted = this.delete(key) |
| |
| if (!deleted && value !== undefined) { |
| // If cache is full, delete the least recently used item |
| if (this.map.size >= this.max) { |
| const firstKey = this.map.keys().next().value |
| this.delete(firstKey) |
| } |
| |
| this.map.set(key, value) |
| } |
| |
| return this |
| } |
| } |
| |
| module.exports = LRUCache |