binary-tree-typed 2.5.1 → 2.5.3

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.
Files changed (75) hide show
  1. package/dist/cjs/index.cjs +340 -107
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs-legacy/index.cjs +339 -106
  4. package/dist/cjs-legacy/index.cjs.map +1 -1
  5. package/dist/esm/index.mjs +340 -108
  6. package/dist/esm/index.mjs.map +1 -1
  7. package/dist/esm-legacy/index.mjs +339 -107
  8. package/dist/esm-legacy/index.mjs.map +1 -1
  9. package/dist/types/common/error.d.ts +9 -0
  10. package/dist/types/common/index.d.ts +1 -1
  11. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +86 -2
  12. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +98 -0
  13. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +189 -13
  14. package/dist/types/data-structures/binary-tree/bst.d.ts +270 -3
  15. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +136 -8
  16. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +42 -0
  17. package/dist/types/data-structures/binary-tree/tree-map.d.ts +1089 -161
  18. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +1243 -350
  19. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +980 -255
  20. package/dist/types/data-structures/binary-tree/tree-set.d.ts +1174 -284
  21. package/dist/types/data-structures/graph/directed-graph.d.ts +70 -0
  22. package/dist/types/data-structures/graph/undirected-graph.d.ts +63 -0
  23. package/dist/types/data-structures/hash/hash-map.d.ts +84 -6
  24. package/dist/types/data-structures/heap/heap.d.ts +140 -12
  25. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +126 -0
  26. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +106 -1
  27. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +126 -0
  28. package/dist/types/data-structures/matrix/matrix.d.ts +56 -0
  29. package/dist/types/data-structures/queue/deque.d.ts +127 -0
  30. package/dist/types/data-structures/queue/queue.d.ts +97 -0
  31. package/dist/types/data-structures/stack/stack.d.ts +72 -2
  32. package/dist/types/data-structures/trie/trie.d.ts +84 -0
  33. package/dist/types/interfaces/binary-tree.d.ts +2 -3
  34. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  35. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  36. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  37. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  38. package/dist/umd/binary-tree-typed.js +337 -105
  39. package/dist/umd/binary-tree-typed.js.map +1 -1
  40. package/dist/umd/binary-tree-typed.min.js +5 -5
  41. package/dist/umd/binary-tree-typed.min.js.map +1 -1
  42. package/package.json +2 -2
  43. package/src/common/error.ts +19 -1
  44. package/src/common/index.ts +1 -1
  45. package/src/data-structures/base/iterable-element-base.ts +3 -2
  46. package/src/data-structures/binary-tree/avl-tree.ts +99 -5
  47. package/src/data-structures/binary-tree/binary-indexed-tree.ts +102 -4
  48. package/src/data-structures/binary-tree/binary-tree.ts +239 -78
  49. package/src/data-structures/binary-tree/bst.ts +542 -13
  50. package/src/data-structures/binary-tree/red-black-tree.ts +155 -15
  51. package/src/data-structures/binary-tree/segment-tree.ts +42 -0
  52. package/src/data-structures/binary-tree/tree-map.ts +1223 -261
  53. package/src/data-structures/binary-tree/tree-multi-map.ts +939 -30
  54. package/src/data-structures/binary-tree/tree-multi-set.ts +746 -10
  55. package/src/data-structures/binary-tree/tree-set.ts +1018 -99
  56. package/src/data-structures/graph/abstract-graph.ts +2 -2
  57. package/src/data-structures/graph/directed-graph.ts +71 -1
  58. package/src/data-structures/graph/undirected-graph.ts +64 -1
  59. package/src/data-structures/hash/hash-map.ts +102 -16
  60. package/src/data-structures/heap/heap.ts +153 -23
  61. package/src/data-structures/heap/max-heap.ts +2 -2
  62. package/src/data-structures/linked-list/doubly-linked-list.ts +139 -0
  63. package/src/data-structures/linked-list/singly-linked-list.ts +106 -1
  64. package/src/data-structures/linked-list/skip-linked-list.ts +131 -5
  65. package/src/data-structures/matrix/matrix.ts +65 -9
  66. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  67. package/src/data-structures/queue/deque.ts +130 -0
  68. package/src/data-structures/queue/queue.ts +109 -0
  69. package/src/data-structures/stack/stack.ts +75 -5
  70. package/src/data-structures/trie/trie.ts +86 -2
  71. package/src/interfaces/binary-tree.ts +1 -9
  72. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  73. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  74. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  75. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import type { Comparator, TreeMultiMapOptions } from '../../types';
10
- import { ERR, Range } from '../../common';
10
+ import { ERR, raise, Range } from '../../common';
11
11
  import { RedBlackTree, RedBlackTreeNode } from './red-black-tree';
12
12
  import { TreeSet } from './tree-set';
13
13
 
@@ -49,7 +49,7 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
49
49
  const comparator = options.comparator ?? TreeSet.createDefaultComparator<K>();
50
50
  this.#isDefaultComparator = options.comparator === undefined;
51
51
  const toEntryFn = options.toEntryFn;
52
- this.#core = new RedBlackTree<K, V[], R>([], { ...options, comparator, isMapMode: options.isMapMode });
52
+ this.#core = new RedBlackTree<K, V[], R>([], { ...options, comparator, isMapMode: options.isMapMode, enableOrderStatistic: options.enableOrderStatistic });
53
53
 
54
54
  for (const x of keysNodesEntriesOrRaws) {
55
55
  if (x === null || x === undefined) continue;
@@ -91,15 +91,15 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
91
91
  // reuse TreeSet strict validation (same policy)
92
92
  // NOTE: TreeSet._validateKey is private, so we replicate the checks.
93
93
  if (typeof key === 'number') {
94
- if (Number.isNaN(key)) throw new TypeError(ERR.invalidNaN('TreeMultiMap'));
94
+ if (Number.isNaN(key)) raise(TypeError, ERR.invalidNaN('TreeMultiMap'));
95
95
  return;
96
96
  }
97
97
  if (typeof key === 'string') return;
98
98
  if (key instanceof Date) {
99
- if (Number.isNaN(key.getTime())) throw new TypeError(ERR.invalidDate('TreeMultiMap'));
99
+ if (Number.isNaN(key.getTime())) raise(TypeError, ERR.invalidDate('TreeMultiMap'));
100
100
  return;
101
101
  }
102
- throw new TypeError(ERR.comparatorRequired('TreeMultiMap'));
102
+ raise(TypeError, ERR.comparatorRequired('TreeMultiMap'));
103
103
  }
104
104
 
105
105
  /**
@@ -235,6 +235,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
235
235
 
236
236
 
237
237
 
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
238
273
 
239
274
 
240
275
 
@@ -389,6 +424,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
389
424
 
390
425
 
391
426
 
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
392
462
 
393
463
 
394
464
 
@@ -439,6 +509,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
439
509
 
440
510
 
441
511
 
512
+
513
+
514
+
515
+
516
+
517
+
518
+
442
519
 
443
520
 
444
521
 
@@ -477,6 +554,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
477
554
 
478
555
 
479
556
 
557
+
558
+
559
+
560
+
561
+
562
+
563
+
480
564
 
481
565
 
482
566
 
@@ -659,6 +743,48 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
659
743
 
660
744
 
661
745
 
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
662
788
 
663
789
 
664
790
 
@@ -852,6 +978,48 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
852
978
 
853
979
 
854
980
 
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
855
1023
 
856
1024
 
857
1025
 
@@ -1004,6 +1172,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1004
1172
 
1005
1173
 
1006
1174
 
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1007
1210
 
1008
1211
 
1009
1212
 
@@ -1201,6 +1404,48 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1201
1404
 
1202
1405
 
1203
1406
 
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+
1425
+
1426
+
1427
+
1428
+
1429
+
1430
+
1431
+
1432
+
1433
+
1434
+
1435
+
1436
+
1437
+
1438
+
1439
+
1440
+
1441
+
1442
+
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1204
1449
 
1205
1450
 
1206
1451
 
@@ -1435,18 +1680,60 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1435
1680
 
1436
1681
 
1437
1682
 
1438
- * @example
1439
- * // Remove key
1440
- * const mm = new TreeMultiMap<number, string>();
1441
- * mm.add(1, 'a');
1442
- * mm.add(2, 'b');
1443
- * mm.delete(1);
1444
- * console.log(mm.has(1)); // false;
1445
- */
1446
- delete(key: K): boolean {
1447
- this._validateKey(key);
1448
- return this.#core.delete(key).length > 0;
1449
- }
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+
1689
+
1690
+
1691
+
1692
+
1693
+
1694
+
1695
+
1696
+
1697
+
1698
+
1699
+
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
1710
+
1711
+
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+
1718
+
1719
+
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+ * @example
1726
+ * // Remove key
1727
+ * const mm = new TreeMultiMap<number, string>();
1728
+ * mm.add(1, 'a');
1729
+ * mm.add(2, 'b');
1730
+ * mm.delete(1);
1731
+ * console.log(mm.has(1)); // false;
1732
+ */
1733
+ delete(key: K): boolean {
1734
+ this._validateKey(key);
1735
+ return this.#core.delete(key);
1736
+ }
1450
1737
 
1451
1738
  /**
1452
1739
  * Check if a specific value exists in a key's bucket.
@@ -1466,6 +1753,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1466
1753
 
1467
1754
 
1468
1755
 
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1469
1763
 
1470
1764
 
1471
1765
 
@@ -1505,6 +1799,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1505
1799
 
1506
1800
 
1507
1801
 
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+
1508
1809
 
1509
1810
 
1510
1811
 
@@ -1549,6 +1850,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1549
1850
 
1550
1851
 
1551
1852
 
1853
+
1854
+
1855
+
1856
+
1857
+
1858
+
1859
+
1552
1860
 
1553
1861
 
1554
1862
 
@@ -1718,6 +2026,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1718
2026
 
1719
2027
 
1720
2028
 
2029
+
2030
+
2031
+
2032
+
2033
+
2034
+
2035
+
2036
+
2037
+
2038
+
2039
+
2040
+
2041
+
2042
+
2043
+
2044
+
2045
+
2046
+
2047
+
2048
+
2049
+
2050
+
2051
+
2052
+
2053
+
2054
+
2055
+
2056
+
2057
+
2058
+
2059
+
2060
+
2061
+
2062
+
2063
+
1721
2064
 
1722
2065
 
1723
2066
 
@@ -1875,6 +2218,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1875
2218
 
1876
2219
 
1877
2220
 
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+
2235
+
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+
2248
+
2249
+
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
1878
2256
 
1879
2257
 
1880
2258
 
@@ -1927,6 +2305,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1927
2305
 
1928
2306
 
1929
2307
 
2308
+
2309
+
2310
+
2311
+
2312
+
2313
+
2314
+
1930
2315
 
1931
2316
 
1932
2317
 
@@ -1966,6 +2351,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
1966
2351
 
1967
2352
 
1968
2353
 
2354
+
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
1969
2361
 
1970
2362
 
1971
2363
 
@@ -2005,6 +2397,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2005
2397
 
2006
2398
 
2007
2399
 
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2008
2407
 
2009
2408
 
2010
2409
 
@@ -2073,6 +2472,20 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2073
2472
 
2074
2473
 
2075
2474
 
2475
+
2476
+
2477
+
2478
+
2479
+
2480
+
2481
+
2482
+
2483
+
2484
+
2485
+
2486
+
2487
+
2488
+
2076
2489
 
2077
2490
 
2078
2491
 
@@ -2146,6 +2559,20 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2146
2559
 
2147
2560
 
2148
2561
 
2562
+
2563
+
2564
+
2565
+
2566
+
2567
+
2568
+
2569
+
2570
+
2571
+
2572
+
2573
+
2574
+
2575
+
2149
2576
 
2150
2577
 
2151
2578
 
@@ -2194,6 +2621,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2194
2621
 
2195
2622
 
2196
2623
 
2624
+
2625
+
2626
+
2627
+
2628
+
2629
+
2630
+
2197
2631
 
2198
2632
 
2199
2633
 
@@ -2237,6 +2671,13 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2237
2671
 
2238
2672
 
2239
2673
 
2674
+
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2240
2681
 
2241
2682
 
2242
2683
 
@@ -2388,6 +2829,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2388
2829
 
2389
2830
 
2390
2831
 
2832
+
2833
+
2834
+
2835
+
2836
+
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2844
+
2845
+
2846
+
2847
+
2848
+
2849
+
2850
+
2851
+
2852
+
2853
+
2854
+
2855
+
2856
+
2857
+
2858
+
2859
+
2860
+
2861
+
2862
+
2863
+
2864
+
2865
+
2866
+
2391
2867
 
2392
2868
 
2393
2869
 
@@ -2553,6 +3029,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2553
3029
 
2554
3030
 
2555
3031
 
3032
+
3033
+
3034
+
3035
+
3036
+
3037
+
3038
+
3039
+
3040
+
3041
+
3042
+
3043
+
3044
+
3045
+
3046
+
3047
+
3048
+
3049
+
3050
+
3051
+
3052
+
3053
+
3054
+
3055
+
3056
+
3057
+
3058
+
3059
+
3060
+
3061
+
3062
+
3063
+
3064
+
3065
+
3066
+
2556
3067
 
2557
3068
 
2558
3069
 
@@ -2686,6 +3197,34 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2686
3197
 
2687
3198
 
2688
3199
 
3200
+
3201
+
3202
+
3203
+
3204
+
3205
+
3206
+
3207
+
3208
+
3209
+
3210
+
3211
+
3212
+
3213
+
3214
+
3215
+
3216
+
3217
+
3218
+
3219
+
3220
+
3221
+
3222
+
3223
+
3224
+
3225
+
3226
+
3227
+
2689
3228
 
2690
3229
 
2691
3230
 
@@ -2818,6 +3357,34 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
2818
3357
 
2819
3358
 
2820
3359
 
3360
+
3361
+
3362
+
3363
+
3364
+
3365
+
3366
+
3367
+
3368
+
3369
+
3370
+
3371
+
3372
+
3373
+
3374
+
3375
+
3376
+
3377
+
3378
+
3379
+
3380
+
3381
+
3382
+
3383
+
3384
+
3385
+
3386
+
3387
+
2821
3388
 
2822
3389
 
2823
3390
 
@@ -3002,19 +3569,89 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
3002
3569
 
3003
3570
 
3004
3571
 
3005
- * @example
3006
- * // Display tree
3007
- * const mm = new TreeMultiMap<number, string>();
3008
- * mm.add(1, 'a');
3009
- * expect(() => mm.print()).not.toThrow();
3010
- */
3011
- print(): void {
3012
- this.#core.print();
3013
- }
3014
-
3015
- /**
3016
- * Executes a callback for each entry.
3017
- * @remarks Time O(n), Space O(1)
3572
+
3573
+
3574
+
3575
+
3576
+
3577
+
3578
+
3579
+
3580
+
3581
+
3582
+
3583
+
3584
+
3585
+
3586
+
3587
+
3588
+
3589
+
3590
+
3591
+
3592
+
3593
+
3594
+
3595
+
3596
+
3597
+
3598
+
3599
+
3600
+
3601
+
3602
+
3603
+
3604
+
3605
+
3606
+
3607
+ * @example
3608
+ * // Display tree
3609
+ * const mm = new TreeMultiMap<number, string>();
3610
+ * mm.add(1, 'a');
3611
+ * expect(() => mm.print()).not.toThrow();
3612
+ */
3613
+ print(): void {
3614
+ this.#core.print();
3615
+ }
3616
+
3617
+ /**
3618
+ * Executes a callback for each entry.
3619
+ * @remarks Time O(n), Space O(1)
3620
+
3621
+
3622
+
3623
+
3624
+
3625
+
3626
+
3627
+
3628
+
3629
+
3630
+
3631
+
3632
+
3633
+
3634
+
3635
+
3636
+
3637
+
3638
+
3639
+
3640
+
3641
+
3642
+
3643
+
3644
+
3645
+
3646
+
3647
+
3648
+
3649
+
3650
+
3651
+
3652
+
3653
+
3654
+
3018
3655
 
3019
3656
 
3020
3657
 
@@ -3298,6 +3935,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
3298
3935
 
3299
3936
 
3300
3937
 
3938
+
3939
+
3940
+
3941
+
3942
+
3943
+
3944
+
3945
+
3946
+
3947
+
3948
+
3949
+
3950
+
3951
+
3952
+
3953
+
3954
+
3955
+
3956
+
3957
+
3958
+
3959
+
3960
+
3961
+
3962
+
3963
+
3964
+
3965
+
3966
+
3967
+
3968
+
3969
+
3970
+
3971
+
3972
+
3301
3973
 
3302
3974
 
3303
3975
 
@@ -3461,6 +4133,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
3461
4133
 
3462
4134
 
3463
4135
 
4136
+
4137
+
4138
+
4139
+
4140
+
4141
+
4142
+
4143
+
4144
+
4145
+
4146
+
4147
+
4148
+
4149
+
4150
+
4151
+
4152
+
4153
+
4154
+
4155
+
4156
+
4157
+
4158
+
4159
+
4160
+
4161
+
4162
+
4163
+
4164
+
4165
+
4166
+
4167
+
4168
+
4169
+
4170
+
3464
4171
 
3465
4172
 
3466
4173
 
@@ -3624,6 +4331,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
3624
4331
 
3625
4332
 
3626
4333
 
4334
+
4335
+
4336
+
4337
+
4338
+
4339
+
4340
+
4341
+
4342
+
4343
+
4344
+
4345
+
4346
+
4347
+
4348
+
4349
+
4350
+
4351
+
4352
+
4353
+
4354
+
4355
+
4356
+
4357
+
4358
+
4359
+
4360
+
4361
+
4362
+
4363
+
4364
+
4365
+
4366
+
4367
+
4368
+
3627
4369
 
3628
4370
 
3629
4371
 
@@ -3778,6 +4520,41 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
3778
4520
 
3779
4521
 
3780
4522
 
4523
+
4524
+
4525
+
4526
+
4527
+
4528
+
4529
+
4530
+
4531
+
4532
+
4533
+
4534
+
4535
+
4536
+
4537
+
4538
+
4539
+
4540
+
4541
+
4542
+
4543
+
4544
+
4545
+
4546
+
4547
+
4548
+
4549
+
4550
+
4551
+
4552
+
4553
+
4554
+
4555
+
4556
+
4557
+
3781
4558
 
3782
4559
 
3783
4560
 
@@ -3910,6 +4687,34 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
3910
4687
 
3911
4688
 
3912
4689
 
4690
+
4691
+
4692
+
4693
+
4694
+
4695
+
4696
+
4697
+
4698
+
4699
+
4700
+
4701
+
4702
+
4703
+
4704
+
4705
+
4706
+
4707
+
4708
+
4709
+
4710
+
4711
+
4712
+
4713
+
4714
+
4715
+
4716
+
4717
+
3913
4718
 
3914
4719
 
3915
4720
 
@@ -4085,6 +4890,110 @@ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]
4085
4890
 
4086
4891
 
4087
4892
 
4893
+
4894
+
4895
+
4896
+
4897
+
4898
+
4899
+
4900
+
4901
+
4902
+
4903
+
4904
+
4905
+
4906
+
4907
+
4908
+
4909
+
4910
+
4911
+
4912
+
4913
+
4914
+ * @example
4915
+ * // Order-statistic on BST
4916
+ * const tree = new TreeMultiMap<number>([30, 10, 50, 20, 40], { enableOrderStatistic: true });
4917
+ * console.log(tree.getByRank(0)); // 10;
4918
+ * console.log(tree.getByRank(4)); // 50;
4919
+ * console.log(tree.getRank(30)); // 2;
4920
+ */
4921
+ // ─── Order-Statistic Methods ───────────────────────────
4922
+
4923
+ getByRank(k: number): [K, V[]] | undefined {
4924
+ const key = this.#core.getByRank(k);
4925
+ if (key === undefined) return undefined;
4926
+ return [key, this.#core.get(key) ?? []];
4927
+ }
4928
+
4929
+ /**
4930
+ * Get the rank of a key in sorted order
4931
+ * @example
4932
+ * // Get the rank of a key in sorted order
4933
+ * const tree = new TreeMultiMap<number>(
4934
+ * [10, 20, 30, 40, 50],
4935
+ * { enableOrderStatistic: true }
4936
+ * );
4937
+ * console.log(tree.getRank(10)); // 0; // smallest → rank 0
4938
+ * console.log(tree.getRank(30)); // 2; // 2 elements before 30 in tree order
4939
+ * console.log(tree.getRank(50)); // 4; // largest → rank 4
4940
+ * console.log(tree.getRank(25)); // 2;
4941
+ */
4942
+ getRank(key: K): number {
4943
+ return this.#core.getRank(key);
4944
+ }
4945
+
4946
+ /**
4947
+ * Get elements by rank range
4948
+
4949
+
4950
+
4951
+
4952
+
4953
+
4954
+
4955
+
4956
+
4957
+ * @example
4958
+ * // Pagination by position in tree order
4959
+ * const tree = new TreeMultiMap<number>(
4960
+ * [10, 20, 30, 40, 50, 60, 70, 80, 90],
4961
+ * { enableOrderStatistic: true }
4962
+ * );
4963
+ * const pageSize = 3;
4964
+ *
4965
+ * // Page 1
4966
+ * console.log(tree.rangeByRank(0, pageSize - 1)); // [10, 20, 30];
4967
+ * // Page 2
4968
+ * console.log(tree.rangeByRank(pageSize, 2 * pageSize - 1)); // [40, 50, 60];
4969
+ * // Page 3
4970
+ * console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
4971
+ */
4972
+ rangeByRank(start: number, end: number): Array<[K, V[]]> {
4973
+ const keys = this.#core.rangeByRank(start, end);
4974
+ return keys
4975
+ .filter((k): k is K => k !== undefined)
4976
+ .map(k => [k, this.#core.get(k) ?? []] as [K, V[]]);
4977
+ }
4978
+
4979
+ /**
4980
+ * Deep copy
4981
+
4982
+
4983
+
4984
+
4985
+
4986
+
4987
+
4988
+
4989
+
4990
+
4991
+
4992
+
4993
+
4994
+
4995
+
4996
+
4088
4997
 
4089
4998
 
4090
4999