1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.lruQueue = lruQueue;
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | function 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 |