tree-multimap-typed 2.2.7 → 2.2.8
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 +73 -75
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs-legacy/index.cjs +73 -75
- package/dist/cjs-legacy/index.cjs.map +1 -1
- package/dist/esm/index.mjs +73 -75
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm-legacy/index.mjs +73 -75
- package/dist/esm-legacy/index.mjs.map +1 -1
- package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +1 -1
- package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -2
- package/dist/types/data-structures/binary-tree/avl-tree.d.ts +10 -10
- package/dist/types/data-structures/binary-tree/binary-tree.d.ts +22 -23
- package/dist/types/data-structures/binary-tree/bst.d.ts +11 -11
- package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +1 -1
- package/dist/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
- package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -2
- package/dist/umd/tree-multimap-typed.js +71 -73
- package/dist/umd/tree-multimap-typed.js.map +1 -1
- package/dist/umd/tree-multimap-typed.min.js +3 -3
- package/dist/umd/tree-multimap-typed.min.js.map +1 -1
- package/package.json +2 -2
- package/src/data-structures/binary-tree/avl-tree-counter.ts +6 -6
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +13 -13
- package/src/data-structures/binary-tree/avl-tree.ts +15 -15
- package/src/data-structures/binary-tree/binary-tree.ts +53 -55
- package/src/data-structures/binary-tree/bst.ts +21 -22
- package/src/data-structures/binary-tree/red-black-tree.ts +3 -3
- package/src/data-structures/binary-tree/tree-counter.ts +4 -4
- package/src/data-structures/binary-tree/tree-multi-map.ts +13 -13
package/dist/esm/index.mjs
CHANGED
|
@@ -1192,9 +1192,9 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
1192
1192
|
iterationType = "ITERATIVE";
|
|
1193
1193
|
/**
|
|
1194
1194
|
* Creates an instance of BinaryTree.
|
|
1195
|
-
* @remarks Time O(N * M), where N is the number of items in `keysNodesEntriesOrRaws` and M is the tree size at insertion time (due to O(M) `
|
|
1195
|
+
* @remarks Time O(N * M), where N is the number of items in `keysNodesEntriesOrRaws` and M is the tree size at insertion time (due to O(M) `set` operation). Space O(N) for storing the nodes.
|
|
1196
1196
|
*
|
|
1197
|
-
* @param [keysNodesEntriesOrRaws=[]] - An iterable of items to
|
|
1197
|
+
* @param [keysNodesEntriesOrRaws=[]] - An iterable of items to set.
|
|
1198
1198
|
* @param [options] - Configuration options for the tree.
|
|
1199
1199
|
*/
|
|
1200
1200
|
constructor(keysNodesEntriesOrRaws = [], options) {
|
|
@@ -1207,7 +1207,7 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
1207
1207
|
if (typeof toEntryFn === "function") this._toEntryFn = toEntryFn;
|
|
1208
1208
|
else if (toEntryFn) throw TypeError("toEntryFn must be a function type");
|
|
1209
1209
|
}
|
|
1210
|
-
if (keysNodesEntriesOrRaws) this.
|
|
1210
|
+
if (keysNodesEntriesOrRaws) this.setMany(keysNodesEntriesOrRaws);
|
|
1211
1211
|
}
|
|
1212
1212
|
_isMapMode = true;
|
|
1213
1213
|
/**
|
|
@@ -1421,10 +1421,20 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
1421
1421
|
* @remarks Time O(log N), For BST, Red-Black Tree, and AVL Tree subclasses, the worst-case time is O(log N). This implementation adds the node at the first available position in a level-order (BFS) traversal. This is NOT a Binary Search Tree insertion. Time O(N), where N is the number of nodes. It must traverse level-by-level to find an empty slot. Space O(N) in the worst case for the BFS queue (e.g., a full last level).
|
|
1422
1422
|
*
|
|
1423
1423
|
* @param keyNodeOrEntry - The key, node, or entry to add.
|
|
1424
|
+
* @returns True if the addition was successful, false otherwise.
|
|
1425
|
+
*/
|
|
1426
|
+
add(keyNodeOrEntry) {
|
|
1427
|
+
return this.set(keyNodeOrEntry);
|
|
1428
|
+
}
|
|
1429
|
+
/**
|
|
1430
|
+
* Adds or updates a new node to the tree.
|
|
1431
|
+
* @remarks Time O(log N), For BST, Red-Black Tree, and AVL Tree subclasses, the worst-case time is O(log N). This implementation sets the node at the first available position in a level-order (BFS) traversal. This is NOT a Binary Search Tree insertion. Time O(N), where N is the number of nodes. It must traverse level-by-level to find an empty slot. Space O(N) in the worst case for the BFS queue (e.g., a full last level).
|
|
1432
|
+
*
|
|
1433
|
+
* @param keyNodeOrEntry - The key, node, or entry to set or update.
|
|
1424
1434
|
* @param [value] - The value, if providing just a key.
|
|
1425
1435
|
* @returns True if the addition was successful, false otherwise.
|
|
1426
1436
|
*/
|
|
1427
|
-
|
|
1437
|
+
set(keyNodeOrEntry, value) {
|
|
1428
1438
|
const [newNode, newValue] = this._keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry, value);
|
|
1429
1439
|
if (newNode === void 0) return false;
|
|
1430
1440
|
if (!this._root) {
|
|
@@ -1468,25 +1478,25 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
1468
1478
|
return false;
|
|
1469
1479
|
}
|
|
1470
1480
|
/**
|
|
1471
|
-
* Adds
|
|
1472
|
-
* @remarks Time O(
|
|
1481
|
+
* Adds multiple items to the tree.
|
|
1482
|
+
* @remarks Time O(N * M), where N is the number of items to set and M is the size of the tree at insertion (due to O(M) `set` operation). Space O(M) (from `set`) + O(N) (for the `inserted` array).
|
|
1473
1483
|
*
|
|
1474
|
-
* @param
|
|
1475
|
-
* @param [
|
|
1476
|
-
* @returns
|
|
1484
|
+
* @param keysNodesEntriesOrRaws - An iterable of items to set.
|
|
1485
|
+
* @param [values] - An optional parallel iterable of values.
|
|
1486
|
+
* @returns An array of booleans indicating the success of each individual `set` operation.
|
|
1477
1487
|
*/
|
|
1478
|
-
|
|
1479
|
-
return this.
|
|
1488
|
+
addMany(keysNodesEntriesOrRaws) {
|
|
1489
|
+
return this.setMany(keysNodesEntriesOrRaws);
|
|
1480
1490
|
}
|
|
1481
1491
|
/**
|
|
1482
|
-
* Adds multiple items to the tree.
|
|
1483
|
-
* @remarks Time O(N * M), where N is the number of items to
|
|
1492
|
+
* Adds or updates multiple items to the tree.
|
|
1493
|
+
* @remarks Time O(N * M), where N is the number of items to set and M is the size of the tree at insertion (due to O(M) `set` operation). Space O(M) (from `set`) + O(N) (for the `inserted` array).
|
|
1484
1494
|
*
|
|
1485
|
-
* @param keysNodesEntriesOrRaws - An iterable of items to
|
|
1495
|
+
* @param keysNodesEntriesOrRaws - An iterable of items to set or update.
|
|
1486
1496
|
* @param [values] - An optional parallel iterable of values.
|
|
1487
|
-
* @returns An array of booleans indicating the success of each individual `
|
|
1497
|
+
* @returns An array of booleans indicating the success of each individual `set` operation.
|
|
1488
1498
|
*/
|
|
1489
|
-
|
|
1499
|
+
setMany(keysNodesEntriesOrRaws, values) {
|
|
1490
1500
|
const inserted = [];
|
|
1491
1501
|
let valuesIterator;
|
|
1492
1502
|
if (values) {
|
|
@@ -1501,40 +1511,29 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
1501
1511
|
}
|
|
1502
1512
|
}
|
|
1503
1513
|
if (this.isRaw(keyNodeEntryOrRaw)) keyNodeEntryOrRaw = this._toEntryFn(keyNodeEntryOrRaw);
|
|
1504
|
-
inserted.push(this.
|
|
1514
|
+
inserted.push(this.set(keyNodeEntryOrRaw, value));
|
|
1505
1515
|
}
|
|
1506
1516
|
return inserted;
|
|
1507
1517
|
}
|
|
1508
1518
|
/**
|
|
1509
|
-
*
|
|
1510
|
-
* @remarks Time O(N * M), where N is the
|
|
1511
|
-
*
|
|
1512
|
-
* @param keysNodesEntriesOrRaws - An iterable of items to add or update.
|
|
1513
|
-
* @param [values] - An optional parallel iterable of values.
|
|
1514
|
-
* @returns An array of booleans indicating the success of each individual `add` operation.
|
|
1515
|
-
*/
|
|
1516
|
-
setMany(keysNodesEntriesOrRaws, values) {
|
|
1517
|
-
return this.addMany(keysNodesEntriesOrRaws, values);
|
|
1518
|
-
}
|
|
1519
|
-
/**
|
|
1520
|
-
* Merges another tree into this one by adding all its nodes.
|
|
1521
|
-
* @remarks Time O(N * M), same as `addMany`, where N is the size of `anotherTree` and M is the size of this tree. Space O(M) (from `add`).
|
|
1519
|
+
* Merges another tree into this one by seting all its nodes.
|
|
1520
|
+
* @remarks Time O(N * M), same as `setMany`, where N is the size of `anotherTree` and M is the size of this tree. Space O(M) (from `set`).
|
|
1522
1521
|
*
|
|
1523
1522
|
* @param anotherTree - The tree to merge.
|
|
1524
1523
|
*/
|
|
1525
1524
|
merge(anotherTree) {
|
|
1526
|
-
this.
|
|
1525
|
+
this.setMany(anotherTree, []);
|
|
1527
1526
|
}
|
|
1528
1527
|
/**
|
|
1529
1528
|
* Clears the tree and refills it with new items.
|
|
1530
|
-
* @remarks Time O(N) (for `clear`) + O(N * M) (for `
|
|
1529
|
+
* @remarks Time O(N) (for `clear`) + O(N * M) (for `setMany`) = O(N * M). Space O(M) (from `setMany`).
|
|
1531
1530
|
*
|
|
1532
|
-
* @param keysNodesEntriesOrRaws - An iterable of items to
|
|
1531
|
+
* @param keysNodesEntriesOrRaws - An iterable of items to set.
|
|
1533
1532
|
* @param [values] - An optional parallel iterable of values.
|
|
1534
1533
|
*/
|
|
1535
1534
|
refill(keysNodesEntriesOrRaws, values) {
|
|
1536
1535
|
this.clear();
|
|
1537
|
-
this.
|
|
1536
|
+
this.setMany(keysNodesEntriesOrRaws, values);
|
|
1538
1537
|
}
|
|
1539
1538
|
/**
|
|
1540
1539
|
* Deletes a node from the tree.
|
|
@@ -2199,7 +2198,7 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
2199
2198
|
}
|
|
2200
2199
|
/**
|
|
2201
2200
|
* Clones the tree.
|
|
2202
|
-
* @remarks Time O(N * M), where N is the number of nodes and M is the tree size during insertion (due to `bfs` + `
|
|
2201
|
+
* @remarks Time O(N * M), where N is the number of nodes and M is the tree size during insertion (due to `bfs` + `set`, and `set` is O(M)). Space O(N) for the new tree and the BFS queue.
|
|
2203
2202
|
*
|
|
2204
2203
|
* @returns A new, cloned instance of the tree.
|
|
2205
2204
|
*/
|
|
@@ -2210,7 +2209,7 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
2210
2209
|
}
|
|
2211
2210
|
/**
|
|
2212
2211
|
* Creates a new tree containing only the entries that satisfy the predicate.
|
|
2213
|
-
* @remarks Time O(N * M), where N is nodes in this tree, and M is size of the new tree during insertion (O(N) iteration + O(M) `
|
|
2212
|
+
* @remarks Time O(N * M), where N is nodes in this tree, and M is size of the new tree during insertion (O(N) iteration + O(M) `set` for each item). Space O(N) for the new tree.
|
|
2214
2213
|
*
|
|
2215
2214
|
* @param predicate - A function to test each [key, value] pair.
|
|
2216
2215
|
* @param [thisArg] - `this` context for the predicate.
|
|
@@ -2219,7 +2218,7 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
2219
2218
|
filter(predicate, thisArg) {
|
|
2220
2219
|
const out = this._createInstance();
|
|
2221
2220
|
let i = 0;
|
|
2222
|
-
for (const [k, v] of this) if (predicate.call(thisArg, v, k, i++, this)) out.
|
|
2221
|
+
for (const [k, v] of this) if (predicate.call(thisArg, v, k, i++, this)) out.set([k, v]);
|
|
2223
2222
|
return out;
|
|
2224
2223
|
}
|
|
2225
2224
|
/**
|
|
@@ -2237,7 +2236,7 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
2237
2236
|
map(cb, options, thisArg) {
|
|
2238
2237
|
const out = this._createLike([], options);
|
|
2239
2238
|
let i = 0;
|
|
2240
|
-
for (const [k, v] of this) out.
|
|
2239
|
+
for (const [k, v] of this) out.set(cb.call(thisArg, v, k, i++, this));
|
|
2241
2240
|
return out;
|
|
2242
2241
|
}
|
|
2243
2242
|
/**
|
|
@@ -2489,18 +2488,18 @@ var BinaryTree = class extends IterableEntryBase {
|
|
|
2489
2488
|
return [this.createNode(keyNodeOrEntry, value), value];
|
|
2490
2489
|
}
|
|
2491
2490
|
/**
|
|
2492
|
-
* (Protected) Helper for cloning. Performs a BFS and
|
|
2493
|
-
* @remarks Time O(N * M) (O(N) BFS + O(M) `
|
|
2491
|
+
* (Protected) Helper for cloning. Performs a BFS and sets all nodes to the new tree.
|
|
2492
|
+
* @remarks Time O(N * M) (O(N) BFS + O(M) `set` for each node).
|
|
2494
2493
|
*
|
|
2495
2494
|
* @param cloned - The new, empty tree instance to populate.
|
|
2496
2495
|
*/
|
|
2497
2496
|
_clone(cloned) {
|
|
2498
2497
|
this.bfs(
|
|
2499
2498
|
(node) => {
|
|
2500
|
-
if (node === null) cloned.
|
|
2499
|
+
if (node === null) cloned.set(null);
|
|
2501
2500
|
else {
|
|
2502
|
-
if (this._isMapMode) cloned.
|
|
2503
|
-
else cloned.
|
|
2501
|
+
if (this._isMapMode) cloned.set([node.key, this._store.get(node.key)]);
|
|
2502
|
+
else cloned.set([node.key, node.value]);
|
|
2504
2503
|
}
|
|
2505
2504
|
},
|
|
2506
2505
|
this._root,
|
|
@@ -2833,7 +2832,7 @@ var BST = class extends BinaryTree {
|
|
|
2833
2832
|
* Creates an instance of BST.
|
|
2834
2833
|
* @remarks Time O(N log N) or O(N^2) depending on `isBalanceAdd` in `addMany` and input order. Space O(N).
|
|
2835
2834
|
*
|
|
2836
|
-
* @param [keysNodesEntriesOrRaws=[]] - An iterable of items to
|
|
2835
|
+
* @param [keysNodesEntriesOrRaws=[]] - An iterable of items to set.
|
|
2837
2836
|
* @param [options] - Configuration options for the BST, including comparator.
|
|
2838
2837
|
*/
|
|
2839
2838
|
constructor(keysNodesEntriesOrRaws = [], options) {
|
|
@@ -2847,7 +2846,7 @@ var BST = class extends BinaryTree {
|
|
|
2847
2846
|
} else {
|
|
2848
2847
|
this._comparator = this._createDefaultComparator();
|
|
2849
2848
|
}
|
|
2850
|
-
if (keysNodesEntriesOrRaws) this.
|
|
2849
|
+
if (keysNodesEntriesOrRaws) this.setMany(keysNodesEntriesOrRaws);
|
|
2851
2850
|
}
|
|
2852
2851
|
_root = void 0;
|
|
2853
2852
|
/**
|
|
@@ -3063,11 +3062,11 @@ var BST = class extends BinaryTree {
|
|
|
3063
3062
|
* Adds a new node to the BST based on key comparison.
|
|
3064
3063
|
* @remarks Time O(log N), where H is tree height. O(N) worst-case (unbalanced tree), O(log N) average. Space O(1).
|
|
3065
3064
|
*
|
|
3066
|
-
* @param keyNodeOrEntry - The key, node, or entry to
|
|
3065
|
+
* @param keyNodeOrEntry - The key, node, or entry to set.
|
|
3067
3066
|
* @param [value] - The value, if providing just a key.
|
|
3068
3067
|
* @returns True if the addition was successful, false otherwise.
|
|
3069
3068
|
*/
|
|
3070
|
-
|
|
3069
|
+
set(keyNodeOrEntry, value) {
|
|
3071
3070
|
const [newNode, newValue] = this._keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry, value);
|
|
3072
3071
|
if (newNode === void 0) return false;
|
|
3073
3072
|
if (this._root === void 0) {
|
|
@@ -3104,24 +3103,24 @@ var BST = class extends BinaryTree {
|
|
|
3104
3103
|
}
|
|
3105
3104
|
/**
|
|
3106
3105
|
* Adds multiple items to the tree.
|
|
3107
|
-
* @remarks If `isBalanceAdd` is true, sorts the input and builds a balanced tree. Time O(N log N) (due to sort and balanced
|
|
3106
|
+
* @remarks If `isBalanceAdd` is true, sorts the input and builds a balanced tree. Time O(N log N) (due to sort and balanced set).
|
|
3108
3107
|
* If false, adds items one by one. Time O(N * H), which is O(N^2) worst-case.
|
|
3109
3108
|
* Space O(N) for sorting and recursion/iteration stack.
|
|
3110
3109
|
*
|
|
3111
|
-
* @param keysNodesEntriesOrRaws - An iterable of items to
|
|
3110
|
+
* @param keysNodesEntriesOrRaws - An iterable of items to set.
|
|
3112
3111
|
* @param [values] - An optional parallel iterable of values.
|
|
3113
3112
|
* @param [isBalanceAdd=true] - If true, builds a balanced tree from the items.
|
|
3114
|
-
* @param [iterationType=this.iterationType] - The traversal method for balanced
|
|
3115
|
-
* @returns An array of booleans indicating the success of each individual `
|
|
3113
|
+
* @param [iterationType=this.iterationType] - The traversal method for balanced set (recursive or iterative).
|
|
3114
|
+
* @returns An array of booleans indicating the success of each individual `set` operation.
|
|
3116
3115
|
*/
|
|
3117
|
-
|
|
3116
|
+
setMany(keysNodesEntriesOrRaws, values, isBalanceAdd = true, iterationType = this.iterationType) {
|
|
3118
3117
|
const inserted = [];
|
|
3119
3118
|
const valuesIterator = values?.[Symbol.iterator]();
|
|
3120
3119
|
if (!isBalanceAdd) {
|
|
3121
3120
|
for (let kve of keysNodesEntriesOrRaws) {
|
|
3122
3121
|
const val = valuesIterator?.next().value;
|
|
3123
3122
|
if (this.isRaw(kve)) kve = this._toEntryFn(kve);
|
|
3124
|
-
inserted.push(this.
|
|
3123
|
+
inserted.push(this.set(kve, val));
|
|
3125
3124
|
}
|
|
3126
3125
|
return inserted;
|
|
3127
3126
|
}
|
|
@@ -3149,9 +3148,9 @@ var BST = class extends BinaryTree {
|
|
|
3149
3148
|
const { key, value, orgIndex } = arr[mid];
|
|
3150
3149
|
if (this.isRaw(key)) {
|
|
3151
3150
|
const entry = this._toEntryFn(key);
|
|
3152
|
-
inserted[orgIndex] = this.
|
|
3151
|
+
inserted[orgIndex] = this.set(entry);
|
|
3153
3152
|
} else {
|
|
3154
|
-
inserted[orgIndex] = this.
|
|
3153
|
+
inserted[orgIndex] = this.set(key, value);
|
|
3155
3154
|
}
|
|
3156
3155
|
_dfs(arr.slice(0, mid));
|
|
3157
3156
|
_dfs(arr.slice(mid + 1));
|
|
@@ -3168,9 +3167,9 @@ var BST = class extends BinaryTree {
|
|
|
3168
3167
|
const { key, value, orgIndex } = sorted[m];
|
|
3169
3168
|
if (this.isRaw(key)) {
|
|
3170
3169
|
const entry = this._toEntryFn(key);
|
|
3171
|
-
inserted[orgIndex] = this.
|
|
3170
|
+
inserted[orgIndex] = this.set(entry);
|
|
3172
3171
|
} else {
|
|
3173
|
-
inserted[orgIndex] = this.
|
|
3172
|
+
inserted[orgIndex] = this.set(key, value);
|
|
3174
3173
|
}
|
|
3175
3174
|
stack.push([m + 1, r]);
|
|
3176
3175
|
stack.push([l, m - 1]);
|
|
@@ -3445,7 +3444,7 @@ var BST = class extends BinaryTree {
|
|
|
3445
3444
|
const out = this._createLike([], options);
|
|
3446
3445
|
let index = 0;
|
|
3447
3446
|
for (const [key, value] of this) {
|
|
3448
|
-
out.
|
|
3447
|
+
out.set(callback.call(thisArg, value, key, index++, this));
|
|
3449
3448
|
}
|
|
3450
3449
|
return out;
|
|
3451
3450
|
}
|
|
@@ -3501,7 +3500,6 @@ var BST = class extends BinaryTree {
|
|
|
3501
3500
|
*/
|
|
3502
3501
|
_createDefaultComparator() {
|
|
3503
3502
|
return (a, b) => {
|
|
3504
|
-
debugger;
|
|
3505
3503
|
if (isComparable(a) && isComparable(b)) {
|
|
3506
3504
|
if (a > b) return 1;
|
|
3507
3505
|
if (a < b) return -1;
|
|
@@ -4063,7 +4061,7 @@ var RedBlackTree = class extends BST {
|
|
|
4063
4061
|
super([], options);
|
|
4064
4062
|
this._root = this.NIL;
|
|
4065
4063
|
if (keysNodesEntriesOrRaws) {
|
|
4066
|
-
this.
|
|
4064
|
+
this.setMany(keysNodesEntriesOrRaws);
|
|
4067
4065
|
}
|
|
4068
4066
|
}
|
|
4069
4067
|
_root;
|
|
@@ -4111,7 +4109,7 @@ var RedBlackTree = class extends BST {
|
|
|
4111
4109
|
* @param [value]- See parameter type for details.
|
|
4112
4110
|
* @returns True if inserted or updated; false if ignored.
|
|
4113
4111
|
*/
|
|
4114
|
-
|
|
4112
|
+
set(keyNodeOrEntry, value) {
|
|
4115
4113
|
const [newNode, newValue] = this._keyValueNodeOrEntryToNodeAndValue(keyNodeOrEntry, value);
|
|
4116
4114
|
if (!this.isRealNode(newNode)) return false;
|
|
4117
4115
|
const insertStatus = this._insert(newNode);
|
|
@@ -4205,7 +4203,7 @@ var RedBlackTree = class extends BST {
|
|
|
4205
4203
|
const out = this._createLike([], options);
|
|
4206
4204
|
let index = 0;
|
|
4207
4205
|
for (const [key, value] of this) {
|
|
4208
|
-
out.
|
|
4206
|
+
out.set(callback.call(thisArg, value, key, index++, this));
|
|
4209
4207
|
}
|
|
4210
4208
|
return out;
|
|
4211
4209
|
}
|
|
@@ -4594,7 +4592,7 @@ var TreeMultiMap = class extends RedBlackTree {
|
|
|
4594
4592
|
constructor(keysNodesEntriesOrRaws = [], options) {
|
|
4595
4593
|
super([], { ...options });
|
|
4596
4594
|
if (keysNodesEntriesOrRaws) {
|
|
4597
|
-
this.
|
|
4595
|
+
this.setMany(keysNodesEntriesOrRaws);
|
|
4598
4596
|
}
|
|
4599
4597
|
}
|
|
4600
4598
|
createNode(key, value = []) {
|
|
@@ -4614,27 +4612,27 @@ var TreeMultiMap = class extends RedBlackTree {
|
|
|
4614
4612
|
* Insert a value or a list of values into the multimap. If the key exists, values are appended.
|
|
4615
4613
|
* @remarks Time O(log N + M), Space O(1)
|
|
4616
4614
|
* @param keyNodeOrEntry - Key, node, or [key, values] entry.
|
|
4617
|
-
* @param [value] - Single value to
|
|
4615
|
+
* @param [value] - Single value to set when a bare key is provided.
|
|
4618
4616
|
* @returns True if inserted or appended; false if ignored.
|
|
4619
4617
|
*/
|
|
4620
|
-
|
|
4621
|
-
if (this.isRealNode(keyNodeOrEntry)) return super.
|
|
4618
|
+
set(keyNodeOrEntry, value) {
|
|
4619
|
+
if (this.isRealNode(keyNodeOrEntry)) return super.set(keyNodeOrEntry);
|
|
4622
4620
|
const _commonAdd = /* @__PURE__ */ __name((key, values) => {
|
|
4623
4621
|
if (key === void 0 || key === null) return false;
|
|
4624
|
-
const
|
|
4622
|
+
const _setToValues = /* @__PURE__ */ __name(() => {
|
|
4625
4623
|
const existingValues = this.get(key);
|
|
4626
4624
|
if (existingValues !== void 0 && values !== void 0) {
|
|
4627
4625
|
for (const value2 of values) existingValues.push(value2);
|
|
4628
4626
|
return true;
|
|
4629
4627
|
}
|
|
4630
4628
|
return false;
|
|
4631
|
-
}, "
|
|
4632
|
-
const
|
|
4629
|
+
}, "_setToValues");
|
|
4630
|
+
const _setByNode = /* @__PURE__ */ __name(() => {
|
|
4633
4631
|
const existingNode = this.getNode(key);
|
|
4634
4632
|
if (this.isRealNode(existingNode)) {
|
|
4635
4633
|
const existingValues = this.get(existingNode);
|
|
4636
4634
|
if (existingValues === void 0) {
|
|
4637
|
-
super.
|
|
4635
|
+
super.set(key, values);
|
|
4638
4636
|
return true;
|
|
4639
4637
|
}
|
|
4640
4638
|
if (values !== void 0) {
|
|
@@ -4644,13 +4642,13 @@ var TreeMultiMap = class extends RedBlackTree {
|
|
|
4644
4642
|
return false;
|
|
4645
4643
|
}
|
|
4646
4644
|
} else {
|
|
4647
|
-
return super.
|
|
4645
|
+
return super.set(key, values);
|
|
4648
4646
|
}
|
|
4649
|
-
}, "
|
|
4647
|
+
}, "_setByNode");
|
|
4650
4648
|
if (this._isMapMode) {
|
|
4651
|
-
return
|
|
4649
|
+
return _setByNode() || _setToValues();
|
|
4652
4650
|
}
|
|
4653
|
-
return
|
|
4651
|
+
return _setToValues() || _setByNode();
|
|
4654
4652
|
}, "_commonAdd");
|
|
4655
4653
|
if (this.isEntry(keyNodeOrEntry)) {
|
|
4656
4654
|
const [key, values] = keyNodeOrEntry;
|
|
@@ -4690,7 +4688,7 @@ var TreeMultiMap = class extends RedBlackTree {
|
|
|
4690
4688
|
map(callback, options, thisArg) {
|
|
4691
4689
|
const out = this._createLike([], options);
|
|
4692
4690
|
let i = 0;
|
|
4693
|
-
for (const [k, v] of this) out.
|
|
4691
|
+
for (const [k, v] of this) out.set(callback.call(thisArg, v, k, i++, this));
|
|
4694
4692
|
return out;
|
|
4695
4693
|
}
|
|
4696
4694
|
/**
|