| var Entry = (function () { | 
|     function Entry(val) { | 
|         this.value = val; | 
|     } | 
|     return Entry; | 
| }()); | 
| export { Entry }; | 
| var LinkedList = (function () { | 
|     function LinkedList() { | 
|         this._len = 0; | 
|     } | 
|     LinkedList.prototype.insert = function (val) { | 
|         var entry = new Entry(val); | 
|         this.insertEntry(entry); | 
|         return entry; | 
|     }; | 
|     LinkedList.prototype.insertEntry = function (entry) { | 
|         if (!this.head) { | 
|             this.head = this.tail = entry; | 
|         } | 
|         else { | 
|             this.tail.next = entry; | 
|             entry.prev = this.tail; | 
|             entry.next = null; | 
|             this.tail = entry; | 
|         } | 
|         this._len++; | 
|     }; | 
|     LinkedList.prototype.remove = function (entry) { | 
|         var prev = entry.prev; | 
|         var next = entry.next; | 
|         if (prev) { | 
|             prev.next = next; | 
|         } | 
|         else { | 
|             this.head = next; | 
|         } | 
|         if (next) { | 
|             next.prev = prev; | 
|         } | 
|         else { | 
|             this.tail = prev; | 
|         } | 
|         entry.next = entry.prev = null; | 
|         this._len--; | 
|     }; | 
|     LinkedList.prototype.len = function () { | 
|         return this._len; | 
|     }; | 
|     LinkedList.prototype.clear = function () { | 
|         this.head = this.tail = null; | 
|         this._len = 0; | 
|     }; | 
|     return LinkedList; | 
| }()); | 
| export { LinkedList }; | 
| var LRU = (function () { | 
|     function LRU(maxSize) { | 
|         this._list = new LinkedList(); | 
|         this._maxSize = 10; | 
|         this._map = {}; | 
|         this._maxSize = maxSize; | 
|     } | 
|     LRU.prototype.put = function (key, value) { | 
|         var list = this._list; | 
|         var map = this._map; | 
|         var removed = null; | 
|         if (map[key] == null) { | 
|             var len = list.len(); | 
|             var entry = this._lastRemovedEntry; | 
|             if (len >= this._maxSize && len > 0) { | 
|                 var leastUsedEntry = list.head; | 
|                 list.remove(leastUsedEntry); | 
|                 delete map[leastUsedEntry.key]; | 
|                 removed = leastUsedEntry.value; | 
|                 this._lastRemovedEntry = leastUsedEntry; | 
|             } | 
|             if (entry) { | 
|                 entry.value = value; | 
|             } | 
|             else { | 
|                 entry = new Entry(value); | 
|             } | 
|             entry.key = key; | 
|             list.insertEntry(entry); | 
|             map[key] = entry; | 
|         } | 
|         return removed; | 
|     }; | 
|     LRU.prototype.get = function (key) { | 
|         var entry = this._map[key]; | 
|         var list = this._list; | 
|         if (entry != null) { | 
|             if (entry !== list.tail) { | 
|                 list.remove(entry); | 
|                 list.insertEntry(entry); | 
|             } | 
|             return entry.value; | 
|         } | 
|     }; | 
|     LRU.prototype.clear = function () { | 
|         this._list.clear(); | 
|         this._map = {}; | 
|     }; | 
|     LRU.prototype.len = function () { | 
|         return this._list.len(); | 
|     }; | 
|     return LRU; | 
| }()); | 
| export default LRU; |