avl-tree-typed 2.1.0 → 2.1.2
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/dist/cjs/index.cjs +3859 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/esm/index.mjs +3852 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/types/data-structures/base/index.d.ts +2 -1
- package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +182 -2
- package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +135 -2
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +291 -2
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +174 -1
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +754 -29
- package/dist/types/data-structures/binary-tree/bst.d.ts +413 -12
- package/dist/types/data-structures/binary-tree/index.d.ts +3 -2
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +208 -3
- package/dist/types/data-structures/binary-tree/segment-tree.d.ts +160 -1
- package/dist/types/data-structures/binary-tree/tree-counter.d.ts +190 -2
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +270 -2
- package/dist/types/data-structures/graph/abstract-graph.d.ts +340 -14
- package/dist/types/data-structures/graph/directed-graph.d.ts +207 -1
- package/dist/types/data-structures/graph/index.d.ts +2 -1
- package/dist/types/data-structures/graph/map-graph.d.ts +78 -1
- package/dist/types/data-structures/graph/undirected-graph.d.ts +188 -1
- package/dist/types/data-structures/hash/hash-map.d.ts +345 -19
- package/dist/types/data-structures/hash/index.d.ts +0 -1
- package/dist/types/data-structures/heap/heap.d.ts +503 -5
- package/dist/types/data-structures/heap/index.d.ts +2 -0
- package/dist/types/data-structures/heap/max-heap.d.ts +32 -1
- package/dist/types/data-structures/heap/min-heap.d.ts +33 -1
- package/dist/types/data-structures/index.d.ts +7 -7
- package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +769 -2
- package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +451 -2
- package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +27 -4
- package/dist/types/data-structures/matrix/index.d.ts +1 -1
- package/dist/types/data-structures/matrix/matrix.d.ts +168 -7
- package/dist/types/data-structures/matrix/navigator.d.ts +54 -13
- package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +27 -1
- package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +26 -1
- package/dist/types/data-structures/priority-queue/priority-queue.d.ts +15 -2
- package/dist/types/data-structures/queue/deque.d.ts +431 -4
- package/dist/types/data-structures/queue/queue.d.ts +308 -4
- package/dist/types/data-structures/stack/stack.d.ts +306 -2
- package/dist/types/data-structures/tree/tree.d.ts +62 -1
- package/dist/types/data-structures/trie/trie.d.ts +350 -4
- package/dist/types/index.d.ts +15 -3
- package/dist/{interfaces → types/interfaces}/binary-tree.d.ts +3 -3
- package/dist/types/types/data-structures/base/index.d.ts +1 -0
- package/dist/types/types/data-structures/binary-tree/avl-tree-counter.d.ts +2 -0
- package/dist/types/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -0
- package/dist/types/types/data-structures/binary-tree/avl-tree.d.ts +2 -0
- package/dist/types/types/data-structures/binary-tree/binary-indexed-tree.d.ts +1 -0
- package/dist/types/types/data-structures/binary-tree/binary-tree.d.ts +29 -0
- package/dist/types/types/data-structures/binary-tree/bst.d.ts +12 -0
- package/dist/{data-structures → types/types/data-structures}/binary-tree/index.d.ts +2 -3
- package/dist/types/types/data-structures/binary-tree/red-black-tree.d.ts +3 -0
- package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -0
- package/dist/types/types/data-structures/binary-tree/tree-counter.d.ts +2 -0
- package/dist/types/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -0
- package/dist/types/types/data-structures/graph/abstract-graph.d.ts +14 -0
- package/dist/types/types/data-structures/graph/directed-graph.d.ts +1 -0
- package/dist/{data-structures → types/types/data-structures}/graph/index.d.ts +1 -2
- package/dist/types/types/data-structures/graph/map-graph.d.ts +1 -0
- package/dist/types/types/data-structures/graph/undirected-graph.d.ts +1 -0
- package/dist/types/types/data-structures/hash/hash-map.d.ts +19 -0
- package/dist/types/types/data-structures/hash/index.d.ts +2 -0
- package/dist/types/types/data-structures/heap/heap.d.ts +5 -0
- package/dist/types/types/data-structures/heap/index.d.ts +1 -0
- package/dist/types/types/data-structures/heap/max-heap.d.ts +1 -0
- package/dist/types/types/data-structures/heap/min-heap.d.ts +1 -0
- package/dist/types/types/data-structures/linked-list/doubly-linked-list.d.ts +2 -0
- package/dist/types/types/data-structures/linked-list/singly-linked-list.d.ts +2 -0
- package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +4 -0
- package/dist/types/types/data-structures/matrix/matrix.d.ts +7 -0
- package/dist/types/types/data-structures/matrix/navigator.d.ts +14 -0
- package/dist/types/types/data-structures/priority-queue/max-priority-queue.d.ts +1 -0
- package/dist/types/types/data-structures/priority-queue/min-priority-queue.d.ts +1 -0
- package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +2 -0
- package/dist/types/types/data-structures/queue/deque.d.ts +4 -0
- package/dist/types/types/data-structures/queue/queue.d.ts +4 -0
- package/dist/types/types/data-structures/stack/stack.d.ts +2 -0
- package/dist/types/types/data-structures/tree/tree.d.ts +1 -0
- package/dist/types/types/data-structures/trie/trie.d.ts +4 -0
- package/dist/types/types/index.d.ts +3 -0
- package/dist/types/types/utils/index.d.ts +2 -0
- package/dist/types/types/utils/utils.d.ts +22 -0
- package/dist/types/utils/index.d.ts +1 -1
- package/dist/types/utils/utils.d.ts +209 -22
- package/dist/umd/avl-tree-typed.js +3852 -0
- package/dist/umd/avl-tree-typed.js.map +1 -0
- package/dist/umd/avl-tree-typed.min.js +13 -0
- package/dist/umd/avl-tree-typed.min.js.map +1 -0
- package/package.json +25 -5
- package/src/data-structures/binary-tree/avl-tree-counter.ts +8 -11
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +6 -11
- package/src/data-structures/binary-tree/avl-tree.ts +6 -8
- package/src/data-structures/binary-tree/binary-tree.ts +13 -15
- package/src/data-structures/binary-tree/bst.ts +6 -11
- package/src/data-structures/binary-tree/red-black-tree.ts +6 -11
- package/src/data-structures/binary-tree/tree-counter.ts +8 -13
- package/src/data-structures/binary-tree/tree-multi-map.ts +6 -11
- package/src/data-structures/heap/heap.ts +5 -5
- package/src/data-structures/linked-list/singly-linked-list.ts +2 -2
- package/src/interfaces/binary-tree.ts +3 -3
- package/tsconfig.base.json +23 -0
- package/tsconfig.json +8 -34
- package/tsconfig.test.json +8 -0
- package/tsconfig.types.json +15 -0
- package/tsup.config.js +28 -0
- package/tsup.node.config.js +37 -0
- package/dist/common/index.js +0 -28
- package/dist/constants/index.js +0 -8
- package/dist/data-structures/base/index.d.ts +0 -2
- package/dist/data-structures/base/index.js +0 -18
- package/dist/data-structures/base/iterable-element-base.js +0 -243
- package/dist/data-structures/base/iterable-entry-base.js +0 -183
- package/dist/data-structures/base/linear-base.js +0 -415
- package/dist/data-structures/binary-tree/avl-tree-counter.d.ts +0 -182
- package/dist/data-structures/binary-tree/avl-tree-counter.js +0 -374
- package/dist/data-structures/binary-tree/avl-tree-multi-map.d.ts +0 -135
- package/dist/data-structures/binary-tree/avl-tree-multi-map.js +0 -250
- package/dist/data-structures/binary-tree/avl-tree.d.ts +0 -291
- package/dist/data-structures/binary-tree/avl-tree.js +0 -611
- package/dist/data-structures/binary-tree/binary-indexed-tree.d.ts +0 -174
- package/dist/data-structures/binary-tree/binary-indexed-tree.js +0 -294
- package/dist/data-structures/binary-tree/binary-tree.d.ts +0 -754
- package/dist/data-structures/binary-tree/binary-tree.js +0 -1925
- package/dist/data-structures/binary-tree/bst.d.ts +0 -413
- package/dist/data-structures/binary-tree/bst.js +0 -903
- package/dist/data-structures/binary-tree/index.js +0 -26
- package/dist/data-structures/binary-tree/red-black-tree.d.ts +0 -208
- package/dist/data-structures/binary-tree/red-black-tree.js +0 -546
- package/dist/data-structures/binary-tree/segment-tree.d.ts +0 -160
- package/dist/data-structures/binary-tree/segment-tree.js +0 -297
- package/dist/data-structures/binary-tree/tree-counter.d.ts +0 -190
- package/dist/data-structures/binary-tree/tree-counter.js +0 -413
- package/dist/data-structures/binary-tree/tree-multi-map.d.ts +0 -270
- package/dist/data-structures/binary-tree/tree-multi-map.js +0 -384
- package/dist/data-structures/graph/abstract-graph.d.ts +0 -340
- package/dist/data-structures/graph/abstract-graph.js +0 -896
- package/dist/data-structures/graph/directed-graph.d.ts +0 -207
- package/dist/data-structures/graph/directed-graph.js +0 -525
- package/dist/data-structures/graph/index.js +0 -20
- package/dist/data-structures/graph/map-graph.d.ts +0 -78
- package/dist/data-structures/graph/map-graph.js +0 -107
- package/dist/data-structures/graph/undirected-graph.d.ts +0 -188
- package/dist/data-structures/graph/undirected-graph.js +0 -424
- package/dist/data-structures/hash/hash-map.d.ts +0 -345
- package/dist/data-structures/hash/hash-map.js +0 -692
- package/dist/data-structures/hash/index.d.ts +0 -1
- package/dist/data-structures/hash/index.js +0 -17
- package/dist/data-structures/heap/heap.d.ts +0 -503
- package/dist/data-structures/heap/heap.js +0 -901
- package/dist/data-structures/heap/index.d.ts +0 -3
- package/dist/data-structures/heap/index.js +0 -19
- package/dist/data-structures/heap/max-heap.d.ts +0 -32
- package/dist/data-structures/heap/max-heap.js +0 -40
- package/dist/data-structures/heap/min-heap.d.ts +0 -33
- package/dist/data-structures/heap/min-heap.js +0 -31
- package/dist/data-structures/index.js +0 -28
- package/dist/data-structures/linked-list/doubly-linked-list.d.ts +0 -769
- package/dist/data-structures/linked-list/doubly-linked-list.js +0 -1111
- package/dist/data-structures/linked-list/index.js +0 -19
- package/dist/data-structures/linked-list/singly-linked-list.d.ts +0 -451
- package/dist/data-structures/linked-list/singly-linked-list.js +0 -850
- package/dist/data-structures/linked-list/skip-linked-list.d.ts +0 -27
- package/dist/data-structures/linked-list/skip-linked-list.js +0 -144
- package/dist/data-structures/matrix/index.js +0 -18
- package/dist/data-structures/matrix/matrix.d.ts +0 -168
- package/dist/data-structures/matrix/matrix.js +0 -448
- package/dist/data-structures/matrix/navigator.d.ts +0 -55
- package/dist/data-structures/matrix/navigator.js +0 -111
- package/dist/data-structures/priority-queue/index.js +0 -19
- package/dist/data-structures/priority-queue/max-priority-queue.d.ts +0 -27
- package/dist/data-structures/priority-queue/max-priority-queue.js +0 -34
- package/dist/data-structures/priority-queue/min-priority-queue.d.ts +0 -26
- package/dist/data-structures/priority-queue/min-priority-queue.js +0 -24
- package/dist/data-structures/priority-queue/priority-queue.d.ts +0 -15
- package/dist/data-structures/priority-queue/priority-queue.js +0 -20
- package/dist/data-structures/queue/deque.d.ts +0 -431
- package/dist/data-structures/queue/deque.js +0 -879
- package/dist/data-structures/queue/index.js +0 -18
- package/dist/data-structures/queue/queue.d.ts +0 -308
- package/dist/data-structures/queue/queue.js +0 -473
- package/dist/data-structures/stack/index.js +0 -17
- package/dist/data-structures/stack/stack.d.ts +0 -306
- package/dist/data-structures/stack/stack.js +0 -401
- package/dist/data-structures/tree/index.js +0 -17
- package/dist/data-structures/tree/tree.d.ts +0 -62
- package/dist/data-structures/tree/tree.js +0 -107
- package/dist/data-structures/trie/index.js +0 -17
- package/dist/data-structures/trie/trie.d.ts +0 -350
- package/dist/data-structures/trie/trie.js +0 -610
- package/dist/index.d.ts +0 -15
- package/dist/index.js +0 -31
- package/dist/interfaces/binary-tree.js +0 -2
- package/dist/interfaces/doubly-linked-list.js +0 -2
- package/dist/interfaces/graph.js +0 -2
- package/dist/interfaces/heap.js +0 -2
- package/dist/interfaces/index.js +0 -24
- package/dist/interfaces/navigator.js +0 -2
- package/dist/interfaces/priority-queue.js +0 -2
- package/dist/interfaces/segment-tree.js +0 -2
- package/dist/interfaces/singly-linked-list.js +0 -2
- package/dist/types/common.js +0 -2
- package/dist/types/data-structures/base/base.js +0 -2
- package/dist/types/data-structures/base/index.js +0 -17
- package/dist/types/data-structures/binary-tree/avl-tree-counter.js +0 -2
- package/dist/types/data-structures/binary-tree/avl-tree-multi-map.js +0 -2
- package/dist/types/data-structures/binary-tree/avl-tree.js +0 -2
- package/dist/types/data-structures/binary-tree/binary-indexed-tree.js +0 -2
- package/dist/types/data-structures/binary-tree/binary-tree.js +0 -2
- package/dist/types/data-structures/binary-tree/bst.js +0 -2
- package/dist/types/data-structures/binary-tree/index.js +0 -25
- package/dist/types/data-structures/binary-tree/red-black-tree.js +0 -2
- package/dist/types/data-structures/binary-tree/segment-tree.js +0 -2
- package/dist/types/data-structures/binary-tree/tree-counter.js +0 -2
- package/dist/types/data-structures/binary-tree/tree-multi-map.js +0 -2
- package/dist/types/data-structures/graph/abstract-graph.js +0 -2
- package/dist/types/data-structures/graph/directed-graph.js +0 -2
- package/dist/types/data-structures/graph/index.js +0 -19
- package/dist/types/data-structures/graph/map-graph.js +0 -2
- package/dist/types/data-structures/graph/undirected-graph.js +0 -2
- package/dist/types/data-structures/hash/hash-map.js +0 -2
- package/dist/types/data-structures/hash/index.js +0 -17
- package/dist/types/data-structures/heap/heap.js +0 -2
- package/dist/types/data-structures/heap/index.js +0 -17
- package/dist/types/data-structures/heap/max-heap.js +0 -2
- package/dist/types/data-structures/heap/min-heap.js +0 -2
- package/dist/types/data-structures/index.js +0 -28
- package/dist/types/data-structures/linked-list/doubly-linked-list.js +0 -2
- package/dist/types/data-structures/linked-list/index.js +0 -19
- package/dist/types/data-structures/linked-list/singly-linked-list.js +0 -2
- package/dist/types/data-structures/linked-list/skip-linked-list.js +0 -2
- package/dist/types/data-structures/matrix/index.js +0 -18
- package/dist/types/data-structures/matrix/matrix.js +0 -2
- package/dist/types/data-structures/matrix/navigator.js +0 -2
- package/dist/types/data-structures/priority-queue/index.js +0 -19
- package/dist/types/data-structures/priority-queue/max-priority-queue.js +0 -2
- package/dist/types/data-structures/priority-queue/min-priority-queue.js +0 -2
- package/dist/types/data-structures/priority-queue/priority-queue.js +0 -2
- package/dist/types/data-structures/queue/deque.js +0 -2
- package/dist/types/data-structures/queue/index.js +0 -18
- package/dist/types/data-structures/queue/queue.js +0 -2
- package/dist/types/data-structures/stack/index.js +0 -17
- package/dist/types/data-structures/stack/stack.js +0 -2
- package/dist/types/data-structures/tree/index.js +0 -17
- package/dist/types/data-structures/tree/tree.js +0 -2
- package/dist/types/data-structures/trie/index.js +0 -17
- package/dist/types/data-structures/trie/trie.js +0 -2
- package/dist/types/index.js +0 -19
- package/dist/types/utils/index.js +0 -18
- package/dist/types/utils/utils.js +0 -2
- package/dist/types/utils/validate-type.js +0 -2
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.js +0 -18
- package/dist/utils/number.js +0 -23
- package/dist/utils/utils.d.ts +0 -209
- package/dist/utils/utils.js +0 -353
- package/dist/{common → types/common}/index.d.ts +0 -0
- package/dist/{constants → types/constants}/index.d.ts +0 -0
- package/dist/{data-structures → types/data-structures}/base/iterable-element-base.d.ts +0 -0
- package/dist/{data-structures → types/data-structures}/base/iterable-entry-base.d.ts +0 -0
- package/dist/{data-structures → types/data-structures}/base/linear-base.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/doubly-linked-list.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/graph.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/heap.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/index.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/navigator.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/priority-queue.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/segment-tree.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/singly-linked-list.d.ts +0 -0
- package/dist/types/{common.d.ts → types/common.d.ts} +0 -0
- package/dist/types/{data-structures → types/data-structures}/base/base.d.ts +0 -0
- package/dist/{data-structures → types/types/data-structures}/index.d.ts +7 -7
- package/dist/{data-structures → types/types/data-structures}/linked-list/index.d.ts +0 -0
- package/dist/{data-structures → types/types/data-structures}/matrix/index.d.ts +1 -1
- /package/dist/{data-structures → types/types/data-structures}/priority-queue/index.d.ts +0 -0
- /package/dist/{data-structures → types/types/data-structures}/queue/index.d.ts +0 -0
- /package/dist/{data-structures → types/types/data-structures}/stack/index.d.ts +0 -0
- /package/dist/{data-structures → types/types/data-structures}/tree/index.d.ts +0 -0
- /package/dist/{data-structures → types/types/data-structures}/trie/index.d.ts +0 -0
- /package/dist/types/{utils → types/utils}/validate-type.d.ts +0 -0
- /package/dist/{utils → types/utils}/number.d.ts +0 -0
|
@@ -1 +1,188 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* data-structure-typed
|
|
3
|
+
*
|
|
4
|
+
* @author Pablo Zeng
|
|
5
|
+
* @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
|
|
6
|
+
* @license MIT License
|
|
7
|
+
*/
|
|
8
|
+
import type { GraphOptions, VertexKey } from '../../types';
|
|
9
|
+
import { IGraph } from '../../interfaces';
|
|
10
|
+
import { AbstractEdge, AbstractGraph, AbstractVertex } from './abstract-graph';
|
|
11
|
+
export declare class UndirectedVertex<V = any> extends AbstractVertex<V> {
|
|
12
|
+
constructor(key: VertexKey, value?: V);
|
|
13
|
+
}
|
|
14
|
+
export declare class UndirectedEdge<E = number> extends AbstractEdge<E> {
|
|
15
|
+
endpoints: [VertexKey, VertexKey];
|
|
16
|
+
constructor(v1: VertexKey, v2: VertexKey, weight?: number, value?: E);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Undirected graph implementation.
|
|
20
|
+
* @template V - Vertex value type.
|
|
21
|
+
* @template E - Edge value type.
|
|
22
|
+
* @template VO - Concrete vertex class (extends AbstractVertex<V>).
|
|
23
|
+
* @template EO - Concrete edge class (extends AbstractEdge<E>).
|
|
24
|
+
* @remarks Time O(1), Space O(1)
|
|
25
|
+
* @example examples will be generated by unit test
|
|
26
|
+
*/
|
|
27
|
+
export declare class UndirectedGraph<V = any, E = any, VO extends UndirectedVertex<V> = UndirectedVertex<V>, EO extends UndirectedEdge<E> = UndirectedEdge<E>> extends AbstractGraph<V, E, VO, EO> implements IGraph<V, E, VO, EO> {
|
|
28
|
+
/**
|
|
29
|
+
* Construct an undirected graph with runtime defaults.
|
|
30
|
+
* @param options - `GraphOptions<V>` (e.g. `vertexValueInitializer`, `defaultEdgeWeight`).
|
|
31
|
+
* @remarks Time O(1), Space O(1)
|
|
32
|
+
*/
|
|
33
|
+
constructor(options?: Partial<GraphOptions<V>>);
|
|
34
|
+
protected _edgeMap: Map<VO, EO[]>;
|
|
35
|
+
get edgeMap(): Map<VO, EO[]>;
|
|
36
|
+
set edgeMap(v: Map<VO, EO[]>);
|
|
37
|
+
/**
|
|
38
|
+
* Construct an undirected graph from keys with value initializer `v => v`.
|
|
39
|
+
* @template K - Vertex key type.
|
|
40
|
+
* @param keys - Iterable of vertex keys.
|
|
41
|
+
* @returns UndirectedGraph with all keys added.
|
|
42
|
+
* @remarks Time O(V), Space O(V)
|
|
43
|
+
*/
|
|
44
|
+
static fromKeys<K extends VertexKey>(keys: Iterable<K>): UndirectedGraph<K, any, UndirectedVertex<K>, UndirectedEdge<any>>;
|
|
45
|
+
/**
|
|
46
|
+
* Construct an undirected graph from `[key, value]` entries.
|
|
47
|
+
* @template V - Vertex value type.
|
|
48
|
+
* @param entries - Iterable of `[key, value]` pairs.
|
|
49
|
+
* @returns UndirectedGraph with all vertices added.
|
|
50
|
+
* @remarks Time O(V), Space O(V)
|
|
51
|
+
*/
|
|
52
|
+
static fromEntries<V>(entries: Iterable<[VertexKey, V]>): UndirectedGraph<V, any, UndirectedVertex<V>, UndirectedEdge<any>>;
|
|
53
|
+
/**
|
|
54
|
+
* Create an undirected vertex instance. Does not insert into the graph.
|
|
55
|
+
* @param key - Vertex identifier.
|
|
56
|
+
* @param value - Optional payload.
|
|
57
|
+
* @returns Concrete vertex instance.
|
|
58
|
+
* @remarks Time O(1), Space O(1)
|
|
59
|
+
*/
|
|
60
|
+
createVertex(key: VertexKey, value?: VO['value']): VO;
|
|
61
|
+
/**
|
|
62
|
+
* Create an undirected edge instance. Does not insert into the graph.
|
|
63
|
+
* @param v1 - One endpoint key.
|
|
64
|
+
* @param v2 - The other endpoint key.
|
|
65
|
+
* @param weight - Edge weight; defaults to `defaultEdgeWeight`.
|
|
66
|
+
* @param value - Edge payload.
|
|
67
|
+
* @returns Concrete edge instance.
|
|
68
|
+
* @remarks Time O(1), Space O(1)
|
|
69
|
+
*/
|
|
70
|
+
createEdge(v1: VertexKey, v2: VertexKey, weight?: number, value?: EO['value']): EO;
|
|
71
|
+
/**
|
|
72
|
+
* Get an undirected edge between two vertices, if present.
|
|
73
|
+
* @param v1 - One vertex or key.
|
|
74
|
+
* @param v2 - The other vertex or key.
|
|
75
|
+
* @returns Edge instance or `undefined`.
|
|
76
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
77
|
+
*/
|
|
78
|
+
getEdge(v1: VO | VertexKey | undefined, v2: VO | VertexKey | undefined): EO | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* Delete a single undirected edge between two vertices.
|
|
81
|
+
* @param v1 - One vertex or key.
|
|
82
|
+
* @param v2 - The other vertex or key.
|
|
83
|
+
* @returns Removed edge or `undefined`.
|
|
84
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
85
|
+
*/
|
|
86
|
+
deleteEdgeBetween(v1: VO | VertexKey, v2: VO | VertexKey): EO | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* Delete an edge by instance or by a pair of keys.
|
|
89
|
+
* @param edgeOrOneSideVertexKey - Edge instance or one endpoint vertex/key.
|
|
90
|
+
* @param otherSideVertexKey - Required second endpoint when deleting by pair.
|
|
91
|
+
* @returns Removed edge or `undefined`.
|
|
92
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
93
|
+
*/
|
|
94
|
+
deleteEdge(edgeOrOneSideVertexKey: EO | VertexKey, otherSideVertexKey?: VertexKey): EO | undefined;
|
|
95
|
+
/**
|
|
96
|
+
* Delete a vertex and remove it from all neighbor lists.
|
|
97
|
+
* @param vertexOrKey - Vertex or key.
|
|
98
|
+
* @returns `true` if removed; otherwise `false`.
|
|
99
|
+
* @remarks Time O(deg), Space O(1)
|
|
100
|
+
*/
|
|
101
|
+
deleteVertex(vertexOrKey: VO | VertexKey): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Degree of a vertex (# of incident undirected edges).
|
|
104
|
+
* @param vertexOrKey - Vertex or key.
|
|
105
|
+
* @returns Non-negative integer.
|
|
106
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
107
|
+
*/
|
|
108
|
+
degreeOf(vertexOrKey: VertexKey | VO): number;
|
|
109
|
+
/**
|
|
110
|
+
* Incident undirected edges of a vertex.
|
|
111
|
+
* @param vertexOrKey - Vertex or key.
|
|
112
|
+
* @returns Array of incident edges.
|
|
113
|
+
* @remarks Time O(deg), Space O(deg)
|
|
114
|
+
*/
|
|
115
|
+
edgesOf(vertexOrKey: VertexKey | VO): EO[];
|
|
116
|
+
/**
|
|
117
|
+
* Unique set of undirected edges across endpoints.
|
|
118
|
+
* @returns Array of edges.
|
|
119
|
+
* @remarks Time O(E), Space O(E)
|
|
120
|
+
*/
|
|
121
|
+
edgeSet(): EO[];
|
|
122
|
+
getNeighbors(vertexOrKey: VO | VertexKey): VO[];
|
|
123
|
+
/**
|
|
124
|
+
* Resolve an edge's two endpoints to vertex instances.
|
|
125
|
+
* @param edge - Edge instance.
|
|
126
|
+
* @returns `[v1, v2]` or `undefined` if either endpoint is missing.
|
|
127
|
+
* @remarks Time O(1), Space O(1)
|
|
128
|
+
*/
|
|
129
|
+
getEndsOfEdge(edge: EO): [VO, VO] | undefined;
|
|
130
|
+
/**
|
|
131
|
+
* Whether the graph has no vertices and no edges.
|
|
132
|
+
* @remarks Time O(1), Space O(1)
|
|
133
|
+
*/
|
|
134
|
+
isEmpty(): boolean;
|
|
135
|
+
/**
|
|
136
|
+
* Remove all vertices and edges.
|
|
137
|
+
* @remarks Time O(V + E), Space O(1)
|
|
138
|
+
*/
|
|
139
|
+
clear(): void;
|
|
140
|
+
/**
|
|
141
|
+
* Deep clone as the same concrete class.
|
|
142
|
+
* @returns A new graph of the same concrete class (`this` type).
|
|
143
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
144
|
+
*/
|
|
145
|
+
clone(): this;
|
|
146
|
+
/**
|
|
147
|
+
* Tarjan-based bridge and articulation point detection.
|
|
148
|
+
* @returns `{ dfnMap, lowMap, bridges, cutVertices }`.
|
|
149
|
+
* @remarks Time O(V + E), Space O(V + E)
|
|
150
|
+
*/
|
|
151
|
+
tarjan(): {
|
|
152
|
+
dfnMap: Map<VO, number>;
|
|
153
|
+
lowMap: Map<VO, number>;
|
|
154
|
+
bridges: EO[];
|
|
155
|
+
cutVertices: VO[];
|
|
156
|
+
};
|
|
157
|
+
/**
|
|
158
|
+
* Get bridges discovered by `tarjan()`.
|
|
159
|
+
* @returns Array of edges that are bridges.
|
|
160
|
+
* @remarks Time O(B), Space O(1)
|
|
161
|
+
*/
|
|
162
|
+
getBridges(): EO[];
|
|
163
|
+
/**
|
|
164
|
+
* Get articulation points discovered by `tarjan()`.
|
|
165
|
+
* @returns Array of cut vertices.
|
|
166
|
+
* @remarks Time O(C), Space O(1)
|
|
167
|
+
*/
|
|
168
|
+
getCutVertices(): VO[];
|
|
169
|
+
/**
|
|
170
|
+
* DFN index map computed by `tarjan()`.
|
|
171
|
+
* @returns Map from vertex to DFN index.
|
|
172
|
+
* @remarks Time O(V), Space O(V)
|
|
173
|
+
*/
|
|
174
|
+
getDFNMap(): Map<VO, number>;
|
|
175
|
+
/**
|
|
176
|
+
* LOW link map computed by `tarjan()`.
|
|
177
|
+
* @returns Map from vertex to LOW value.
|
|
178
|
+
* @remarks Time O(V), Space O(V)
|
|
179
|
+
*/
|
|
180
|
+
getLowMap(): Map<VO, number>;
|
|
181
|
+
/**
|
|
182
|
+
* Internal hook to attach an undirected edge into adjacency maps.
|
|
183
|
+
* @param edge - Edge instance.
|
|
184
|
+
* @returns `true` if both endpoints exist; otherwise `false`.
|
|
185
|
+
* @remarks Time O(1) avg, Space O(1)
|
|
186
|
+
*/
|
|
187
|
+
protected _addEdge(edge: EO): boolean;
|
|
188
|
+
}
|
|
@@ -1,19 +1,345 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
/**
|
|
2
|
+
* data-structure-typed
|
|
3
|
+
*
|
|
4
|
+
* @author Pablo Zeng
|
|
5
|
+
* @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
|
|
6
|
+
* @license MIT License
|
|
7
|
+
*/
|
|
8
|
+
import type { EntryCallback, HashMapLinkedNode, HashMapOptions, HashMapStoreItem, LinkedHashMapOptions } from '../../types';
|
|
9
|
+
import { IterableEntryBase } from '../base';
|
|
10
|
+
/**
|
|
11
|
+
* Hash-based map. Supports object keys and custom hashing; offers O(1) average set/get/has.
|
|
12
|
+
* @remarks Time O(1), Space O(1)
|
|
13
|
+
* @template K
|
|
14
|
+
* @template V
|
|
15
|
+
* @template R
|
|
16
|
+
* 1. Key-Value Pair Storage: HashMap stores key-value pairs. Each key map to a value.
|
|
17
|
+
* 2. Fast Lookup: It's used when you need to quickly find, insert, or delete entries based on a key.
|
|
18
|
+
* 3. Unique Keys: Keys are unique.
|
|
19
|
+
* If you try to insert another entry with the same key, the new one will replace the old entry.
|
|
20
|
+
* 4. Unordered Collection: HashMap does not guarantee the order of entries, and the order may change over time.
|
|
21
|
+
* @example
|
|
22
|
+
* // should maintain insertion order
|
|
23
|
+
* const linkedHashMap = new LinkedHashMap<number, string>();
|
|
24
|
+
* linkedHashMap.set(1, 'A');
|
|
25
|
+
* linkedHashMap.set(2, 'B');
|
|
26
|
+
* linkedHashMap.set(3, 'C');
|
|
27
|
+
*
|
|
28
|
+
* const result = Array.from(linkedHashMap);
|
|
29
|
+
* console.log(result); // [
|
|
30
|
+
* // [1, 'A'],
|
|
31
|
+
* // [2, 'B'],
|
|
32
|
+
* // [3, 'C']
|
|
33
|
+
* // ]
|
|
34
|
+
* @example
|
|
35
|
+
* // fast lookup of values by key
|
|
36
|
+
* const hashMap = new HashMap<number, string>();
|
|
37
|
+
* hashMap.set(1, 'A');
|
|
38
|
+
* hashMap.set(2, 'B');
|
|
39
|
+
* hashMap.set(3, 'C');
|
|
40
|
+
*
|
|
41
|
+
* console.log(hashMap.get(1)); // 'A'
|
|
42
|
+
* console.log(hashMap.get(2)); // 'B'
|
|
43
|
+
* console.log(hashMap.get(3)); // 'C'
|
|
44
|
+
* console.log(hashMap.get(99)); // undefined
|
|
45
|
+
* @example
|
|
46
|
+
* // remove duplicates when adding multiple entries
|
|
47
|
+
* const hashMap = new HashMap<number, string>();
|
|
48
|
+
* hashMap.set(1, 'A');
|
|
49
|
+
* hashMap.set(2, 'B');
|
|
50
|
+
* hashMap.set(1, 'C'); // Update value for key 1
|
|
51
|
+
*
|
|
52
|
+
* console.log(hashMap.size); // 2
|
|
53
|
+
* console.log(hashMap.get(1)); // 'C'
|
|
54
|
+
* console.log(hashMap.get(2)); // 'B'
|
|
55
|
+
* @example
|
|
56
|
+
* // count occurrences of keys
|
|
57
|
+
* const data = [1, 2, 1, 3, 2, 1];
|
|
58
|
+
*
|
|
59
|
+
* const countMap = new HashMap<number, number>();
|
|
60
|
+
* for (const key of data) {
|
|
61
|
+
* countMap.set(key, (countMap.get(key) || 0) + 1);
|
|
62
|
+
* }
|
|
63
|
+
*
|
|
64
|
+
* console.log(countMap.get(1)); // 3
|
|
65
|
+
* console.log(countMap.get(2)); // 2
|
|
66
|
+
* console.log(countMap.get(3)); // 1
|
|
67
|
+
*/
|
|
68
|
+
export declare class HashMap<K = any, V = any, R = [K, V]> extends IterableEntryBase<K, V> {
|
|
69
|
+
/**
|
|
70
|
+
* Create a HashMap and optionally bulk-insert entries.
|
|
71
|
+
* @remarks Time O(N), Space O(N)
|
|
72
|
+
* @param [entryOrRawElements] - Iterable of entries or raw elements to insert.
|
|
73
|
+
* @param [options] - Options: hash function and optional record-to-entry converter.
|
|
74
|
+
* @returns New HashMap instance.
|
|
75
|
+
*/
|
|
76
|
+
constructor(entryOrRawElements?: Iterable<R | [K, V]>, options?: HashMapOptions<K, V, R>);
|
|
77
|
+
protected _store: {
|
|
78
|
+
[key: string]: HashMapStoreItem<K, V>;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Get the internal store for non-object keys.
|
|
82
|
+
* @remarks Time O(1), Space O(1)
|
|
83
|
+
* @returns Internal record of string→{key,value}.
|
|
84
|
+
*/
|
|
85
|
+
get store(): {
|
|
86
|
+
[p: string]: HashMapStoreItem<K, V>;
|
|
87
|
+
};
|
|
88
|
+
protected _objMap: Map<object, V>;
|
|
89
|
+
/**
|
|
90
|
+
* Get the internal Map used for object/function keys.
|
|
91
|
+
* @remarks Time O(1), Space O(1)
|
|
92
|
+
* @returns Map of object→value.
|
|
93
|
+
*/
|
|
94
|
+
get objMap(): Map<object, V>;
|
|
95
|
+
protected _toEntryFn?: (rawElement: R) => [K, V];
|
|
96
|
+
/**
|
|
97
|
+
* Get the raw→entry converter function if present.
|
|
98
|
+
* @remarks Time O(1), Space O(1)
|
|
99
|
+
* @returns Converter function or undefined.
|
|
100
|
+
*/
|
|
101
|
+
get toEntryFn(): ((rawElement: R) => [K, V]) | undefined;
|
|
102
|
+
protected _size: number;
|
|
103
|
+
/**
|
|
104
|
+
* Get the number of distinct keys stored.
|
|
105
|
+
* @remarks Time O(1), Space O(1)
|
|
106
|
+
* @returns Current size.
|
|
107
|
+
*/
|
|
108
|
+
get size(): number;
|
|
109
|
+
protected _hashFn: (key: K) => string;
|
|
110
|
+
/**
|
|
111
|
+
* Get the current hash function for non-object keys.
|
|
112
|
+
* @remarks Time O(1), Space O(1)
|
|
113
|
+
* @returns Hash function.
|
|
114
|
+
*/
|
|
115
|
+
get hashFn(): (key: K) => string;
|
|
116
|
+
/**
|
|
117
|
+
* Check whether the map is empty.
|
|
118
|
+
* @remarks Time O(1), Space O(1)
|
|
119
|
+
* @returns True if size is 0.
|
|
120
|
+
*/
|
|
121
|
+
isEmpty(): boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Remove all entries and reset counters.
|
|
124
|
+
* @remarks Time O(N), Space O(1)
|
|
125
|
+
* @returns void
|
|
126
|
+
*/
|
|
127
|
+
clear(): void;
|
|
128
|
+
/**
|
|
129
|
+
* Type guard: check if a raw value is a [key, value] entry.
|
|
130
|
+
* @remarks Time O(1), Space O(1)
|
|
131
|
+
* @returns True if the value is a 2-tuple.
|
|
132
|
+
*/
|
|
133
|
+
isEntry(rawElement: any): rawElement is [K, V];
|
|
134
|
+
/**
|
|
135
|
+
* Insert or replace a single entry.
|
|
136
|
+
* @remarks Time O(1), Space O(1)
|
|
137
|
+
* @param key - Key.
|
|
138
|
+
* @param value - Value.
|
|
139
|
+
* @returns True when the operation succeeds.
|
|
140
|
+
*/
|
|
141
|
+
set(key: K, value: V): boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Insert many entries from an iterable.
|
|
144
|
+
* @remarks Time O(N), Space O(N)
|
|
145
|
+
* @param entryOrRawElements - Iterable of entries or raw elements to insert.
|
|
146
|
+
* @returns Array of per-entry results.
|
|
147
|
+
*/
|
|
148
|
+
setMany(entryOrRawElements: Iterable<R | [K, V]>): boolean[];
|
|
149
|
+
/**
|
|
150
|
+
* Get the value for a key.
|
|
151
|
+
* @remarks Time O(1), Space O(1)
|
|
152
|
+
* @param key - Key to look up.
|
|
153
|
+
* @returns Value or undefined.
|
|
154
|
+
*/
|
|
155
|
+
get(key: K): V | undefined;
|
|
156
|
+
/**
|
|
157
|
+
* Check if a key exists.
|
|
158
|
+
* @remarks Time O(1), Space O(1)
|
|
159
|
+
* @param key - Key to test.
|
|
160
|
+
* @returns True if present.
|
|
161
|
+
*/
|
|
162
|
+
has(key: K): boolean;
|
|
163
|
+
/**
|
|
164
|
+
* Delete an entry by key.
|
|
165
|
+
* @remarks Time O(1), Space O(1)
|
|
166
|
+
* @param key - Key to delete.
|
|
167
|
+
* @returns True if the key was found and removed.
|
|
168
|
+
*/
|
|
169
|
+
delete(key: K): boolean;
|
|
170
|
+
/**
|
|
171
|
+
* Replace the hash function and rehash the non-object store.
|
|
172
|
+
* @remarks Time O(N), Space O(N)
|
|
173
|
+
* @param fn - New hash function for non-object keys.
|
|
174
|
+
* @returns This map instance.
|
|
175
|
+
*/
|
|
176
|
+
setHashFn(fn: (key: K) => string): this;
|
|
177
|
+
/**
|
|
178
|
+
* Deep clone this map, preserving hashing behavior.
|
|
179
|
+
* @remarks Time O(N), Space O(N)
|
|
180
|
+
* @returns A new map with the same content.
|
|
181
|
+
*/
|
|
182
|
+
clone(): this;
|
|
183
|
+
/**
|
|
184
|
+
* Map values to a new map with the same keys.
|
|
185
|
+
* @remarks Time O(N), Space O(N)
|
|
186
|
+
* @template VM
|
|
187
|
+
* @param callbackfn - Mapping function (key, value, index, map) → newValue.
|
|
188
|
+
* @param [thisArg] - Value for `this` inside the callback.
|
|
189
|
+
* @returns A new map with transformed values.
|
|
190
|
+
*/
|
|
191
|
+
map<VM>(callbackfn: EntryCallback<K, V, VM>, thisArg?: any): any;
|
|
192
|
+
/**
|
|
193
|
+
* Filter entries into a new map.
|
|
194
|
+
* @remarks Time O(N), Space O(N)
|
|
195
|
+
* @param predicate - Predicate (key, value, index, map) → boolean.
|
|
196
|
+
* @param [thisArg] - Value for `this` inside the predicate.
|
|
197
|
+
* @returns A new map containing entries that satisfied the predicate.
|
|
198
|
+
*/
|
|
199
|
+
filter(predicate: EntryCallback<K, V, boolean>, thisArg?: any): any;
|
|
200
|
+
/**
|
|
201
|
+
* (Protected) Create a like-kind instance and seed it from an iterable.
|
|
202
|
+
* @remarks Time O(N), Space O(N)
|
|
203
|
+
* @template TK
|
|
204
|
+
* @template TV
|
|
205
|
+
* @template TR
|
|
206
|
+
* @param [entries] - Iterable used to seed the new map.
|
|
207
|
+
* @param [options] - Options forwarded to the constructor.
|
|
208
|
+
* @returns A like-kind map instance.
|
|
209
|
+
*/
|
|
210
|
+
protected _createLike<TK = K, TV = V, TR = [TK, TV]>(entries?: Iterable<[TK, TV] | TR>, options?: any): any;
|
|
211
|
+
protected _rehashNoObj(): void;
|
|
212
|
+
protected _getIterator(): IterableIterator<[K, V]>;
|
|
213
|
+
protected _isObjKey(key: any): key is object | ((...args: any[]) => any);
|
|
214
|
+
protected _getNoObjKey(key: K): string;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Hash-based map that preserves insertion order via a doubly-linked list.
|
|
218
|
+
* @remarks Time O(1), Space O(1)
|
|
219
|
+
* @template K
|
|
220
|
+
* @template V
|
|
221
|
+
* @template R
|
|
222
|
+
* @example examples will be generated by unit test
|
|
223
|
+
*/
|
|
224
|
+
export declare class LinkedHashMap<K = any, V = any, R = [K, V]> extends IterableEntryBase<K, V> {
|
|
225
|
+
protected readonly _sentinel: HashMapLinkedNode<K, V | undefined>;
|
|
226
|
+
/**
|
|
227
|
+
* Create a LinkedHashMap and optionally bulk-insert entries.
|
|
228
|
+
* @remarks Time O(N), Space O(N)
|
|
229
|
+
* @param [entryOrRawElements] - Iterable of entries or raw elements to insert.
|
|
230
|
+
* @param [options] - Options: hash functions and optional record-to-entry converter.
|
|
231
|
+
* @returns New LinkedHashMap instance.
|
|
232
|
+
*/
|
|
233
|
+
constructor(entryOrRawElements?: Iterable<R | [K, V]>, options?: LinkedHashMapOptions<K, V, R>);
|
|
234
|
+
protected _hashFn: (key: K) => string;
|
|
235
|
+
get hashFn(): (key: K) => string;
|
|
236
|
+
protected _objHashFn: (key: K) => object;
|
|
237
|
+
/**
|
|
238
|
+
* Get the hash function for object/weak keys.
|
|
239
|
+
* @remarks Time O(1), Space O(1)
|
|
240
|
+
* @returns Object-hash function.
|
|
241
|
+
*/
|
|
242
|
+
get objHashFn(): (key: K) => object;
|
|
243
|
+
protected _noObjMap: Record<string, HashMapLinkedNode<K, V | undefined>>;
|
|
244
|
+
/**
|
|
245
|
+
* Get the internal record for non-object keys.
|
|
246
|
+
* @remarks Time O(1), Space O(1)
|
|
247
|
+
* @returns Record of hash→node.
|
|
248
|
+
*/
|
|
249
|
+
get noObjMap(): Record<string, HashMapLinkedNode<K, V | undefined>>;
|
|
250
|
+
protected _objMap: WeakMap<object, HashMapLinkedNode<K, V | undefined>>;
|
|
251
|
+
get objMap(): WeakMap<object, HashMapLinkedNode<K, V | undefined>>;
|
|
252
|
+
protected _head: HashMapLinkedNode<K, V | undefined>;
|
|
253
|
+
/**
|
|
254
|
+
* Get the head node (first entry) sentinel link.
|
|
255
|
+
* @remarks Time O(1), Space O(1)
|
|
256
|
+
* @returns Head node or sentinel.
|
|
257
|
+
*/
|
|
258
|
+
get head(): HashMapLinkedNode<K, V | undefined>;
|
|
259
|
+
protected _tail: HashMapLinkedNode<K, V | undefined>;
|
|
260
|
+
/**
|
|
261
|
+
* Get the tail node (last entry) sentinel link.
|
|
262
|
+
* @remarks Time O(1), Space O(1)
|
|
263
|
+
* @returns Tail node or sentinel.
|
|
264
|
+
*/
|
|
265
|
+
get tail(): HashMapLinkedNode<K, V | undefined>;
|
|
266
|
+
protected _toEntryFn?: (rawElement: R) => [K, V];
|
|
267
|
+
get toEntryFn(): ((rawElement: R) => [K, V]) | undefined;
|
|
268
|
+
protected _size: number;
|
|
269
|
+
get size(): number;
|
|
270
|
+
/**
|
|
271
|
+
* Get the first [key, value] pair.
|
|
272
|
+
* @remarks Time O(1), Space O(1)
|
|
273
|
+
* @returns First entry or undefined when empty.
|
|
274
|
+
*/
|
|
275
|
+
get first(): [K, V] | undefined;
|
|
276
|
+
/**
|
|
277
|
+
* Get the last [key, value] pair.
|
|
278
|
+
* @remarks Time O(1), Space O(1)
|
|
279
|
+
* @returns Last entry or undefined when empty.
|
|
280
|
+
*/
|
|
281
|
+
get last(): [K, V] | undefined;
|
|
282
|
+
/**
|
|
283
|
+
* Iterate from head → tail.
|
|
284
|
+
* @remarks Time O(N), Space O(1)
|
|
285
|
+
* @returns Iterator of [key, value].
|
|
286
|
+
*/
|
|
287
|
+
begin(): Generator<(K | V | undefined)[], void, unknown>;
|
|
288
|
+
/**
|
|
289
|
+
* Iterate from tail → head.
|
|
290
|
+
* @remarks Time O(N), Space O(1)
|
|
291
|
+
* @returns Iterator of [key, value].
|
|
292
|
+
*/
|
|
293
|
+
reverseBegin(): Generator<(K | V | undefined)[], void, unknown>;
|
|
294
|
+
/**
|
|
295
|
+
* Insert or replace a single entry; preserves insertion order.
|
|
296
|
+
* @remarks Time O(1), Space O(1)
|
|
297
|
+
* @param key - Key.
|
|
298
|
+
* @param [value] - Value.
|
|
299
|
+
* @returns True when the operation succeeds.
|
|
300
|
+
*/
|
|
301
|
+
set(key: K, value?: V): boolean;
|
|
302
|
+
setMany(entryOrRawElements: Iterable<R | [K, V]>): boolean[];
|
|
303
|
+
has(key: K): boolean;
|
|
304
|
+
get(key: K): V | undefined;
|
|
305
|
+
/**
|
|
306
|
+
* Get the value at a given index in insertion order.
|
|
307
|
+
* @remarks Time O(N), Space O(1)
|
|
308
|
+
* @param index - Zero-based index.
|
|
309
|
+
* @returns Value at the index.
|
|
310
|
+
*/
|
|
311
|
+
at(index: number): V | undefined;
|
|
312
|
+
delete(key: K): boolean;
|
|
313
|
+
/**
|
|
314
|
+
* Delete the first entry that matches a predicate.
|
|
315
|
+
* @remarks Time O(N), Space O(1)
|
|
316
|
+
* @param predicate - Function (key, value, index, map) → boolean to decide deletion.
|
|
317
|
+
* @returns True if an entry was removed.
|
|
318
|
+
*/
|
|
319
|
+
deleteWhere(predicate: (key: K, value: V | undefined, index: number, map: this) => boolean): boolean;
|
|
320
|
+
/**
|
|
321
|
+
* Delete the entry at a given index.
|
|
322
|
+
* @remarks Time O(N), Space O(1)
|
|
323
|
+
* @param index - Zero-based index.
|
|
324
|
+
* @returns True if removed.
|
|
325
|
+
*/
|
|
326
|
+
deleteAt(index: number): boolean;
|
|
327
|
+
isEmpty(): boolean;
|
|
328
|
+
isEntry(rawElement: any): rawElement is [K, V];
|
|
329
|
+
clear(): void;
|
|
330
|
+
clone(): any;
|
|
331
|
+
filter(predicate: EntryCallback<K, V, boolean>, thisArg?: any): any;
|
|
332
|
+
/**
|
|
333
|
+
* Map each entry to a new [key, value] pair and preserve order.
|
|
334
|
+
* @remarks Time O(N), Space O(N)
|
|
335
|
+
* @template MK
|
|
336
|
+
* @template MV
|
|
337
|
+
* @param callback - Mapping function (key, value, index, map) → [newKey, newValue].
|
|
338
|
+
* @param [thisArg] - Value for `this` inside the callback.
|
|
339
|
+
* @returns A new map of the same class with transformed entries.
|
|
340
|
+
*/
|
|
341
|
+
map<MK, MV>(callback: EntryCallback<K, V, [MK, MV]>, thisArg?: any): any;
|
|
342
|
+
protected _getIterator(): IterableIterator<[K, V]>;
|
|
343
|
+
protected _deleteNode(node: HashMapLinkedNode<K, V | undefined>): boolean;
|
|
344
|
+
protected _createLike<TK = K, TV = V, TR = [TK, TV]>(entries?: Iterable<[TK, TV] | TR>, options?: any): any;
|
|
345
|
+
}
|