atomic-fns 1.1.7 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +405 -60
- package/dist/array/index.d.ts +9 -0
- package/dist/array/index.js +9 -0
- package/dist/array/list.d.ts +99 -0
- package/dist/array/list.js +133 -0
- package/dist/array/sets.d.ts +130 -0
- package/dist/array/sets.js +213 -0
- package/dist/async/index.d.ts +6 -0
- package/dist/async/index.js +6 -0
- package/dist/async/retry.d.ts +38 -0
- package/dist/async/retry.js +56 -0
- package/dist/async/sleep.d.ts +42 -0
- package/dist/async/sleep.js +76 -0
- package/dist/collections/bisect.d.ts +103 -0
- package/dist/collections/bisect.js +157 -0
- package/dist/collections/deque.d.ts +67 -97
- package/dist/collections/deque.js +197 -249
- package/dist/collections/entries.d.ts +89 -0
- package/dist/collections/entries.js +131 -0
- package/dist/collections/frozen-set.d.ts +42 -0
- package/dist/collections/frozen-set.js +64 -0
- package/dist/collections/group.d.ts +141 -0
- package/dist/collections/group.js +241 -0
- package/dist/collections/heap.d.ts +64 -0
- package/dist/collections/heap.js +205 -0
- package/dist/collections/index.d.ts +15 -642
- package/dist/collections/index.js +14 -716
- package/dist/collections/internal/arrayKeys.d.ts +19 -0
- package/dist/collections/internal/arrayKeys.js +83 -0
- package/dist/collections/internal/invariants.d.ts +4 -0
- package/dist/collections/internal/invariants.js +12 -0
- package/dist/collections/internal/iterable.d.ts +25 -0
- package/dist/collections/internal/iterable.js +62 -0
- package/dist/collections/iterate.d.ts +162 -0
- package/dist/collections/iterate.js +188 -0
- package/dist/collections/lru-cache.d.ts +58 -0
- package/dist/collections/lru-cache.js +164 -0
- package/dist/collections/order.d.ts +19 -0
- package/dist/collections/order.js +38 -0
- package/dist/collections/shape.d.ts +32 -0
- package/dist/collections/shape.js +86 -0
- package/dist/collections/sorted-map.d.ts +171 -0
- package/dist/collections/sorted-map.js +845 -0
- package/dist/collections/sorted-set.d.ts +103 -0
- package/dist/collections/sorted-set.js +147 -0
- package/dist/collections/splay-tree.d.ts +82 -0
- package/dist/collections/splay-tree.js +354 -0
- package/dist/collections/trie.d.ts +58 -0
- package/dist/collections/trie.js +196 -0
- package/dist/decimal/currency.d.ts +211 -0
- package/dist/decimal/currency.js +321 -0
- package/dist/decimal/decimal.d.ts +299 -0
- package/dist/decimal/decimal.js +660 -0
- package/dist/decimal/index.d.ts +11 -145
- package/dist/decimal/index.js +10 -374
- package/dist/decimal/internal/bits.d.ts +2 -0
- package/dist/decimal/internal/bits.js +7 -0
- package/dist/decimal/internal/echo.d.ts +4 -0
- package/dist/decimal/internal/echo.js +6 -0
- package/dist/decimal/internal/isqrt.d.ts +9 -0
- package/dist/decimal/internal/isqrt.js +34 -0
- package/dist/decimal/internal/locale.d.ts +7 -0
- package/dist/decimal/internal/locale.js +24 -0
- package/dist/decimal/internal/minor-units.d.ts +2 -0
- package/dist/decimal/internal/minor-units.js +33 -0
- package/dist/decimal/internal/pow10.d.ts +24 -0
- package/dist/decimal/internal/pow10.js +96 -0
- package/dist/encoding/base64.d.ts +39 -0
- package/dist/encoding/base64.js +53 -0
- package/dist/encoding/hex.d.ts +23 -0
- package/dist/encoding/hex.js +34 -0
- package/dist/encoding/index.d.ts +6 -0
- package/dist/encoding/index.js +6 -0
- package/dist/function/debounce.d.ts +68 -0
- package/dist/function/debounce.js +203 -0
- package/dist/function/index.d.ts +6 -0
- package/dist/function/index.js +6 -0
- package/dist/function/shared.d.ts +2 -0
- package/dist/function/shared.js +5 -0
- package/dist/function/wrap.d.ts +130 -0
- package/dist/function/wrap.js +113 -0
- package/dist/hash/digest.d.ts +18 -0
- package/dist/hash/digest.js +26 -0
- package/dist/hash/hash.d.ts +22 -0
- package/dist/hash/hash.js +252 -0
- package/dist/hash/hashString.d.ts +13 -0
- package/dist/hash/hashString.js +53 -0
- package/dist/hash/index.d.ts +8 -0
- package/dist/hash/index.js +8 -0
- package/dist/hash/stableStringify.d.ts +19 -0
- package/dist/hash/stableStringify.js +102 -0
- package/dist/id/index.d.ts +7 -0
- package/dist/id/index.js +7 -0
- package/dist/id/nanoid.d.ts +16 -0
- package/dist/id/nanoid.js +65 -0
- package/dist/id/uniqueId.d.ts +14 -0
- package/dist/id/uniqueId.js +20 -0
- package/dist/id/uuid.d.ts +25 -0
- package/dist/id/uuid.js +64 -0
- package/dist/index.d.ts +15 -8
- package/dist/index.js +15 -8
- package/dist/internal/bytes.d.ts +11 -0
- package/dist/internal/bytes.js +33 -0
- package/dist/internal/codec.d.ts +11 -0
- package/dist/internal/codec.js +84 -0
- package/dist/internal/compare.d.ts +10 -0
- package/dist/internal/compare.js +26 -0
- package/dist/internal/crypto.d.ts +5 -0
- package/dist/internal/crypto.js +11 -0
- package/dist/internal/keys.d.ts +12 -0
- package/dist/internal/keys.js +23 -0
- package/dist/internal/kind.d.ts +44 -0
- package/dist/internal/kind.js +139 -0
- package/dist/internal/sparse.d.ts +51 -0
- package/dist/internal/sparse.js +104 -0
- package/dist/internal/text.d.ts +7 -0
- package/dist/internal/text.js +15 -0
- package/dist/internal/timer.d.ts +10 -0
- package/dist/internal/timer.js +17 -0
- package/dist/internal/truncate.d.ts +10 -0
- package/dist/internal/truncate.js +22 -0
- package/dist/internal/walk.d.ts +47 -0
- package/dist/internal/walk.js +100 -0
- package/dist/is/index.d.ts +8 -0
- package/dist/is/index.js +8 -0
- package/dist/is/isArrayLike.d.ts +18 -0
- package/dist/is/isArrayLike.js +25 -0
- package/dist/is/isError.d.ts +13 -0
- package/dist/is/isError.js +18 -0
- package/dist/is/isNil.d.ts +12 -0
- package/dist/is/isNil.js +14 -0
- package/dist/is/isPlainObject.d.ts +15 -0
- package/dist/is/isPlainObject.js +34 -0
- package/dist/number/index.d.ts +7 -0
- package/dist/number/index.js +7 -0
- package/dist/number/round.d.ts +86 -0
- package/dist/number/round.js +130 -0
- package/dist/number/stats.d.ts +52 -0
- package/dist/number/stats.js +115 -0
- package/dist/object/cloneDeep.d.ts +28 -0
- package/dist/object/cloneDeep.js +200 -0
- package/dist/object/index.d.ts +14 -0
- package/dist/object/index.js +13 -0
- package/dist/object/isEqual.d.ts +64 -0
- package/dist/object/isEqual.js +289 -0
- package/dist/object/matches.d.ts +40 -0
- package/dist/object/matches.js +284 -0
- package/dist/object/merge.d.ts +66 -0
- package/dist/object/merge.js +272 -0
- package/dist/object/parsePath.d.ts +22 -0
- package/dist/object/parsePath.js +111 -0
- package/dist/object/path.d.ts +85 -0
- package/dist/object/path.js +208 -0
- package/dist/object/pick.d.ts +91 -0
- package/dist/object/pick.js +180 -0
- package/dist/object/reshape.d.ts +73 -0
- package/dist/object/reshape.js +144 -0
- package/dist/random/index.d.ts +96 -32
- package/dist/random/index.js +215 -50
- package/dist/string/case.d.ts +71 -0
- package/dist/string/case.js +152 -0
- package/dist/string/fold.d.ts +35 -0
- package/dist/string/fold.js +100 -0
- package/dist/string/index.d.ts +6 -187
- package/dist/string/index.js +6 -226
- package/dist/string/truncate.d.ts +25 -0
- package/dist/string/truncate.js +44 -0
- package/dist/string/words.d.ts +27 -0
- package/dist/string/words.js +241 -0
- package/package.json +101 -58
- package/dist/collections/BTree.d.ts +0 -229
- package/dist/collections/BTree.js +0 -1165
- package/dist/collections/Heap.d.ts +0 -69
- package/dist/collections/Heap.js +0 -181
- package/dist/collections/LRUCache.d.ts +0 -80
- package/dist/collections/LRUCache.js +0 -126
- package/dist/collections/SortedMap.d.ts +0 -92
- package/dist/collections/SortedMap.js +0 -131
- package/dist/collections/SortedSet.d.ts +0 -69
- package/dist/collections/SortedSet.js +0 -99
- package/dist/collections/SortedTree.d.ts +0 -103
- package/dist/collections/SortedTree.js +0 -141
- package/dist/collections/SplayTree.d.ts +0 -105
- package/dist/collections/SplayTree.js +0 -338
- package/dist/collections/Trie.d.ts +0 -42
- package/dist/collections/Trie.js +0 -104
- package/dist/collections/abc.d.ts +0 -152
- package/dist/collections/abc.js +0 -39
- package/dist/collections/frozenset.d.ts +0 -19
- package/dist/collections/frozenset.js +0 -30
- package/dist/functools/index.d.ts +0 -130
- package/dist/functools/index.js +0 -235
- package/dist/globals/index.d.ts +0 -285
- package/dist/globals/index.js +0 -463
- package/dist/i18n/currency.d.ts +0 -24
- package/dist/i18n/currency.js +0 -85
- package/dist/i18n/date/index.d.ts +0 -203
- package/dist/i18n/date/index.js +0 -531
- package/dist/i18n/date/utils.d.ts +0 -65
- package/dist/i18n/date/utils.js +0 -290
- package/dist/i18n/duration.d.ts +0 -112
- package/dist/i18n/duration.js +0 -392
- package/dist/i18n/format.d.ts +0 -31
- package/dist/i18n/format.js +0 -506
- package/dist/i18n/index.d.ts +0 -8
- package/dist/i18n/index.js +0 -8
- package/dist/itertools/index.d.ts +0 -255
- package/dist/itertools/index.js +0 -437
- package/dist/math/index.d.ts +0 -96
- package/dist/math/index.js +0 -98
- package/dist/mod.d.ts +0 -1
- package/dist/mod.js +0 -1
- package/dist/operators/index.d.ts +0 -152
- package/dist/operators/index.js +0 -305
- package/dist/types.d.ts +0 -19
- package/dist/types.js +0 -1
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import type { Comparer } from '../operators/index.js';
|
|
2
|
-
import { compare } from '../operators/index.js';
|
|
3
|
-
import { Collection } from './abc.js';
|
|
4
|
-
export declare class Heap<T> extends Collection {
|
|
5
|
-
private readonly heap;
|
|
6
|
-
private readonly compare;
|
|
7
|
-
private count;
|
|
8
|
-
/**
|
|
9
|
-
* Initializes a new Heap instance.
|
|
10
|
-
*
|
|
11
|
-
* **Note:** When constructing the heap from an array, it will operate directly on this array. For other iterables, it will create a new array.
|
|
12
|
-
*
|
|
13
|
-
* @param {Iterable<T>} [container=[]] The initial values.
|
|
14
|
-
* @param {Comparer} [cmp=compare] Compare function. Defaults to smaller values first.
|
|
15
|
-
*/
|
|
16
|
-
constructor(container?: Iterable<T>, cmp?: Comparer);
|
|
17
|
-
at(n: number): T;
|
|
18
|
-
get size(): number;
|
|
19
|
-
clear(): void;
|
|
20
|
-
/**
|
|
21
|
-
* Push element into a container in order.
|
|
22
|
-
* @param item The element to push.
|
|
23
|
-
*/
|
|
24
|
-
add(item: T): void;
|
|
25
|
-
/**
|
|
26
|
-
* Removes the top element.
|
|
27
|
-
*/
|
|
28
|
-
pop(): T | undefined;
|
|
29
|
-
/**
|
|
30
|
-
* Accesses the top element.
|
|
31
|
-
*/
|
|
32
|
-
top(): T | undefined;
|
|
33
|
-
/**
|
|
34
|
-
* Check if element is in heap.
|
|
35
|
-
* @param item The item want to find.
|
|
36
|
-
* @return `true` if element exists.
|
|
37
|
-
*/
|
|
38
|
-
contains(item: T): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Remove specified item from heap.
|
|
41
|
-
* @param item The item want to remove.
|
|
42
|
-
* @return `true` if the item was removed.
|
|
43
|
-
*/
|
|
44
|
-
remove(item: T): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Returns an iterable with all the values in the heap.
|
|
47
|
-
* @returns {Iterable<T>} The values in the heap.
|
|
48
|
-
*/
|
|
49
|
-
values(): IterableIterator<T>;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Transform any array into a heap, in-place, in linear time.
|
|
53
|
-
* @param {Array} heap
|
|
54
|
-
* @param {Comparer} [compareFn=compare] Custom compare function
|
|
55
|
-
*/
|
|
56
|
-
export declare function heapify(heap: any, compareFn?: typeof compare): void;
|
|
57
|
-
/**
|
|
58
|
-
* Push the value `item` onto the `heap`, maintaining the heap invariant.
|
|
59
|
-
* @param {Array} heap
|
|
60
|
-
* @param {*} item
|
|
61
|
-
* @param {Comparer} [compareFn=compare] Custom compare function
|
|
62
|
-
*/
|
|
63
|
-
export declare function heappush<T>(heap: T[], item: T, compareFn?: typeof compare): void;
|
|
64
|
-
/**
|
|
65
|
-
* Pop and return the smallest item from the `heap`, maintaining the heap invariant.
|
|
66
|
-
* @param {Array} heap
|
|
67
|
-
* @param {Comparer} [compareFn=compare] Custom compare function
|
|
68
|
-
*/
|
|
69
|
-
export declare function heappop<T>(heap: T[], compareFn?: typeof compare): T;
|
package/dist/collections/Heap.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import { compare } from '../operators/index.js';
|
|
2
|
-
import { Collection } from './abc.js';
|
|
3
|
-
export class Heap extends Collection {
|
|
4
|
-
heap;
|
|
5
|
-
compare;
|
|
6
|
-
count = 0;
|
|
7
|
-
/**
|
|
8
|
-
* Initializes a new Heap instance.
|
|
9
|
-
*
|
|
10
|
-
* **Note:** When constructing the heap from an array, it will operate directly on this array. For other iterables, it will create a new array.
|
|
11
|
-
*
|
|
12
|
-
* @param {Iterable<T>} [container=[]] The initial values.
|
|
13
|
-
* @param {Comparer} [cmp=compare] Compare function. Defaults to smaller values first.
|
|
14
|
-
*/
|
|
15
|
-
constructor(container = [], cmp = compare) {
|
|
16
|
-
super();
|
|
17
|
-
this.compare = cmp;
|
|
18
|
-
if (Array.isArray(container)) {
|
|
19
|
-
// use the provided array to avoid copying.
|
|
20
|
-
this.heap = container;
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
this.heap = Array.from(container);
|
|
24
|
-
}
|
|
25
|
-
this.count = this.heap.length;
|
|
26
|
-
const halfLength = this.count >> 1;
|
|
27
|
-
// Heapify the items
|
|
28
|
-
for (let parent = (this.count - 1) >> 1; parent >= 0; --parent) {
|
|
29
|
-
heapifyDown(this.heap, parent, halfLength, this.compare);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
at(n) {
|
|
33
|
-
return this.heap.at(n);
|
|
34
|
-
}
|
|
35
|
-
get size() {
|
|
36
|
-
return this.count;
|
|
37
|
-
}
|
|
38
|
-
clear() {
|
|
39
|
-
this.count = 0;
|
|
40
|
-
this.heap.length = 0;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Push element into a container in order.
|
|
44
|
-
* @param item The element to push.
|
|
45
|
-
*/
|
|
46
|
-
add(item) {
|
|
47
|
-
this.heap.push(item);
|
|
48
|
-
heapifyUp(this.heap, this.count, this.compare);
|
|
49
|
-
this.count += 1;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Removes the top element.
|
|
53
|
-
*/
|
|
54
|
-
pop() {
|
|
55
|
-
if (!this.count)
|
|
56
|
-
return;
|
|
57
|
-
const value = this.heap[0];
|
|
58
|
-
const last = this.heap.pop();
|
|
59
|
-
this.count -= 1;
|
|
60
|
-
if (this.count) {
|
|
61
|
-
this.heap[0] = last;
|
|
62
|
-
heapifyDown(this.heap, 0, this.count >> 1, this.compare);
|
|
63
|
-
}
|
|
64
|
-
return value;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Accesses the top element.
|
|
68
|
-
*/
|
|
69
|
-
top() {
|
|
70
|
-
if (!this.count)
|
|
71
|
-
return;
|
|
72
|
-
return this.heap[0];
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Check if element is in heap.
|
|
76
|
-
* @param item The item want to find.
|
|
77
|
-
* @return `true` if element exists.
|
|
78
|
-
*/
|
|
79
|
-
contains(item) {
|
|
80
|
-
if (!this.count)
|
|
81
|
-
return false;
|
|
82
|
-
return this.heap.includes(item);
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Remove specified item from heap.
|
|
86
|
-
* @param item The item want to remove.
|
|
87
|
-
* @return `true` if the item was removed.
|
|
88
|
-
*/
|
|
89
|
-
remove(item) {
|
|
90
|
-
const index = this.heap.indexOf(item);
|
|
91
|
-
if (index < 0)
|
|
92
|
-
return false;
|
|
93
|
-
if (index === 0) {
|
|
94
|
-
this.pop();
|
|
95
|
-
}
|
|
96
|
-
else if (index === this.count - 1) {
|
|
97
|
-
this.heap.pop();
|
|
98
|
-
this.count -= 1;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
this.heap.splice(index, 1, this.heap.pop());
|
|
102
|
-
this.count -= 1;
|
|
103
|
-
heapifyUp(this.heap, index, this.compare);
|
|
104
|
-
heapifyDown(this.heap, index, this.count >> 1, this.compare);
|
|
105
|
-
}
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Returns an iterable with all the values in the heap.
|
|
110
|
-
* @returns {Iterable<T>} The values in the heap.
|
|
111
|
-
*/
|
|
112
|
-
values() {
|
|
113
|
-
return this.heap[Symbol.iterator]();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
function heapifyDown(heap, i, halfLength, compareFn = compare) {
|
|
117
|
-
const item = heap[i];
|
|
118
|
-
while (i < halfLength) {
|
|
119
|
-
let left = (i << 1) | 1;
|
|
120
|
-
const right = left + 1;
|
|
121
|
-
let minItem = heap[left];
|
|
122
|
-
if (right < heap.length && compareFn(minItem, heap[right]) > 0) {
|
|
123
|
-
left = right;
|
|
124
|
-
minItem = heap[right];
|
|
125
|
-
}
|
|
126
|
-
if (compareFn(minItem, item) >= 0)
|
|
127
|
-
break;
|
|
128
|
-
heap[i] = minItem;
|
|
129
|
-
i = left;
|
|
130
|
-
}
|
|
131
|
-
heap[i] = item;
|
|
132
|
-
}
|
|
133
|
-
function heapifyUp(heap, i, compareFn) {
|
|
134
|
-
const item = heap[i];
|
|
135
|
-
while (i > 0) {
|
|
136
|
-
const parent = (i - 1) >> 1;
|
|
137
|
-
const parentItem = heap[parent];
|
|
138
|
-
if (compareFn(parentItem, item) <= 0)
|
|
139
|
-
break;
|
|
140
|
-
heap[i] = parentItem;
|
|
141
|
-
i = parent;
|
|
142
|
-
}
|
|
143
|
-
heap[i] = item;
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Transform any array into a heap, in-place, in linear time.
|
|
147
|
-
* @param {Array} heap
|
|
148
|
-
* @param {Comparer} [compareFn=compare] Custom compare function
|
|
149
|
-
*/
|
|
150
|
-
export function heapify(heap, compareFn = compare) {
|
|
151
|
-
const size = heap.length;
|
|
152
|
-
const halfLength = size >> 1;
|
|
153
|
-
for (let parent = (size - 1) >> 1; parent >= 0; --parent) {
|
|
154
|
-
heapifyDown(heap, parent, halfLength, compareFn);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Push the value `item` onto the `heap`, maintaining the heap invariant.
|
|
159
|
-
* @param {Array} heap
|
|
160
|
-
* @param {*} item
|
|
161
|
-
* @param {Comparer} [compareFn=compare] Custom compare function
|
|
162
|
-
*/
|
|
163
|
-
export function heappush(heap, item, compareFn = compare) {
|
|
164
|
-
heap.push(item);
|
|
165
|
-
heapifyUp(heap, heap.length - 1, compareFn);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Pop and return the smallest item from the `heap`, maintaining the heap invariant.
|
|
169
|
-
* @param {Array} heap
|
|
170
|
-
* @param {Comparer} [compareFn=compare] Custom compare function
|
|
171
|
-
*/
|
|
172
|
-
export function heappop(heap, compareFn = compare) {
|
|
173
|
-
const last = heap.pop();
|
|
174
|
-
if (heap.length) {
|
|
175
|
-
const item = heap[0];
|
|
176
|
-
heap[0] = last;
|
|
177
|
-
heapifyDown(heap, 0, heap.length >> 1, compareFn);
|
|
178
|
-
return item;
|
|
179
|
-
}
|
|
180
|
-
return last;
|
|
181
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { Mapping } from './abc.js';
|
|
2
|
-
/**
|
|
3
|
-
* Implements a Least Recently Used fixed-capacity cache which supports updating, removing, and accessing keys in O(1).
|
|
4
|
-
* @template K, V
|
|
5
|
-
*/
|
|
6
|
-
export declare class LRUCache<K = any, V = any> extends Mapping<K, V> {
|
|
7
|
-
protected items: Map<K, V>;
|
|
8
|
-
protected maxSize: number;
|
|
9
|
-
/**
|
|
10
|
-
* Creates a new instance of fixed size.
|
|
11
|
-
* @param {number} capacity
|
|
12
|
-
*/
|
|
13
|
-
constructor(capacity?: number);
|
|
14
|
-
/**
|
|
15
|
-
* Adds a new element with a specified `key` and `value` to the cache. If an element with the same key already exists, the element will be updated.
|
|
16
|
-
* @param {K} key
|
|
17
|
-
* @param {V} value
|
|
18
|
-
* @returns {this}
|
|
19
|
-
*/
|
|
20
|
-
set(key: K, value: V): this;
|
|
21
|
-
/**
|
|
22
|
-
* This is just an alias of {@link LRUCache.set}.
|
|
23
|
-
* @param {K} key The key to add (note value will be `undefined`)
|
|
24
|
-
* @returns {this}
|
|
25
|
-
*/
|
|
26
|
-
add(key: K): this;
|
|
27
|
-
/**
|
|
28
|
-
* Returns `true` if the specified `key` is found on the cache.
|
|
29
|
-
* @param {K} key
|
|
30
|
-
* @returns {boolean}
|
|
31
|
-
*/
|
|
32
|
-
contains(key: K): boolean;
|
|
33
|
-
/**
|
|
34
|
-
* Get the value associated with the specified `key`, or `undefined` it not found.
|
|
35
|
-
* @param {K} key
|
|
36
|
-
* @returns {?V} The associated value or `undefined`
|
|
37
|
-
*/
|
|
38
|
-
get(key: K): V | undefined;
|
|
39
|
-
/**
|
|
40
|
-
* Removes all keys and values from the cache.
|
|
41
|
-
* @returns {this}
|
|
42
|
-
*/
|
|
43
|
-
clear(): this;
|
|
44
|
-
/**
|
|
45
|
-
* Removes a key from the cache and returns `true` if the key existed or `false` otherwise.
|
|
46
|
-
* @param {K} key
|
|
47
|
-
* @returns {boolean} `true` if the key existed and was removed
|
|
48
|
-
*/
|
|
49
|
-
delete(key: K): boolean;
|
|
50
|
-
/**
|
|
51
|
-
* Removes the value associated with the specified `key` from the cache and returns the removed value if the key existed.
|
|
52
|
-
* @param {K} key
|
|
53
|
-
* @returns {?V} The value if it was removed or `undefined`.
|
|
54
|
-
*/
|
|
55
|
-
remove(key: K): V | undefined;
|
|
56
|
-
/**
|
|
57
|
-
* Returns the total number of elements in the cache.
|
|
58
|
-
*/
|
|
59
|
-
get size(): number;
|
|
60
|
-
/**
|
|
61
|
-
* Returns the total capacity of the cache.
|
|
62
|
-
*/
|
|
63
|
-
get capacity(): number;
|
|
64
|
-
/**
|
|
65
|
-
* Returns an iterable of all the keys in the cache, in insertion order.
|
|
66
|
-
* @returns {IterableIterator<K>}
|
|
67
|
-
*/
|
|
68
|
-
keys(): IterableIterator<K>;
|
|
69
|
-
/**
|
|
70
|
-
* Returns an iterable of all the values in the cache, in insertion order.
|
|
71
|
-
* @returns {IterableIterator<V>}
|
|
72
|
-
*/
|
|
73
|
-
values(): IterableIterator<V>;
|
|
74
|
-
/**
|
|
75
|
-
* Returns an iterable of all the [key, value] pairs in the cache, in insertion order.
|
|
76
|
-
* @returns {IterableIterator<[K, V]>}
|
|
77
|
-
*/
|
|
78
|
-
entries(): IterableIterator<[K, V]>;
|
|
79
|
-
[Symbol.iterator](): IterableIterator<[K, V]>;
|
|
80
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { Mapping } from './abc.js';
|
|
2
|
-
/**
|
|
3
|
-
* Implements a Least Recently Used fixed-capacity cache which supports updating, removing, and accessing keys in O(1).
|
|
4
|
-
* @template K, V
|
|
5
|
-
*/
|
|
6
|
-
export class LRUCache extends Mapping {
|
|
7
|
-
items = new Map();
|
|
8
|
-
maxSize;
|
|
9
|
-
/**
|
|
10
|
-
* Creates a new instance of fixed size.
|
|
11
|
-
* @param {number} capacity
|
|
12
|
-
*/
|
|
13
|
-
constructor(capacity = 1024) {
|
|
14
|
-
super();
|
|
15
|
-
this.maxSize = capacity;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Adds a new element with a specified `key` and `value` to the cache. If an element with the same key already exists, the element will be updated.
|
|
19
|
-
* @param {K} key
|
|
20
|
-
* @param {V} value
|
|
21
|
-
* @returns {this}
|
|
22
|
-
*/
|
|
23
|
-
set(key, value) {
|
|
24
|
-
if (this.items.size === this.maxSize) {
|
|
25
|
-
// Because ES6 maps remember insertion order, we can evict the first key
|
|
26
|
-
const lastKey = this.items.keys().next().value;
|
|
27
|
-
this.items.delete(lastKey);
|
|
28
|
-
}
|
|
29
|
-
// Delete the previous key to update the new insertion order
|
|
30
|
-
this.items.delete(key);
|
|
31
|
-
this.items.set(key, value);
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* This is just an alias of {@link LRUCache.set}.
|
|
36
|
-
* @param {K} key The key to add (note value will be `undefined`)
|
|
37
|
-
* @returns {this}
|
|
38
|
-
*/
|
|
39
|
-
add(key) {
|
|
40
|
-
return this.set(key, undefined);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Returns `true` if the specified `key` is found on the cache.
|
|
44
|
-
* @param {K} key
|
|
45
|
-
* @returns {boolean}
|
|
46
|
-
*/
|
|
47
|
-
contains(key) {
|
|
48
|
-
return this.items.has(key);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Get the value associated with the specified `key`, or `undefined` it not found.
|
|
52
|
-
* @param {K} key
|
|
53
|
-
* @returns {?V} The associated value or `undefined`
|
|
54
|
-
*/
|
|
55
|
-
get(key) {
|
|
56
|
-
if (this.items.has(key)) {
|
|
57
|
-
const value = this.items.get(key);
|
|
58
|
-
// Delete the previous key to update the new insertion order
|
|
59
|
-
this.items.delete(key);
|
|
60
|
-
this.items.set(key, value);
|
|
61
|
-
return value;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Removes all keys and values from the cache.
|
|
66
|
-
* @returns {this}
|
|
67
|
-
*/
|
|
68
|
-
clear() {
|
|
69
|
-
this.items.clear();
|
|
70
|
-
return this;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Removes a key from the cache and returns `true` if the key existed or `false` otherwise.
|
|
74
|
-
* @param {K} key
|
|
75
|
-
* @returns {boolean} `true` if the key existed and was removed
|
|
76
|
-
*/
|
|
77
|
-
delete(key) {
|
|
78
|
-
return this.items.delete(key);
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Removes the value associated with the specified `key` from the cache and returns the removed value if the key existed.
|
|
82
|
-
* @param {K} key
|
|
83
|
-
* @returns {?V} The value if it was removed or `undefined`.
|
|
84
|
-
*/
|
|
85
|
-
remove(key) {
|
|
86
|
-
const value = this.items.get(key);
|
|
87
|
-
this.items.delete(key);
|
|
88
|
-
return value;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Returns the total number of elements in the cache.
|
|
92
|
-
*/
|
|
93
|
-
get size() {
|
|
94
|
-
return this.items.size;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Returns the total capacity of the cache.
|
|
98
|
-
*/
|
|
99
|
-
get capacity() {
|
|
100
|
-
return this.maxSize;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Returns an iterable of all the keys in the cache, in insertion order.
|
|
104
|
-
* @returns {IterableIterator<K>}
|
|
105
|
-
*/
|
|
106
|
-
keys() {
|
|
107
|
-
return this.items.keys();
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Returns an iterable of all the values in the cache, in insertion order.
|
|
111
|
-
* @returns {IterableIterator<V>}
|
|
112
|
-
*/
|
|
113
|
-
values() {
|
|
114
|
-
return this.items.values();
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Returns an iterable of all the [key, value] pairs in the cache, in insertion order.
|
|
118
|
-
* @returns {IterableIterator<[K, V]>}
|
|
119
|
-
*/
|
|
120
|
-
entries() {
|
|
121
|
-
return this.items.entries();
|
|
122
|
-
}
|
|
123
|
-
[Symbol.iterator]() {
|
|
124
|
-
return this.entries();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { Mapping } from './abc.js';
|
|
2
|
-
/**
|
|
3
|
-
* A `SortedMap` is a map that holds key value pairs ordered by keys. Any primitive value (and objects that implement {@link Comparable} or {@link Ordered} interfaces) can be used as keys or values.
|
|
4
|
-
* @see {@link operators.compare}
|
|
5
|
-
* @see {@link operators.lt}
|
|
6
|
-
* @template K, V
|
|
7
|
-
*/
|
|
8
|
-
export declare class SortedMap<K, V> extends Mapping<K, V> {
|
|
9
|
-
private readonly store;
|
|
10
|
-
/**
|
|
11
|
-
* Creates a new `SortedMap` object.
|
|
12
|
-
* @param {Iterable<[K, V]>} [iterable] Initialize the map with entries.
|
|
13
|
-
* @param {Comparer} [compareFn] The `compare` function to sort keys.
|
|
14
|
-
*/
|
|
15
|
-
constructor(iterable?: Iterable<[K, V]>, compareFn?: any);
|
|
16
|
-
/**
|
|
17
|
-
* Adds a new `key` with a `null` value, if the `key` doesn't exist.
|
|
18
|
-
* @param {K} key
|
|
19
|
-
* @returns {this} Returns the Map object.
|
|
20
|
-
*/
|
|
21
|
-
add(key: K): this;
|
|
22
|
-
/**
|
|
23
|
-
* Returns the value associated with the `key` or `undefined`.
|
|
24
|
-
* @param {K} key
|
|
25
|
-
* @returns {?V} The key value or `undefined`.
|
|
26
|
-
*/
|
|
27
|
-
get(key: K): V | undefined;
|
|
28
|
-
/**
|
|
29
|
-
* Sets the value for the given `key`.
|
|
30
|
-
* @param {K} key
|
|
31
|
-
* @param {V} value
|
|
32
|
-
* @returns {this} Returns the Map object.
|
|
33
|
-
*/
|
|
34
|
-
set(key: K, value: V): this;
|
|
35
|
-
/**
|
|
36
|
-
* Returns the smallest key in the tree.
|
|
37
|
-
* @returns {?K}
|
|
38
|
-
*/
|
|
39
|
-
min(): K | undefined;
|
|
40
|
-
/**
|
|
41
|
-
* Returns the largest key in the tree.
|
|
42
|
-
* @returns {?K}
|
|
43
|
-
*/
|
|
44
|
-
max(): K | undefined;
|
|
45
|
-
/**
|
|
46
|
-
* Returns `true` if the `key` existed in the map and was removed.
|
|
47
|
-
* @param {K} key
|
|
48
|
-
* @returns {boolean} `true` if key was removed, otherwise `false`.
|
|
49
|
-
*/
|
|
50
|
-
delete(item: K): boolean;
|
|
51
|
-
/**
|
|
52
|
-
* Removes all key/value pairs in the tree.
|
|
53
|
-
*/
|
|
54
|
-
clear(): void;
|
|
55
|
-
/**
|
|
56
|
-
* Returns the total key/value pairs in the tree.
|
|
57
|
-
* @returns {number}
|
|
58
|
-
*/
|
|
59
|
-
get size(): number;
|
|
60
|
-
/**
|
|
61
|
-
* Check if there are no key/value pairs in the tree.
|
|
62
|
-
* @returns {boolean} `true` if is empty.
|
|
63
|
-
*/
|
|
64
|
-
empty(): boolean;
|
|
65
|
-
/**
|
|
66
|
-
* Returns `true` if the `key` exists in the map.
|
|
67
|
-
* @param {K} key
|
|
68
|
-
* @returns {boolean} `true` if key is found, otherwise `false`.
|
|
69
|
-
*/
|
|
70
|
-
contains(key: K): boolean;
|
|
71
|
-
/**
|
|
72
|
-
* Returns `true` if the `key` exists in the map.
|
|
73
|
-
* @param {K} key
|
|
74
|
-
* @returns {boolean} `true` if key is found, otherwise `false`.
|
|
75
|
-
*/
|
|
76
|
-
has(key: K): boolean;
|
|
77
|
-
/**
|
|
78
|
-
* Returns a new iterator of all **ordered** keys in the map.
|
|
79
|
-
* @returns {Iterable<K>}
|
|
80
|
-
*/
|
|
81
|
-
keys(): Iterable<K>;
|
|
82
|
-
/**
|
|
83
|
-
* Returns a new iterator of all values **ordered** by their keys.
|
|
84
|
-
* @returns {Iterable<V>}
|
|
85
|
-
*/
|
|
86
|
-
values(): Iterable<V>;
|
|
87
|
-
/**
|
|
88
|
-
* Returns a new iterator of all key value pairs **ordered** by their keys.
|
|
89
|
-
* @returns {Iterable<[K, V]>}
|
|
90
|
-
*/
|
|
91
|
-
entries(): Iterable<[K, V]>;
|
|
92
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { Mapping } from './abc.js';
|
|
2
|
-
import { SplayTree } from './SplayTree.js';
|
|
3
|
-
/**
|
|
4
|
-
* A `SortedMap` is a map that holds key value pairs ordered by keys. Any primitive value (and objects that implement {@link Comparable} or {@link Ordered} interfaces) can be used as keys or values.
|
|
5
|
-
* @see {@link operators.compare}
|
|
6
|
-
* @see {@link operators.lt}
|
|
7
|
-
* @template K, V
|
|
8
|
-
*/
|
|
9
|
-
export class SortedMap extends Mapping {
|
|
10
|
-
store;
|
|
11
|
-
/**
|
|
12
|
-
* Creates a new `SortedMap` object.
|
|
13
|
-
* @param {Iterable<[K, V]>} [iterable] Initialize the map with entries.
|
|
14
|
-
* @param {Comparer} [compareFn] The `compare` function to sort keys.
|
|
15
|
-
*/
|
|
16
|
-
constructor(iterable, compareFn) {
|
|
17
|
-
super();
|
|
18
|
-
this.store = new SplayTree(compareFn);
|
|
19
|
-
if (iterable) {
|
|
20
|
-
for (const pair of iterable) {
|
|
21
|
-
this.store.set(pair[0], pair[1] ?? null);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Adds a new `key` with a `null` value, if the `key` doesn't exist.
|
|
27
|
-
* @param {K} key
|
|
28
|
-
* @returns {this} Returns the Map object.
|
|
29
|
-
*/
|
|
30
|
-
add(key) {
|
|
31
|
-
this.store.set(key, null);
|
|
32
|
-
return this;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Returns the value associated with the `key` or `undefined`.
|
|
36
|
-
* @param {K} key
|
|
37
|
-
* @returns {?V} The key value or `undefined`.
|
|
38
|
-
*/
|
|
39
|
-
get(key) {
|
|
40
|
-
return this.store.get(key);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Sets the value for the given `key`.
|
|
44
|
-
* @param {K} key
|
|
45
|
-
* @param {V} value
|
|
46
|
-
* @returns {this} Returns the Map object.
|
|
47
|
-
*/
|
|
48
|
-
set(key, value) {
|
|
49
|
-
this.store.set(key, value);
|
|
50
|
-
return this;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Returns the smallest key in the tree.
|
|
54
|
-
* @returns {?K}
|
|
55
|
-
*/
|
|
56
|
-
min() {
|
|
57
|
-
return this.store.min();
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Returns the largest key in the tree.
|
|
61
|
-
* @returns {?K}
|
|
62
|
-
*/
|
|
63
|
-
max() {
|
|
64
|
-
return this.store.max();
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Returns `true` if the `key` existed in the map and was removed.
|
|
68
|
-
* @param {K} key
|
|
69
|
-
* @returns {boolean} `true` if key was removed, otherwise `false`.
|
|
70
|
-
*/
|
|
71
|
-
delete(item) {
|
|
72
|
-
return this.store.remove(item) !== undefined;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Removes all key/value pairs in the tree.
|
|
76
|
-
*/
|
|
77
|
-
clear() {
|
|
78
|
-
return this.store.clear();
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Returns the total key/value pairs in the tree.
|
|
82
|
-
* @returns {number}
|
|
83
|
-
*/
|
|
84
|
-
get size() {
|
|
85
|
-
return this.store.size;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Check if there are no key/value pairs in the tree.
|
|
89
|
-
* @returns {boolean} `true` if is empty.
|
|
90
|
-
*/
|
|
91
|
-
empty() {
|
|
92
|
-
return this.store.empty();
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Returns `true` if the `key` exists in the map.
|
|
96
|
-
* @param {K} key
|
|
97
|
-
* @returns {boolean} `true` if key is found, otherwise `false`.
|
|
98
|
-
*/
|
|
99
|
-
contains(key) {
|
|
100
|
-
return this.store.contains(key);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Returns `true` if the `key` exists in the map.
|
|
104
|
-
* @param {K} key
|
|
105
|
-
* @returns {boolean} `true` if key is found, otherwise `false`.
|
|
106
|
-
*/
|
|
107
|
-
has(key) {
|
|
108
|
-
return this.store.contains(key);
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Returns a new iterator of all **ordered** keys in the map.
|
|
112
|
-
* @returns {Iterable<K>}
|
|
113
|
-
*/
|
|
114
|
-
keys() {
|
|
115
|
-
return this.store.keys();
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Returns a new iterator of all values **ordered** by their keys.
|
|
119
|
-
* @returns {Iterable<V>}
|
|
120
|
-
*/
|
|
121
|
-
values() {
|
|
122
|
-
return this.store.values();
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Returns a new iterator of all key value pairs **ordered** by their keys.
|
|
126
|
-
* @returns {Iterable<[K, V]>}
|
|
127
|
-
*/
|
|
128
|
-
entries() {
|
|
129
|
-
return this.store.entries();
|
|
130
|
-
}
|
|
131
|
-
}
|