UNPKG

1.39 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.lruQueue = lruQueue;
7
8// (c) 2018, Mariusz Nowak
9// SPDX-License-Identifier: ISC
10// Derived from https://github.com/medikoo/lru-queue
11function lruQueue(limit) {
12 var size = 0;
13 var base = 1;
14 var queue = Object.create(null);
15 var map = Object.create(null);
16 var index = 0;
17
18 var del = function del(id) {
19 var oldIndex = map[id];
20 if (!oldIndex) return;
21 delete queue[oldIndex];
22 delete map[id];
23 --size;
24 if (base !== oldIndex) return;
25
26 if (!size) {
27 index = 0;
28 base = 1;
29 return;
30 }
31
32 while (!hasOwnProperty.call(queue, ++base)) {
33 continue;
34 }
35 };
36
37 limit = Math.abs(limit);
38 return {
39 hit: function hit(id) {
40 var oldIndex = map[id];
41 var nuIndex = ++index;
42 queue[nuIndex] = id;
43 map[id] = nuIndex;
44
45 if (!oldIndex) {
46 ++size;
47 if (size <= limit) return undefined;
48 id = queue[base];
49 del(id);
50 return id;
51 }
52
53 delete queue[oldIndex];
54 if (base !== oldIndex) return undefined;
55
56 while (!hasOwnProperty.call(queue, ++base)) {
57 continue;
58 }
59
60 return undefined;
61 },
62 "delete": del,
63 clear: function clear() {
64 size = index = 0;
65 base = 1;
66 queue = Object.create(null);
67 map = Object.create(null);
68 }
69 };
70}
71
72;
\No newline at end of file