bst-typed 1.48.4 → 1.48.6
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/data-structures/base/iterable-base.d.ts +6 -6
- package/dist/data-structures/base/iterable-base.js +3 -3
- package/dist/data-structures/binary-tree/avl-tree.d.ts +5 -3
- package/dist/data-structures/binary-tree/avl-tree.js +6 -4
- package/dist/data-structures/binary-tree/binary-tree.d.ts +24 -22
- package/dist/data-structures/binary-tree/binary-tree.js +35 -22
- package/dist/data-structures/binary-tree/bst.d.ts +30 -22
- package/dist/data-structures/binary-tree/bst.js +38 -26
- package/dist/data-structures/binary-tree/rb-tree.d.ts +19 -13
- package/dist/data-structures/binary-tree/rb-tree.js +20 -14
- package/dist/data-structures/binary-tree/tree-multimap.d.ts +21 -14
- package/dist/data-structures/binary-tree/tree-multimap.js +25 -18
- package/dist/data-structures/graph/abstract-graph.d.ts +52 -52
- package/dist/data-structures/graph/abstract-graph.js +78 -78
- package/dist/data-structures/graph/directed-graph.d.ts +47 -47
- package/dist/data-structures/graph/directed-graph.js +56 -56
- package/dist/data-structures/graph/map-graph.d.ts +5 -5
- package/dist/data-structures/graph/map-graph.js +8 -8
- package/dist/data-structures/graph/undirected-graph.d.ts +29 -29
- package/dist/data-structures/graph/undirected-graph.js +57 -57
- package/dist/data-structures/hash/hash-map.d.ts +8 -8
- package/dist/data-structures/hash/hash-map.js +2 -2
- package/dist/interfaces/binary-tree.d.ts +2 -2
- package/dist/types/data-structures/base/base.d.ts +3 -3
- package/package.json +2 -2
- package/src/data-structures/base/iterable-base.ts +6 -6
- package/src/data-structures/binary-tree/avl-tree.ts +7 -4
- package/src/data-structures/binary-tree/binary-tree.ts +47 -27
- package/src/data-structures/binary-tree/bst.ts +52 -32
- package/src/data-structures/binary-tree/rb-tree.ts +20 -14
- package/src/data-structures/binary-tree/tree-multimap.ts +26 -18
- package/src/data-structures/graph/abstract-graph.ts +82 -82
- package/src/data-structures/graph/directed-graph.ts +56 -56
- package/src/data-structures/graph/map-graph.ts +8 -8
- package/src/data-structures/graph/undirected-graph.ts +59 -59
- package/src/data-structures/hash/hash-map.ts +8 -8
- package/src/interfaces/binary-tree.ts +2 -2
- package/src/types/data-structures/base/base.ts +3 -3
|
@@ -24,7 +24,7 @@ export class UndirectedVertex<V = any> extends AbstractVertex<V> {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export class UndirectedEdge<E = number> extends AbstractEdge<E> {
|
|
27
|
-
|
|
27
|
+
vertexMap: [VertexKey, VertexKey];
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* The constructor function creates an instance of a class with two vertex IDs, an optional weight, and an optional
|
|
@@ -38,7 +38,7 @@ export class UndirectedEdge<E = number> extends AbstractEdge<E> {
|
|
|
38
38
|
*/
|
|
39
39
|
constructor(v1: VertexKey, v2: VertexKey, weight?: number, value?: E) {
|
|
40
40
|
super(weight, value);
|
|
41
|
-
this.
|
|
41
|
+
this.vertexMap = [v1, v2];
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -51,17 +51,17 @@ export class UndirectedGraph<
|
|
|
51
51
|
extends AbstractGraph<V, E, VO, EO>
|
|
52
52
|
implements IGraph<V, E, VO, EO> {
|
|
53
53
|
/**
|
|
54
|
-
* The constructor initializes a new Map object to store
|
|
54
|
+
* The constructor initializes a new Map object to store edgeMap.
|
|
55
55
|
*/
|
|
56
56
|
constructor() {
|
|
57
57
|
super();
|
|
58
|
-
this.
|
|
58
|
+
this._edgeMap = new Map<VO, EO[]>();
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
protected
|
|
61
|
+
protected _edgeMap: Map<VO, EO[]>;
|
|
62
62
|
|
|
63
|
-
get
|
|
64
|
-
return this.
|
|
63
|
+
get edgeMap(): Map<VO, EO[]> {
|
|
64
|
+
return this._edgeMap;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
/**
|
|
@@ -78,7 +78,7 @@ export class UndirectedGraph<
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
|
-
* The function creates an undirected edge between two
|
|
81
|
+
* The function creates an undirected edge between two vertexMap with an optional weight and value.
|
|
82
82
|
* @param {VertexKey} v1 - The parameter `v1` represents the first vertex of the edge.
|
|
83
83
|
* @param {VertexKey} v2 - The parameter `v2` represents the second vertex of the edge.
|
|
84
84
|
* @param {number} [weight] - The `weight` parameter is an optional number that represents the weight of the edge. If
|
|
@@ -92,15 +92,15 @@ export class UndirectedGraph<
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* Time Complexity: O(|E|), where |E| is the number of
|
|
95
|
+
* Time Complexity: O(|E|), where |E| is the number of edgeMap incident to the given vertex.
|
|
96
96
|
* Space Complexity: O(1)
|
|
97
97
|
*/
|
|
98
98
|
|
|
99
99
|
/**
|
|
100
|
-
* Time Complexity: O(|E|), where |E| is the number of
|
|
100
|
+
* Time Complexity: O(|E|), where |E| is the number of edgeMap incident to the given vertex.
|
|
101
101
|
* Space Complexity: O(1)
|
|
102
102
|
*
|
|
103
|
-
* The function `getEdge` returns the first edge that connects two
|
|
103
|
+
* The function `getEdge` returns the first edge that connects two vertexMap, or undefined if no such edge exists.
|
|
104
104
|
* @param {VO | VertexKey | undefined} v1 - The parameter `v1` represents a vertex or vertex ID. It can be of type `VO` (vertex
|
|
105
105
|
* object), `undefined`, or `VertexKey` (a string or number representing the ID of a vertex).
|
|
106
106
|
* @param {VO | VertexKey | undefined} v2 - The parameter `v2` represents a vertex or vertex ID. It can be of type `VO` (vertex
|
|
@@ -108,34 +108,34 @@ export class UndirectedGraph<
|
|
|
108
108
|
* @returns an edge (EO) or undefined.
|
|
109
109
|
*/
|
|
110
110
|
getEdge(v1: VO | VertexKey | undefined, v2: VO | VertexKey | undefined): EO | undefined {
|
|
111
|
-
let
|
|
111
|
+
let edgeMap: EO[] | undefined = [];
|
|
112
112
|
|
|
113
113
|
if (v1 !== undefined && v2 !== undefined) {
|
|
114
114
|
const vertex1: VO | undefined = this._getVertex(v1);
|
|
115
115
|
const vertex2: VO | undefined = this._getVertex(v2);
|
|
116
116
|
|
|
117
117
|
if (vertex1 && vertex2) {
|
|
118
|
-
|
|
118
|
+
edgeMap = this._edgeMap.get(vertex1)?.filter(e => e.vertexMap.includes(vertex2.key));
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
return
|
|
122
|
+
return edgeMap ? edgeMap[0] || undefined : undefined;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
/**
|
|
126
|
-
* Time Complexity: O(|E|), where |E| is the number of
|
|
126
|
+
* Time Complexity: O(|E|), where |E| is the number of edgeMap incident to the given vertex.
|
|
127
127
|
* Space Complexity: O(1)
|
|
128
128
|
*/
|
|
129
129
|
|
|
130
130
|
/**
|
|
131
|
-
* Time Complexity: O(|E|), where |E| is the number of
|
|
131
|
+
* Time Complexity: O(|E|), where |E| is the number of edgeMap incident to the given vertex.
|
|
132
132
|
* Space Complexity: O(1)
|
|
133
133
|
*
|
|
134
|
-
* The function removes an edge between two
|
|
134
|
+
* The function removes an edge between two vertexMap in a graph and returns the removed edge.
|
|
135
135
|
* @param {VO | VertexKey} v1 - The parameter `v1` represents either a vertex object (`VO`) or a vertex ID (`VertexKey`).
|
|
136
136
|
* @param {VO | VertexKey} v2 - VO | VertexKey - This parameter can be either a vertex object (VO) or a vertex ID
|
|
137
137
|
* (VertexKey). It represents the second vertex of the edge that needs to be removed.
|
|
138
|
-
* @returns the removed edge (EO) if it exists, or undefined if either of the
|
|
138
|
+
* @returns the removed edge (EO) if it exists, or undefined if either of the vertexMap (VO) does not exist.
|
|
139
139
|
*/
|
|
140
140
|
deleteEdgeBetween(v1: VO | VertexKey, v2: VO | VertexKey): EO | undefined {
|
|
141
141
|
const vertex1: VO | undefined = this._getVertex(v1);
|
|
@@ -145,29 +145,29 @@ export class UndirectedGraph<
|
|
|
145
145
|
return undefined;
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
const v1Edges = this.
|
|
148
|
+
const v1Edges = this._edgeMap.get(vertex1);
|
|
149
149
|
let removed: EO | undefined = undefined;
|
|
150
150
|
if (v1Edges) {
|
|
151
|
-
removed = arrayRemove<EO>(v1Edges, (e: EO) => e.
|
|
151
|
+
removed = arrayRemove<EO>(v1Edges, (e: EO) => e.vertexMap.includes(vertex2.key))[0] || undefined;
|
|
152
152
|
}
|
|
153
|
-
const v2Edges = this.
|
|
153
|
+
const v2Edges = this._edgeMap.get(vertex2);
|
|
154
154
|
if (v2Edges) {
|
|
155
|
-
arrayRemove<EO>(v2Edges, (e: EO) => e.
|
|
155
|
+
arrayRemove<EO>(v2Edges, (e: EO) => e.vertexMap.includes(vertex1.key));
|
|
156
156
|
}
|
|
157
157
|
return removed;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
/**
|
|
161
|
-
* Time Complexity: O(E), where E is the number of
|
|
161
|
+
* Time Complexity: O(E), where E is the number of edgeMap incident to the given vertex.
|
|
162
162
|
* Space Complexity: O(1)
|
|
163
163
|
*/
|
|
164
164
|
|
|
165
165
|
|
|
166
166
|
/**
|
|
167
|
-
* Time Complexity: O(E), where E is the number of
|
|
167
|
+
* Time Complexity: O(E), where E is the number of edgeMap incident to the given vertex.
|
|
168
168
|
* Space Complexity: O(1)
|
|
169
169
|
*
|
|
170
|
-
* The function `deleteEdge` deletes an edge between two
|
|
170
|
+
* The function `deleteEdge` deletes an edge between two vertexMap in a graph.
|
|
171
171
|
* @param {EO | VertexKey} edgeOrOneSideVertexKey - The parameter `edgeOrOneSideVertexKey` can be
|
|
172
172
|
* either an edge object or a vertex key.
|
|
173
173
|
* @param {VertexKey} [otherSideVertexKey] - The parameter `otherSideVertexKey` is an optional
|
|
@@ -186,8 +186,8 @@ export class UndirectedGraph<
|
|
|
186
186
|
return;
|
|
187
187
|
}
|
|
188
188
|
} else {
|
|
189
|
-
oneSide = this._getVertex(edgeOrOneSideVertexKey.
|
|
190
|
-
otherSide = this._getVertex(edgeOrOneSideVertexKey.
|
|
189
|
+
oneSide = this._getVertex(edgeOrOneSideVertexKey.vertexMap[0]);
|
|
190
|
+
otherSide = this._getVertex(edgeOrOneSideVertexKey.vertexMap[1]);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
if (oneSide && otherSide) {
|
|
@@ -227,19 +227,19 @@ export class UndirectedGraph<
|
|
|
227
227
|
|
|
228
228
|
if (vertex) {
|
|
229
229
|
neighbors.forEach(neighbor => {
|
|
230
|
-
const neighborEdges = this.
|
|
230
|
+
const neighborEdges = this._edgeMap.get(neighbor);
|
|
231
231
|
if (neighborEdges) {
|
|
232
232
|
const restEdges = neighborEdges.filter(edge => {
|
|
233
|
-
return !edge.
|
|
233
|
+
return !edge.vertexMap.includes(vertexKey);
|
|
234
234
|
});
|
|
235
|
-
this.
|
|
235
|
+
this._edgeMap.set(neighbor, restEdges);
|
|
236
236
|
}
|
|
237
237
|
})
|
|
238
|
-
this.
|
|
238
|
+
this._edgeMap.delete(vertex);
|
|
239
239
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
return this.
|
|
242
|
+
return this._vertexMap.delete(vertexKey);
|
|
243
243
|
}
|
|
244
244
|
|
|
245
245
|
/**
|
|
@@ -251,16 +251,16 @@ export class UndirectedGraph<
|
|
|
251
251
|
* Time Complexity: O(1)
|
|
252
252
|
* Space Complexity: O(1)
|
|
253
253
|
*
|
|
254
|
-
* The function `degreeOf` returns the degree of a vertex in a graph, which is the number of
|
|
254
|
+
* The function `degreeOf` returns the degree of a vertex in a graph, which is the number of edgeMap connected to that
|
|
255
255
|
* vertex.
|
|
256
256
|
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`.
|
|
257
257
|
* @returns The function `degreeOf` returns the degree of a vertex in a graph. The degree of a vertex is the number of
|
|
258
|
-
*
|
|
258
|
+
* edgeMap connected to that vertex.
|
|
259
259
|
*/
|
|
260
260
|
degreeOf(vertexOrKey: VertexKey | VO): number {
|
|
261
261
|
const vertex = this._getVertex(vertexOrKey);
|
|
262
262
|
if (vertex) {
|
|
263
|
-
return this.
|
|
263
|
+
return this._edgeMap.get(vertex)?.length || 0;
|
|
264
264
|
} else {
|
|
265
265
|
return 0;
|
|
266
266
|
}
|
|
@@ -275,36 +275,36 @@ export class UndirectedGraph<
|
|
|
275
275
|
* Time Complexity: O(1)
|
|
276
276
|
* Space Complexity: O(1)
|
|
277
277
|
*
|
|
278
|
-
* The function returns the
|
|
278
|
+
* The function returns the edgeMap of a given vertex or vertex ID.
|
|
279
279
|
* @param {VertexKey | VO} vertexOrKey - The parameter `vertexOrKey` can be either a `VertexKey` or a `VO`. A `VertexKey` is a
|
|
280
280
|
* unique identifier for a vertex in a graph, while `VO` represents the type of the vertex.
|
|
281
|
-
* @returns an array of
|
|
281
|
+
* @returns an array of edgeMap.
|
|
282
282
|
*/
|
|
283
283
|
edgesOf(vertexOrKey: VertexKey | VO): EO[] {
|
|
284
284
|
const vertex = this._getVertex(vertexOrKey);
|
|
285
285
|
if (vertex) {
|
|
286
|
-
return this.
|
|
286
|
+
return this._edgeMap.get(vertex) || [];
|
|
287
287
|
} else {
|
|
288
288
|
return [];
|
|
289
289
|
}
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
/**
|
|
293
|
-
* Time Complexity: O(|V| + |E|), where |V| is the number of
|
|
293
|
+
* Time Complexity: O(|V| + |E|), where |V| is the number of vertexMap and |E| is the number of edgeMap.
|
|
294
294
|
* Space Complexity: O(|E|)
|
|
295
295
|
*/
|
|
296
296
|
|
|
297
297
|
/**
|
|
298
|
-
* Time Complexity: O(|V| + |E|), where |V| is the number of
|
|
298
|
+
* Time Complexity: O(|V| + |E|), where |V| is the number of vertexMap and |E| is the number of edgeMap.
|
|
299
299
|
* Space Complexity: O(|E|)
|
|
300
300
|
*
|
|
301
|
-
* The function "edgeSet" returns an array of unique
|
|
301
|
+
* The function "edgeSet" returns an array of unique edgeMap from a set of edgeMap.
|
|
302
302
|
* @returns The method `edgeSet()` returns an array of type `EO[]`.
|
|
303
303
|
*/
|
|
304
304
|
edgeSet(): EO[] {
|
|
305
305
|
const edgeSet: Set<EO> = new Set();
|
|
306
|
-
this.
|
|
307
|
-
|
|
306
|
+
this._edgeMap.forEach(edgeMap => {
|
|
307
|
+
edgeMap.forEach(edge => {
|
|
308
308
|
edgeSet.add(edge);
|
|
309
309
|
});
|
|
310
310
|
});
|
|
@@ -312,18 +312,18 @@ export class UndirectedGraph<
|
|
|
312
312
|
}
|
|
313
313
|
|
|
314
314
|
/**
|
|
315
|
-
* Time Complexity: O(|V| + |E|), where |V| is the number of
|
|
315
|
+
* Time Complexity: O(|V| + |E|), where |V| is the number of vertexMap and |E| is the number of edgeMap.
|
|
316
316
|
* Space Complexity: O(|E|)
|
|
317
317
|
*/
|
|
318
318
|
|
|
319
319
|
/**
|
|
320
|
-
* Time Complexity: O(|V| + |E|), where |V| is the number of
|
|
320
|
+
* Time Complexity: O(|V| + |E|), where |V| is the number of vertexMap and |E| is the number of edgeMap.
|
|
321
321
|
* Space Complexity: O(|E|)
|
|
322
322
|
*
|
|
323
|
-
* The function "getNeighbors" returns an array of neighboring
|
|
323
|
+
* The function "getNeighbors" returns an array of neighboring vertexMap for a given vertex or vertex ID.
|
|
324
324
|
* @param {VO | VertexKey} vertexOrKey - The parameter `vertexOrKey` can be either a vertex object (`VO`) or a vertex ID
|
|
325
325
|
* (`VertexKey`).
|
|
326
|
-
* @returns an array of
|
|
326
|
+
* @returns an array of vertexMap (VO[]).
|
|
327
327
|
*/
|
|
328
328
|
getNeighbors(vertexOrKey: VO | VertexKey): VO[] {
|
|
329
329
|
const neighbors: VO[] = [];
|
|
@@ -331,7 +331,7 @@ export class UndirectedGraph<
|
|
|
331
331
|
if (vertex) {
|
|
332
332
|
const neighborEdges = this.edgesOf(vertex);
|
|
333
333
|
for (const edge of neighborEdges) {
|
|
334
|
-
const neighbor = this._getVertex(edge.
|
|
334
|
+
const neighbor = this._getVertex(edge.vertexMap.filter(e => e !== vertex.key)[0]);
|
|
335
335
|
if (neighbor) {
|
|
336
336
|
neighbors.push(neighbor);
|
|
337
337
|
}
|
|
@@ -349,18 +349,18 @@ export class UndirectedGraph<
|
|
|
349
349
|
* Time Complexity: O(1)
|
|
350
350
|
* Space Complexity: O(1)
|
|
351
351
|
*
|
|
352
|
-
* The function "getEndsOfEdge" returns the
|
|
352
|
+
* The function "getEndsOfEdge" returns the vertexMap at the ends of an edge if the edge exists in the graph, otherwise
|
|
353
353
|
* it returns undefined.
|
|
354
354
|
* @param {EO} edge - The parameter "edge" is of type EO, which represents an edge in a graph.
|
|
355
|
-
* @returns The function `getEndsOfEdge` returns an array containing two
|
|
355
|
+
* @returns The function `getEndsOfEdge` returns an array containing two vertexMap `[VO, VO]` if the edge exists in the
|
|
356
356
|
* graph. If the edge does not exist, it returns `undefined`.
|
|
357
357
|
*/
|
|
358
358
|
getEndsOfEdge(edge: EO): [VO, VO] | undefined {
|
|
359
|
-
if (!this.hasEdge(edge.
|
|
359
|
+
if (!this.hasEdge(edge.vertexMap[0], edge.vertexMap[1])) {
|
|
360
360
|
return undefined;
|
|
361
361
|
}
|
|
362
|
-
const v1 = this._getVertex(edge.
|
|
363
|
-
const v2 = this._getVertex(edge.
|
|
362
|
+
const v1 = this._getVertex(edge.vertexMap[0]);
|
|
363
|
+
const v2 = this._getVertex(edge.vertexMap[1]);
|
|
364
364
|
if (v1 && v2) {
|
|
365
365
|
return [v1, v2];
|
|
366
366
|
} else {
|
|
@@ -377,20 +377,20 @@ export class UndirectedGraph<
|
|
|
377
377
|
* Time Complexity: O(1)
|
|
378
378
|
* Space Complexity: O(1)
|
|
379
379
|
*
|
|
380
|
-
* The function adds an edge to the graph by updating the adjacency list with the
|
|
380
|
+
* The function adds an edge to the graph by updating the adjacency list with the vertexMap of the edge.
|
|
381
381
|
* @param {EO} edge - The parameter "edge" is of type EO, which represents an edge in a graph.
|
|
382
382
|
* @returns a boolean value.
|
|
383
383
|
*/
|
|
384
384
|
protected _addEdgeOnly(edge: EO): boolean {
|
|
385
|
-
for (const end of edge.
|
|
385
|
+
for (const end of edge.vertexMap) {
|
|
386
386
|
const endVertex = this._getVertex(end);
|
|
387
387
|
if (endVertex === undefined) return false;
|
|
388
388
|
if (endVertex) {
|
|
389
|
-
const
|
|
390
|
-
if (
|
|
391
|
-
|
|
389
|
+
const edgeMap = this._edgeMap.get(endVertex);
|
|
390
|
+
if (edgeMap) {
|
|
391
|
+
edgeMap.push(edge);
|
|
392
392
|
} else {
|
|
393
|
-
this.
|
|
393
|
+
this._edgeMap.set(endVertex, [edge]);
|
|
394
394
|
}
|
|
395
395
|
}
|
|
396
396
|
}
|
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { isWeakKey, rangeCheck } from '../../utils';
|
|
10
|
-
import { HashMapLinkedNode, HashMapOptions, HashMapStoreItem
|
|
11
|
-
import {
|
|
10
|
+
import { EntryCallback, HashMapLinkedNode, HashMapOptions, HashMapStoreItem } from '../../types';
|
|
11
|
+
import { IterableEntryBase } from "../base";
|
|
12
12
|
|
|
13
|
-
export class HashMap<K = any, V = any> extends
|
|
13
|
+
export class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {
|
|
14
14
|
protected _store: { [key: string]: HashMapStoreItem<K, V> } = {};
|
|
15
15
|
protected _objMap: Map<object, V> = new Map();
|
|
16
16
|
|
|
@@ -165,7 +165,7 @@ export class HashMap<K = any, V = any> extends IterablePairBase<K, V> {
|
|
|
165
165
|
* @returns The `map` method is returning a new `HashMap` object with the transformed values based on
|
|
166
166
|
* the provided callback function.
|
|
167
167
|
*/
|
|
168
|
-
map<U>(callbackfn:
|
|
168
|
+
map<U>(callbackfn: EntryCallback<K, V, U>, thisArg?: any): HashMap<K, U> {
|
|
169
169
|
const resultMap = new HashMap<K, U>();
|
|
170
170
|
let index = 0;
|
|
171
171
|
for (const [key, value] of this) {
|
|
@@ -195,7 +195,7 @@ export class HashMap<K = any, V = any> extends IterablePairBase<K, V> {
|
|
|
195
195
|
* @returns The `filter` method is returning a new `HashMap` object that contains the key-value pairs
|
|
196
196
|
* from the original `HashMap` that pass the provided `predicate` function.
|
|
197
197
|
*/
|
|
198
|
-
filter(predicate:
|
|
198
|
+
filter(predicate: EntryCallback<K, V, boolean>, thisArg?: any): HashMap<K, V> {
|
|
199
199
|
const filteredMap = new HashMap<K, V>();
|
|
200
200
|
let index = 0;
|
|
201
201
|
for (const [key, value] of this) {
|
|
@@ -248,7 +248,7 @@ export class HashMap<K = any, V = any> extends IterablePairBase<K, V> {
|
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
export class LinkedHashMap<K = any, V = any> extends
|
|
251
|
+
export class LinkedHashMap<K = any, V = any> extends IterableEntryBase<K, V> {
|
|
252
252
|
|
|
253
253
|
protected _noObjMap: Record<string, HashMapLinkedNode<K, V | undefined>> = {};
|
|
254
254
|
protected _objMap = new WeakMap<object, HashMapLinkedNode<K, V | undefined>>();
|
|
@@ -567,7 +567,7 @@ export class LinkedHashMap<K = any, V = any> extends IterablePairBase<K, V> {
|
|
|
567
567
|
* @returns a new `LinkedHashMap` object that contains the key-value pairs from the original
|
|
568
568
|
* `LinkedHashMap` object that satisfy the given predicate function.
|
|
569
569
|
*/
|
|
570
|
-
filter(predicate:
|
|
570
|
+
filter(predicate: EntryCallback<K, V, boolean>, thisArg?: any): LinkedHashMap<K, V> {
|
|
571
571
|
const filteredMap = new LinkedHashMap<K, V>();
|
|
572
572
|
let index = 0;
|
|
573
573
|
for (const [key, value] of this) {
|
|
@@ -601,7 +601,7 @@ export class LinkedHashMap<K = any, V = any> extends IterablePairBase<K, V> {
|
|
|
601
601
|
* @returns a new `LinkedHashMap` object with the values mapped according to the provided callback
|
|
602
602
|
* function.
|
|
603
603
|
*/
|
|
604
|
-
map<NV>(callback:
|
|
604
|
+
map<NV>(callback: EntryCallback<K, V, NV>, thisArg?: any): LinkedHashMap<K, NV> {
|
|
605
605
|
const mappedMap = new LinkedHashMap<K, NV>();
|
|
606
606
|
let index = 0;
|
|
607
607
|
for (const [key, value] of this) {
|
|
@@ -13,9 +13,9 @@ export interface IBinaryTree<K = number, V = any, N extends BinaryTreeNode<K, V,
|
|
|
13
13
|
|
|
14
14
|
createTree(options?: Partial<BinaryTreeOptions<K>>): TREE;
|
|
15
15
|
|
|
16
|
-
add(keyOrNodeOrEntry: BTNodeExemplar<K, V, N>, count?: number): N | null | undefined;
|
|
16
|
+
add(keyOrNodeOrEntry: BTNodeExemplar<K, V, N>, value?: V, count?: number): N | null | undefined;
|
|
17
17
|
|
|
18
|
-
addMany(nodes: Iterable<BTNodeExemplar<K, V, N
|
|
18
|
+
addMany(nodes: Iterable<BTNodeExemplar<K, V, N>>, values?: Iterable<V | undefined>): (N | null | undefined)[];
|
|
19
19
|
|
|
20
20
|
delete<C extends BTNCallback<N>>(identifier: ReturnType<C> | null, callback: C): BiTreeDeleteResult<N>[];
|
|
21
21
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IterableElementBase,
|
|
1
|
+
import { IterableElementBase, IterableEntryBase } from "../../../data-structures";
|
|
2
2
|
|
|
3
|
-
export type
|
|
3
|
+
export type EntryCallback<K, V, R> = (value: V, key: K, index: number, container: IterableEntryBase<K, V>) => R;
|
|
4
4
|
export type ElementCallback<V, R> = (element: V, index: number, container: IterableElementBase<V>) => R;
|
|
5
|
-
export type
|
|
5
|
+
export type ReduceEntryCallback<K, V, R> = (accumulator: R, value: V, key: K, index: number, container: IterableEntryBase<K, V>) => R;
|
|
6
6
|
export type ReduceElementCallback<V, R> = (accumulator: R, element: V, index: number, container: IterableElementBase<V>) => R;
|