data-structure-typed 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/CMakeLists.txt +52 -0
  3. package/README.md +4 -4
  4. package/README_CN.md +5 -5
  5. package/benchmark/report.html +141 -12
  6. package/benchmark/report.json +1969 -38
  7. package/build/CMakeCache.txt +603 -0
  8. package/build/CMakeFiles/4.0.3/CMakeCXXCompiler.cmake +104 -0
  9. package/build/CMakeFiles/4.0.3/CMakeDetermineCompilerABI_CXX.bin +0 -0
  10. package/build/CMakeFiles/4.0.3/CMakeSystem.cmake +15 -0
  11. package/build/CMakeFiles/4.0.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +920 -0
  12. package/build/CMakeFiles/4.0.3/CompilerIdCXX/a.out +0 -0
  13. package/build/CMakeFiles/4.0.3/CompilerIdCXX/apple-sdk.cpp +1 -0
  14. package/build/CMakeFiles/CMakeConfigureLog.yaml +2146 -0
  15. package/build/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  16. package/build/CMakeFiles/InstallScripts.json +9 -0
  17. package/build/CMakeFiles/Makefile.cmake +100 -0
  18. package/build/CMakeFiles/Makefile2 +720 -0
  19. package/build/CMakeFiles/TargetDirectories.txt +23 -0
  20. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/DependInfo.cmake +23 -0
  21. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/build.make +114 -0
  22. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/cmake_clean.cmake +11 -0
  23. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.internal +839 -0
  24. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.make +2506 -0
  25. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/compiler_depend.ts +2 -0
  26. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/depend.make +2 -0
  27. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/flags.make +10 -0
  28. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/link.txt +1 -0
  29. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/progress.make +3 -0
  30. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp.o +0 -0
  31. package/build/CMakeFiles/avl-rb-range-search-benchmark.dir/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp.o.d +835 -0
  32. package/build/CMakeFiles/avl-tree-benchmark.dir/DependInfo.cmake +23 -0
  33. package/build/CMakeFiles/avl-tree-benchmark.dir/build.make +114 -0
  34. package/build/CMakeFiles/avl-tree-benchmark.dir/cmake_clean.cmake +11 -0
  35. package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.internal +839 -0
  36. package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.make +2506 -0
  37. package/build/CMakeFiles/avl-tree-benchmark.dir/compiler_depend.ts +2 -0
  38. package/build/CMakeFiles/avl-tree-benchmark.dir/depend.make +2 -0
  39. package/build/CMakeFiles/avl-tree-benchmark.dir/flags.make +10 -0
  40. package/build/CMakeFiles/avl-tree-benchmark.dir/link.txt +1 -0
  41. package/build/CMakeFiles/avl-tree-benchmark.dir/progress.make +3 -0
  42. package/build/CMakeFiles/avl-tree-benchmark.dir/test/performance/data-structures/binary-tree/avl-tree.test.cpp.o +0 -0
  43. package/build/CMakeFiles/avl-tree-benchmark.dir/test/performance/data-structures/binary-tree/avl-tree.test.cpp.o.d +835 -0
  44. package/build/CMakeFiles/cmake.check_cache +1 -0
  45. package/build/CMakeFiles/deque-benchmark.dir/DependInfo.cmake +23 -0
  46. package/build/CMakeFiles/deque-benchmark.dir/build.make +114 -0
  47. package/build/CMakeFiles/deque-benchmark.dir/cmake_clean.cmake +11 -0
  48. package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.internal +791 -0
  49. package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.make +2362 -0
  50. package/build/CMakeFiles/deque-benchmark.dir/compiler_depend.ts +2 -0
  51. package/build/CMakeFiles/deque-benchmark.dir/depend.make +2 -0
  52. package/build/CMakeFiles/deque-benchmark.dir/flags.make +10 -0
  53. package/build/CMakeFiles/deque-benchmark.dir/link.txt +1 -0
  54. package/build/CMakeFiles/deque-benchmark.dir/progress.make +3 -0
  55. package/build/CMakeFiles/deque-benchmark.dir/test/performance/data-structures/queue/deque.test.cpp.o +0 -0
  56. package/build/CMakeFiles/deque-benchmark.dir/test/performance/data-structures/queue/deque.test.cpp.o.d +787 -0
  57. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/DependInfo.cmake +23 -0
  58. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/build.make +114 -0
  59. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/cmake_clean.cmake +11 -0
  60. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.internal +790 -0
  61. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.make +2359 -0
  62. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/compiler_depend.ts +2 -0
  63. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/depend.make +2 -0
  64. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/flags.make +10 -0
  65. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/link.txt +1 -0
  66. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/progress.make +3 -0
  67. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp.o +0 -0
  68. package/build/CMakeFiles/doubly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp.o.d +786 -0
  69. package/build/CMakeFiles/hash-map-benchmark.dir/DependInfo.cmake +23 -0
  70. package/build/CMakeFiles/hash-map-benchmark.dir/build.make +114 -0
  71. package/build/CMakeFiles/hash-map-benchmark.dir/cmake_clean.cmake +11 -0
  72. package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.internal +790 -0
  73. package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.make +2359 -0
  74. package/build/CMakeFiles/hash-map-benchmark.dir/compiler_depend.ts +2 -0
  75. package/build/CMakeFiles/hash-map-benchmark.dir/depend.make +2 -0
  76. package/build/CMakeFiles/hash-map-benchmark.dir/flags.make +10 -0
  77. package/build/CMakeFiles/hash-map-benchmark.dir/link.txt +1 -0
  78. package/build/CMakeFiles/hash-map-benchmark.dir/progress.make +3 -0
  79. package/build/CMakeFiles/hash-map-benchmark.dir/test/performance/data-structures/hash/hash-map.test.cpp.o +0 -0
  80. package/build/CMakeFiles/hash-map-benchmark.dir/test/performance/data-structures/hash/hash-map.test.cpp.o.d +786 -0
  81. package/build/CMakeFiles/heap-benchmark.dir/DependInfo.cmake +23 -0
  82. package/build/CMakeFiles/heap-benchmark.dir/build.make +114 -0
  83. package/build/CMakeFiles/heap-benchmark.dir/cmake_clean.cmake +11 -0
  84. package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.internal +843 -0
  85. package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.make +2518 -0
  86. package/build/CMakeFiles/heap-benchmark.dir/compiler_depend.ts +2 -0
  87. package/build/CMakeFiles/heap-benchmark.dir/depend.make +2 -0
  88. package/build/CMakeFiles/heap-benchmark.dir/flags.make +10 -0
  89. package/build/CMakeFiles/heap-benchmark.dir/link.txt +1 -0
  90. package/build/CMakeFiles/heap-benchmark.dir/progress.make +3 -0
  91. package/build/CMakeFiles/heap-benchmark.dir/test/performance/data-structures/heap/heap.test.cpp.o +0 -0
  92. package/build/CMakeFiles/heap-benchmark.dir/test/performance/data-structures/heap/heap.test.cpp.o.d +839 -0
  93. package/build/CMakeFiles/priority-queue-benchmark.dir/DependInfo.cmake +23 -0
  94. package/build/CMakeFiles/priority-queue-benchmark.dir/build.make +114 -0
  95. package/build/CMakeFiles/priority-queue-benchmark.dir/cmake_clean.cmake +11 -0
  96. package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.internal +793 -0
  97. package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.make +2368 -0
  98. package/build/CMakeFiles/priority-queue-benchmark.dir/compiler_depend.ts +2 -0
  99. package/build/CMakeFiles/priority-queue-benchmark.dir/depend.make +2 -0
  100. package/build/CMakeFiles/priority-queue-benchmark.dir/flags.make +10 -0
  101. package/build/CMakeFiles/priority-queue-benchmark.dir/link.txt +1 -0
  102. package/build/CMakeFiles/priority-queue-benchmark.dir/progress.make +3 -0
  103. package/build/CMakeFiles/priority-queue-benchmark.dir/test/performance/data-structures/priority-queue/priority-queue.test.cpp.o +0 -0
  104. package/build/CMakeFiles/priority-queue-benchmark.dir/test/performance/data-structures/priority-queue/priority-queue.test.cpp.o.d +789 -0
  105. package/build/CMakeFiles/progress.marks +1 -0
  106. package/build/CMakeFiles/queue-benchmark.dir/DependInfo.cmake +23 -0
  107. package/build/CMakeFiles/queue-benchmark.dir/build.make +114 -0
  108. package/build/CMakeFiles/queue-benchmark.dir/cmake_clean.cmake +11 -0
  109. package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.internal +793 -0
  110. package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.make +2368 -0
  111. package/build/CMakeFiles/queue-benchmark.dir/compiler_depend.ts +2 -0
  112. package/build/CMakeFiles/queue-benchmark.dir/depend.make +2 -0
  113. package/build/CMakeFiles/queue-benchmark.dir/flags.make +10 -0
  114. package/build/CMakeFiles/queue-benchmark.dir/link.txt +1 -0
  115. package/build/CMakeFiles/queue-benchmark.dir/progress.make +3 -0
  116. package/build/CMakeFiles/queue-benchmark.dir/test/performance/data-structures/queue/queue.test.cpp.o +0 -0
  117. package/build/CMakeFiles/queue-benchmark.dir/test/performance/data-structures/queue/queue.test.cpp.o.d +789 -0
  118. package/build/CMakeFiles/red-black-tree-benchmark.dir/DependInfo.cmake +23 -0
  119. package/build/CMakeFiles/red-black-tree-benchmark.dir/build.make +114 -0
  120. package/build/CMakeFiles/red-black-tree-benchmark.dir/cmake_clean.cmake +11 -0
  121. package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.internal +839 -0
  122. package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.make +2506 -0
  123. package/build/CMakeFiles/red-black-tree-benchmark.dir/compiler_depend.ts +2 -0
  124. package/build/CMakeFiles/red-black-tree-benchmark.dir/depend.make +2 -0
  125. package/build/CMakeFiles/red-black-tree-benchmark.dir/flags.make +10 -0
  126. package/build/CMakeFiles/red-black-tree-benchmark.dir/link.txt +1 -0
  127. package/build/CMakeFiles/red-black-tree-benchmark.dir/progress.make +3 -0
  128. package/build/CMakeFiles/red-black-tree-benchmark.dir/test/performance/data-structures/binary-tree/red-black-tree.test.cpp.o +0 -0
  129. package/build/CMakeFiles/red-black-tree-benchmark.dir/test/performance/data-structures/binary-tree/red-black-tree.test.cpp.o.d +835 -0
  130. package/build/CMakeFiles/singly-linked-list-benchmark.dir/DependInfo.cmake +23 -0
  131. package/build/CMakeFiles/singly-linked-list-benchmark.dir/build.make +114 -0
  132. package/build/CMakeFiles/singly-linked-list-benchmark.dir/cmake_clean.cmake +11 -0
  133. package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.internal +790 -0
  134. package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.make +2359 -0
  135. package/build/CMakeFiles/singly-linked-list-benchmark.dir/compiler_depend.ts +2 -0
  136. package/build/CMakeFiles/singly-linked-list-benchmark.dir/depend.make +2 -0
  137. package/build/CMakeFiles/singly-linked-list-benchmark.dir/flags.make +10 -0
  138. package/build/CMakeFiles/singly-linked-list-benchmark.dir/link.txt +1 -0
  139. package/build/CMakeFiles/singly-linked-list-benchmark.dir/progress.make +3 -0
  140. package/build/CMakeFiles/singly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/singly-linked-list.test.cpp.o +0 -0
  141. package/build/CMakeFiles/singly-linked-list-benchmark.dir/test/performance/data-structures/linked-list/singly-linked-list.test.cpp.o.d +786 -0
  142. package/build/CMakeFiles/stack-benchmark.dir/DependInfo.cmake +23 -0
  143. package/build/CMakeFiles/stack-benchmark.dir/build.make +114 -0
  144. package/build/CMakeFiles/stack-benchmark.dir/cmake_clean.cmake +11 -0
  145. package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.internal +793 -0
  146. package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.make +2368 -0
  147. package/build/CMakeFiles/stack-benchmark.dir/compiler_depend.ts +2 -0
  148. package/build/CMakeFiles/stack-benchmark.dir/depend.make +2 -0
  149. package/build/CMakeFiles/stack-benchmark.dir/flags.make +10 -0
  150. package/build/CMakeFiles/stack-benchmark.dir/link.txt +1 -0
  151. package/build/CMakeFiles/stack-benchmark.dir/progress.make +3 -0
  152. package/build/CMakeFiles/stack-benchmark.dir/test/performance/data-structures/stack/stack.test.cpp.o +0 -0
  153. package/build/CMakeFiles/stack-benchmark.dir/test/performance/data-structures/stack/stack.test.cpp.o.d +789 -0
  154. package/build/CMakeFiles/tree-map-benchmark.dir/DependInfo.cmake +23 -0
  155. package/build/CMakeFiles/tree-map-benchmark.dir/build.make +114 -0
  156. package/build/CMakeFiles/tree-map-benchmark.dir/cmake_clean.cmake +11 -0
  157. package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.internal +839 -0
  158. package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.make +2506 -0
  159. package/build/CMakeFiles/tree-map-benchmark.dir/compiler_depend.ts +2 -0
  160. package/build/CMakeFiles/tree-map-benchmark.dir/depend.make +2 -0
  161. package/build/CMakeFiles/tree-map-benchmark.dir/flags.make +10 -0
  162. package/build/CMakeFiles/tree-map-benchmark.dir/link.txt +1 -0
  163. package/build/CMakeFiles/tree-map-benchmark.dir/progress.make +3 -0
  164. package/build/CMakeFiles/tree-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-map.test.cpp.o +0 -0
  165. package/build/CMakeFiles/tree-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-map.test.cpp.o.d +835 -0
  166. package/build/CMakeFiles/tree-multi-map-benchmark.dir/DependInfo.cmake +23 -0
  167. package/build/CMakeFiles/tree-multi-map-benchmark.dir/build.make +114 -0
  168. package/build/CMakeFiles/tree-multi-map-benchmark.dir/cmake_clean.cmake +11 -0
  169. package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.internal +839 -0
  170. package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.make +2506 -0
  171. package/build/CMakeFiles/tree-multi-map-benchmark.dir/compiler_depend.ts +2 -0
  172. package/build/CMakeFiles/tree-multi-map-benchmark.dir/depend.make +2 -0
  173. package/build/CMakeFiles/tree-multi-map-benchmark.dir/flags.make +10 -0
  174. package/build/CMakeFiles/tree-multi-map-benchmark.dir/link.txt +1 -0
  175. package/build/CMakeFiles/tree-multi-map-benchmark.dir/progress.make +3 -0
  176. package/build/CMakeFiles/tree-multi-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp.o +0 -0
  177. package/build/CMakeFiles/tree-multi-map-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp.o.d +835 -0
  178. package/build/CMakeFiles/tree-multi-set-benchmark.dir/DependInfo.cmake +23 -0
  179. package/build/CMakeFiles/tree-multi-set-benchmark.dir/build.make +114 -0
  180. package/build/CMakeFiles/tree-multi-set-benchmark.dir/cmake_clean.cmake +11 -0
  181. package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.internal +839 -0
  182. package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.make +2506 -0
  183. package/build/CMakeFiles/tree-multi-set-benchmark.dir/compiler_depend.ts +2 -0
  184. package/build/CMakeFiles/tree-multi-set-benchmark.dir/depend.make +2 -0
  185. package/build/CMakeFiles/tree-multi-set-benchmark.dir/flags.make +10 -0
  186. package/build/CMakeFiles/tree-multi-set-benchmark.dir/link.txt +1 -0
  187. package/build/CMakeFiles/tree-multi-set-benchmark.dir/progress.make +3 -0
  188. package/build/CMakeFiles/tree-multi-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp.o +0 -0
  189. package/build/CMakeFiles/tree-multi-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp.o.d +835 -0
  190. package/build/CMakeFiles/tree-set-benchmark.dir/DependInfo.cmake +23 -0
  191. package/build/CMakeFiles/tree-set-benchmark.dir/build.make +114 -0
  192. package/build/CMakeFiles/tree-set-benchmark.dir/cmake_clean.cmake +11 -0
  193. package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.internal +839 -0
  194. package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.make +2506 -0
  195. package/build/CMakeFiles/tree-set-benchmark.dir/compiler_depend.ts +2 -0
  196. package/build/CMakeFiles/tree-set-benchmark.dir/depend.make +2 -0
  197. package/build/CMakeFiles/tree-set-benchmark.dir/flags.make +10 -0
  198. package/build/CMakeFiles/tree-set-benchmark.dir/link.txt +1 -0
  199. package/build/CMakeFiles/tree-set-benchmark.dir/progress.make +3 -0
  200. package/build/CMakeFiles/tree-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-set.test.cpp.o +0 -0
  201. package/build/CMakeFiles/tree-set-benchmark.dir/test/performance/data-structures/binary-tree/tree-set.test.cpp.o.d +835 -0
  202. package/build/Makefile +783 -0
  203. package/build/_deps/benchmark-build/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  204. package/build/_deps/benchmark-build/CMakeFiles/progress.marks +1 -0
  205. package/build/_deps/benchmark-build/Makefile +140 -0
  206. package/build/_deps/benchmark-build/benchmark.pc +12 -0
  207. package/build/_deps/benchmark-build/benchmarkConfig.cmake +14 -0
  208. package/build/_deps/benchmark-build/benchmarkConfigVersion.cmake +65 -0
  209. package/build/_deps/benchmark-build/benchmarkTargets.cmake +84 -0
  210. package/build/_deps/benchmark-build/cmake_install.cmake +50 -0
  211. package/build/_deps/benchmark-build/src/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  212. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/DependInfo.cmake +41 -0
  213. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark.cc.o +0 -0
  214. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark.cc.o.d +875 -0
  215. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_api_internal.cc.o +0 -0
  216. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_api_internal.cc.o.d +802 -0
  217. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_name.cc.o +0 -0
  218. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_name.cc.o.d +772 -0
  219. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_register.cc.o +0 -0
  220. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_register.cc.o.d +841 -0
  221. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_runner.cc.o +0 -0
  222. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/benchmark_runner.cc.o.d +833 -0
  223. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/build.make +402 -0
  224. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/check.cc.o +0 -0
  225. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/check.cc.o.d +784 -0
  226. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/cmake_clean.cmake +47 -0
  227. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/cmake_clean_target.cmake +3 -0
  228. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/colorprint.cc.o +0 -0
  229. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/colorprint.cc.o.d +791 -0
  230. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/commandlineflags.cc.o +0 -0
  231. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/commandlineflags.cc.o.d +795 -0
  232. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.internal +15519 -0
  233. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.make +17500 -0
  234. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/compiler_depend.ts +2 -0
  235. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/complexity.cc.o +0 -0
  236. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/complexity.cc.o.d +793 -0
  237. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/console_reporter.cc.o +0 -0
  238. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/console_reporter.cc.o.d +802 -0
  239. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/counter.cc.o +0 -0
  240. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/counter.cc.o.d +773 -0
  241. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/csv_reporter.cc.o +0 -0
  242. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/csv_reporter.cc.o.d +799 -0
  243. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/depend.make +2 -0
  244. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/flags.make +10 -0
  245. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/json_reporter.cc.o +0 -0
  246. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/json_reporter.cc.o.d +800 -0
  247. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/link.txt +2 -0
  248. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/perf_counters.cc.o +0 -0
  249. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/perf_counters.cc.o.d +807 -0
  250. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/progress.make +21 -0
  251. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/reporter.cc.o +0 -0
  252. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/reporter.cc.o.d +798 -0
  253. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/statistics.cc.o +0 -0
  254. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/statistics.cc.o.d +800 -0
  255. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/string_util.cc.o +0 -0
  256. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/string_util.cc.o.d +795 -0
  257. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/sysinfo.cc.o +0 -0
  258. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/sysinfo.cc.o.d +933 -0
  259. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/timers.cc.o +0 -0
  260. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark.dir/timers.cc.o.d +904 -0
  261. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/DependInfo.cmake +23 -0
  262. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/benchmark_main.cc.o +0 -0
  263. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/benchmark_main.cc.o.d +772 -0
  264. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/build.make +114 -0
  265. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/cmake_clean.cmake +11 -0
  266. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/cmake_clean_target.cmake +3 -0
  267. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.internal +776 -0
  268. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.make +2317 -0
  269. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/compiler_depend.ts +2 -0
  270. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/depend.make +2 -0
  271. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/flags.make +10 -0
  272. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/link.txt +2 -0
  273. package/build/_deps/benchmark-build/src/CMakeFiles/benchmark_main.dir/progress.make +3 -0
  274. package/build/_deps/benchmark-build/src/CMakeFiles/progress.marks +1 -0
  275. package/build/_deps/benchmark-build/src/Makefile +710 -0
  276. package/build/_deps/benchmark-build/src/cmake_install.cmake +45 -0
  277. package/build/_deps/benchmark-build/src/libbenchmark.a +0 -0
  278. package/build/_deps/benchmark-build/src/libbenchmark_main.a +0 -0
  279. package/build/_deps/benchmark-src/.clang-format +5 -0
  280. package/build/_deps/benchmark-src/.clang-tidy +7 -0
  281. package/build/_deps/benchmark-src/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  282. package/build/_deps/benchmark-src/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  283. package/build/_deps/benchmark-src/.github/install_bazel.sh +13 -0
  284. package/build/_deps/benchmark-src/.github/libcxx-setup.sh +26 -0
  285. package/build/_deps/benchmark-src/.github/workflows/bazel.yml +35 -0
  286. package/build/_deps/benchmark-src/.github/workflows/build-and-test-min-cmake.yml +46 -0
  287. package/build/_deps/benchmark-src/.github/workflows/build-and-test-perfcounters.yml +51 -0
  288. package/build/_deps/benchmark-src/.github/workflows/build-and-test.yml +114 -0
  289. package/build/_deps/benchmark-src/.github/workflows/clang-format-lint.yml +17 -0
  290. package/build/_deps/benchmark-src/.github/workflows/clang-tidy.yml +38 -0
  291. package/build/_deps/benchmark-src/.github/workflows/doxygen.yml +28 -0
  292. package/build/_deps/benchmark-src/.github/workflows/pylint.yml +28 -0
  293. package/build/_deps/benchmark-src/.github/workflows/sanitizer.yml +96 -0
  294. package/build/_deps/benchmark-src/.github/workflows/test_bindings.yml +29 -0
  295. package/build/_deps/benchmark-src/.github/workflows/wheels.yml +79 -0
  296. package/build/_deps/benchmark-src/.travis.yml +208 -0
  297. package/build/_deps/benchmark-src/.ycm_extra_conf.py +115 -0
  298. package/build/_deps/benchmark-src/AUTHORS +71 -0
  299. package/build/_deps/benchmark-src/BUILD.bazel +87 -0
  300. package/build/_deps/benchmark-src/CMakeLists.txt +340 -0
  301. package/build/_deps/benchmark-src/CONTRIBUTING.md +58 -0
  302. package/build/_deps/benchmark-src/CONTRIBUTORS +95 -0
  303. package/build/_deps/benchmark-src/LICENSE +202 -0
  304. package/build/_deps/benchmark-src/MODULE.bazel +24 -0
  305. package/build/_deps/benchmark-src/README.md +223 -0
  306. package/build/_deps/benchmark-src/WORKSPACE +22 -0
  307. package/build/_deps/benchmark-src/WORKSPACE.bzlmod +2 -0
  308. package/build/_deps/benchmark-src/_config.yml +2 -0
  309. package/build/_deps/benchmark-src/appveyor.yml +50 -0
  310. package/build/_deps/benchmark-src/bazel/benchmark_deps.bzl +65 -0
  311. package/build/_deps/benchmark-src/bindings/python/BUILD +3 -0
  312. package/build/_deps/benchmark-src/bindings/python/build_defs.bzl +25 -0
  313. package/build/_deps/benchmark-src/bindings/python/google_benchmark/BUILD +40 -0
  314. package/build/_deps/benchmark-src/bindings/python/google_benchmark/__init__.py +162 -0
  315. package/build/_deps/benchmark-src/bindings/python/google_benchmark/benchmark.cc +184 -0
  316. package/build/_deps/benchmark-src/bindings/python/google_benchmark/example.py +136 -0
  317. package/build/_deps/benchmark-src/bindings/python/nanobind.BUILD +17 -0
  318. package/build/_deps/benchmark-src/bindings/python/python_headers.BUILD +6 -0
  319. package/build/_deps/benchmark-src/cmake/AddCXXCompilerFlag.cmake +78 -0
  320. package/build/_deps/benchmark-src/cmake/CXXFeatureCheck.cmake +82 -0
  321. package/build/_deps/benchmark-src/cmake/Config.cmake.in +7 -0
  322. package/build/_deps/benchmark-src/cmake/GetGitVersion.cmake +58 -0
  323. package/build/_deps/benchmark-src/cmake/GoogleTest.cmake +58 -0
  324. package/build/_deps/benchmark-src/cmake/GoogleTest.cmake.in +59 -0
  325. package/build/_deps/benchmark-src/cmake/benchmark.pc.in +12 -0
  326. package/build/_deps/benchmark-src/cmake/gnu_posix_regex.cpp +12 -0
  327. package/build/_deps/benchmark-src/cmake/llvm-toolchain.cmake +8 -0
  328. package/build/_deps/benchmark-src/cmake/posix_regex.cpp +14 -0
  329. package/build/_deps/benchmark-src/cmake/pthread_affinity.cpp +16 -0
  330. package/build/_deps/benchmark-src/cmake/split_list.cmake +3 -0
  331. package/build/_deps/benchmark-src/cmake/std_regex.cpp +10 -0
  332. package/build/_deps/benchmark-src/cmake/steady_clock.cpp +7 -0
  333. package/build/_deps/benchmark-src/cmake/thread_safety_attributes.cpp +4 -0
  334. package/build/_deps/benchmark-src/docs/AssemblyTests.md +149 -0
  335. package/build/_deps/benchmark-src/docs/_config.yml +3 -0
  336. package/build/_deps/benchmark-src/docs/assets/images/icon.png +0 -0
  337. package/build/_deps/benchmark-src/docs/assets/images/icon.xcf +0 -0
  338. package/build/_deps/benchmark-src/docs/assets/images/icon_black.png +0 -0
  339. package/build/_deps/benchmark-src/docs/assets/images/icon_black.xcf +0 -0
  340. package/build/_deps/benchmark-src/docs/dependencies.md +13 -0
  341. package/build/_deps/benchmark-src/docs/index.md +12 -0
  342. package/build/_deps/benchmark-src/docs/perf_counters.md +35 -0
  343. package/build/_deps/benchmark-src/docs/platform_specific_build_instructions.md +48 -0
  344. package/build/_deps/benchmark-src/docs/python_bindings.md +34 -0
  345. package/build/_deps/benchmark-src/docs/random_interleaving.md +13 -0
  346. package/build/_deps/benchmark-src/docs/reducing_variance.md +100 -0
  347. package/build/_deps/benchmark-src/docs/releasing.md +41 -0
  348. package/build/_deps/benchmark-src/docs/tools.md +343 -0
  349. package/build/_deps/benchmark-src/docs/user_guide.md +1266 -0
  350. package/build/_deps/benchmark-src/include/benchmark/benchmark.h +1991 -0
  351. package/build/_deps/benchmark-src/include/benchmark/export.h +47 -0
  352. package/build/_deps/benchmark-src/pyproject.toml +50 -0
  353. package/build/_deps/benchmark-src/setup.py +113 -0
  354. package/build/_deps/benchmark-src/src/CMakeLists.txt +170 -0
  355. package/build/_deps/benchmark-src/src/arraysize.h +33 -0
  356. package/build/_deps/benchmark-src/src/benchmark.cc +779 -0
  357. package/build/_deps/benchmark-src/src/benchmark_api_internal.cc +118 -0
  358. package/build/_deps/benchmark-src/src/benchmark_api_internal.h +87 -0
  359. package/build/_deps/benchmark-src/src/benchmark_main.cc +18 -0
  360. package/build/_deps/benchmark-src/src/benchmark_name.cc +59 -0
  361. package/build/_deps/benchmark-src/src/benchmark_register.cc +520 -0
  362. package/build/_deps/benchmark-src/src/benchmark_register.h +109 -0
  363. package/build/_deps/benchmark-src/src/benchmark_runner.cc +497 -0
  364. package/build/_deps/benchmark-src/src/benchmark_runner.h +131 -0
  365. package/build/_deps/benchmark-src/src/check.cc +11 -0
  366. package/build/_deps/benchmark-src/src/check.h +106 -0
  367. package/build/_deps/benchmark-src/src/colorprint.cc +200 -0
  368. package/build/_deps/benchmark-src/src/colorprint.h +33 -0
  369. package/build/_deps/benchmark-src/src/commandlineflags.cc +298 -0
  370. package/build/_deps/benchmark-src/src/commandlineflags.h +133 -0
  371. package/build/_deps/benchmark-src/src/complexity.cc +244 -0
  372. package/build/_deps/benchmark-src/src/complexity.h +55 -0
  373. package/build/_deps/benchmark-src/src/console_reporter.cc +206 -0
  374. package/build/_deps/benchmark-src/src/counter.cc +80 -0
  375. package/build/_deps/benchmark-src/src/counter.h +32 -0
  376. package/build/_deps/benchmark-src/src/csv_reporter.cc +161 -0
  377. package/build/_deps/benchmark-src/src/cycleclock.h +230 -0
  378. package/build/_deps/benchmark-src/src/internal_macros.h +115 -0
  379. package/build/_deps/benchmark-src/src/json_reporter.cc +320 -0
  380. package/build/_deps/benchmark-src/src/log.h +88 -0
  381. package/build/_deps/benchmark-src/src/mutex.h +155 -0
  382. package/build/_deps/benchmark-src/src/perf_counters.cc +282 -0
  383. package/build/_deps/benchmark-src/src/perf_counters.h +200 -0
  384. package/build/_deps/benchmark-src/src/re.h +158 -0
  385. package/build/_deps/benchmark-src/src/reporter.cc +118 -0
  386. package/build/_deps/benchmark-src/src/statistics.cc +209 -0
  387. package/build/_deps/benchmark-src/src/statistics.h +44 -0
  388. package/build/_deps/benchmark-src/src/string_util.cc +254 -0
  389. package/build/_deps/benchmark-src/src/string_util.h +70 -0
  390. package/build/_deps/benchmark-src/src/sysinfo.cc +855 -0
  391. package/build/_deps/benchmark-src/src/thread_manager.h +63 -0
  392. package/build/_deps/benchmark-src/src/thread_timer.h +86 -0
  393. package/build/_deps/benchmark-src/src/timers.cc +272 -0
  394. package/build/_deps/benchmark-src/src/timers.h +48 -0
  395. package/build/_deps/benchmark-src/test/AssemblyTests.cmake +67 -0
  396. package/build/_deps/benchmark-src/test/BUILD +127 -0
  397. package/build/_deps/benchmark-src/test/CMakeLists.txt +309 -0
  398. package/build/_deps/benchmark-src/test/args_product_test.cc +77 -0
  399. package/build/_deps/benchmark-src/test/basic_test.cc +180 -0
  400. package/build/_deps/benchmark-src/test/benchmark_gtest.cc +169 -0
  401. package/build/_deps/benchmark-src/test/benchmark_min_time_flag_iters_test.cc +66 -0
  402. package/build/_deps/benchmark-src/test/benchmark_min_time_flag_time_test.cc +90 -0
  403. package/build/_deps/benchmark-src/test/benchmark_name_gtest.cc +82 -0
  404. package/build/_deps/benchmark-src/test/benchmark_random_interleaving_gtest.cc +126 -0
  405. package/build/_deps/benchmark-src/test/benchmark_setup_teardown_test.cc +157 -0
  406. package/build/_deps/benchmark-src/test/benchmark_test.cc +274 -0
  407. package/build/_deps/benchmark-src/test/clobber_memory_assembly_test.cc +64 -0
  408. package/build/_deps/benchmark-src/test/commandlineflags_gtest.cc +228 -0
  409. package/build/_deps/benchmark-src/test/complexity_test.cc +228 -0
  410. package/build/_deps/benchmark-src/test/cxx03_test.cc +62 -0
  411. package/build/_deps/benchmark-src/test/diagnostics_test.cc +91 -0
  412. package/build/_deps/benchmark-src/test/display_aggregates_only_test.cc +45 -0
  413. package/build/_deps/benchmark-src/test/donotoptimize_assembly_test.cc +201 -0
  414. package/build/_deps/benchmark-src/test/donotoptimize_test.cc +69 -0
  415. package/build/_deps/benchmark-src/test/filter_test.cc +117 -0
  416. package/build/_deps/benchmark-src/test/fixture_test.cc +51 -0
  417. package/build/_deps/benchmark-src/test/internal_threading_test.cc +185 -0
  418. package/build/_deps/benchmark-src/test/link_main_test.cc +9 -0
  419. package/build/_deps/benchmark-src/test/map_test.cc +59 -0
  420. package/build/_deps/benchmark-src/test/memory_manager_test.cc +47 -0
  421. package/build/_deps/benchmark-src/test/min_time_parse_gtest.cc +30 -0
  422. package/build/_deps/benchmark-src/test/multiple_ranges_test.cc +96 -0
  423. package/build/_deps/benchmark-src/test/options_test.cc +77 -0
  424. package/build/_deps/benchmark-src/test/output_test.h +211 -0
  425. package/build/_deps/benchmark-src/test/output_test_helper.cc +519 -0
  426. package/build/_deps/benchmark-src/test/perf_counters_gtest.cc +307 -0
  427. package/build/_deps/benchmark-src/test/perf_counters_test.cc +92 -0
  428. package/build/_deps/benchmark-src/test/register_benchmark_test.cc +196 -0
  429. package/build/_deps/benchmark-src/test/repetitions_test.cc +214 -0
  430. package/build/_deps/benchmark-src/test/report_aggregates_only_test.cc +41 -0
  431. package/build/_deps/benchmark-src/test/reporter_output_test.cc +1130 -0
  432. package/build/_deps/benchmark-src/test/skip_with_error_test.cc +199 -0
  433. package/build/_deps/benchmark-src/test/spec_arg_test.cc +105 -0
  434. package/build/_deps/benchmark-src/test/spec_arg_verbosity_test.cc +43 -0
  435. package/build/_deps/benchmark-src/test/state_assembly_test.cc +68 -0
  436. package/build/_deps/benchmark-src/test/statistics_gtest.cc +35 -0
  437. package/build/_deps/benchmark-src/test/string_util_gtest.cc +199 -0
  438. package/build/_deps/benchmark-src/test/templated_fixture_test.cc +28 -0
  439. package/build/_deps/benchmark-src/test/time_unit_gtest.cc +37 -0
  440. package/build/_deps/benchmark-src/test/user_counters_tabular_test.cc +558 -0
  441. package/build/_deps/benchmark-src/test/user_counters_test.cc +561 -0
  442. package/build/_deps/benchmark-src/test/user_counters_thousands_test.cc +186 -0
  443. package/build/_deps/benchmark-src/tools/BUILD.bazel +19 -0
  444. package/build/_deps/benchmark-src/tools/compare.py +432 -0
  445. package/build/_deps/benchmark-src/tools/gbench/Inputs/test1_run1.json +127 -0
  446. package/build/_deps/benchmark-src/tools/gbench/Inputs/test1_run2.json +127 -0
  447. package/build/_deps/benchmark-src/tools/gbench/Inputs/test2_run.json +81 -0
  448. package/build/_deps/benchmark-src/tools/gbench/Inputs/test3_run0.json +65 -0
  449. package/build/_deps/benchmark-src/tools/gbench/Inputs/test3_run1.json +65 -0
  450. package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run.json +96 -0
  451. package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run0.json +21 -0
  452. package/build/_deps/benchmark-src/tools/gbench/Inputs/test4_run1.json +21 -0
  453. package/build/_deps/benchmark-src/tools/gbench/__init__.py +8 -0
  454. package/build/_deps/benchmark-src/tools/gbench/report.py +1201 -0
  455. package/build/_deps/benchmark-src/tools/gbench/util.py +203 -0
  456. package/build/_deps/benchmark-src/tools/libpfm.BUILD.bazel +22 -0
  457. package/build/_deps/benchmark-src/tools/requirements.txt +2 -0
  458. package/build/_deps/benchmark-src/tools/strip_asm.py +151 -0
  459. package/build/_deps/benchmark-subbuild/CMakeCache.txt +133 -0
  460. package/build/_deps/benchmark-subbuild/CMakeFiles/4.0.3/CMakeSystem.cmake +15 -0
  461. package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeConfigureLog.yaml +11 -0
  462. package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeDirectoryInformation.cmake +16 -0
  463. package/build/_deps/benchmark-subbuild/CMakeFiles/CMakeRuleHashes.txt +11 -0
  464. package/build/_deps/benchmark-subbuild/CMakeFiles/InstallScripts.json +7 -0
  465. package/build/_deps/benchmark-subbuild/CMakeFiles/Makefile.cmake +52 -0
  466. package/build/_deps/benchmark-subbuild/CMakeFiles/Makefile2 +122 -0
  467. package/build/_deps/benchmark-subbuild/CMakeFiles/TargetDirectories.txt +3 -0
  468. package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/DependInfo.cmake +22 -0
  469. package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/Labels.json +46 -0
  470. package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/Labels.txt +14 -0
  471. package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/build.make +162 -0
  472. package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/cmake_clean.cmake +17 -0
  473. package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/compiler_depend.make +2 -0
  474. package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/compiler_depend.ts +2 -0
  475. package/build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate.dir/progress.make +10 -0
  476. package/build/_deps/benchmark-subbuild/CMakeFiles/cmake.check_cache +1 -0
  477. package/build/_deps/benchmark-subbuild/CMakeFiles/progress.marks +1 -0
  478. package/build/_deps/benchmark-subbuild/CMakeLists.txt +42 -0
  479. package/build/_deps/benchmark-subbuild/Makefile +162 -0
  480. package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-gitclone-lastrun.txt +15 -0
  481. package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-gitinfo.txt +15 -0
  482. package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-patch-info.txt +6 -0
  483. package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-update-info.txt +7 -0
  484. package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-cfgcmd.txt +1 -0
  485. package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-gitclone.cmake +87 -0
  486. package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-gitupdate.cmake +317 -0
  487. package/build/_deps/benchmark-subbuild/benchmark-populate-prefix/tmp/benchmark-populate-mkdirs.cmake +27 -0
  488. package/build/_deps/benchmark-subbuild/cmake_install.cmake +56 -0
  489. package/build/bin/avl-rb-range-search-benchmark +0 -0
  490. package/build/bin/avl-tree-benchmark +0 -0
  491. package/build/bin/deque-benchmark +0 -0
  492. package/build/bin/doubly-linked-list-benchmark +0 -0
  493. package/build/bin/hash-map-benchmark +0 -0
  494. package/build/bin/heap-benchmark +0 -0
  495. package/build/bin/priority-queue-benchmark +0 -0
  496. package/build/bin/queue-benchmark +0 -0
  497. package/build/bin/red-black-tree-benchmark +0 -0
  498. package/build/bin/singly-linked-list-benchmark +0 -0
  499. package/build/bin/stack-benchmark +0 -0
  500. package/build/bin/tree-map-benchmark +0 -0
  501. package/build/bin/tree-multi-map-benchmark +0 -0
  502. package/build/bin/tree-multi-set-benchmark +0 -0
  503. package/build/bin/tree-set-benchmark +0 -0
  504. package/build/cmake_install.cmake +66 -0
  505. package/dist/cjs/index.cjs +1270 -1201
  506. package/dist/cjs/index.cjs.map +1 -1
  507. package/dist/cjs-legacy/index.cjs +1309 -1210
  508. package/dist/cjs-legacy/index.cjs.map +1 -1
  509. package/dist/esm/index.mjs +1268 -1196
  510. package/dist/esm/index.mjs.map +1 -1
  511. package/dist/esm-legacy/index.mjs +1307 -1205
  512. package/dist/esm-legacy/index.mjs.map +1 -1
  513. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +3 -3
  514. package/dist/types/data-structures/binary-tree/index.d.ts +3 -3
  515. package/dist/types/data-structures/binary-tree/tree-map.d.ts +177 -0
  516. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +230 -147
  517. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +263 -0
  518. package/dist/types/data-structures/binary-tree/tree-set.d.ts +170 -0
  519. package/dist/types/interfaces/binary-tree.d.ts +1 -1
  520. package/dist/types/types/data-structures/binary-tree/index.d.ts +3 -3
  521. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +28 -0
  522. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +11 -0
  523. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +28 -0
  524. package/dist/umd/data-structure-typed.js +1303 -1194
  525. package/dist/umd/data-structure-typed.js.map +1 -1
  526. package/dist/umd/data-structure-typed.min.js +10 -3
  527. package/dist/umd/data-structure-typed.min.js.map +1 -1
  528. package/eslint.config.mjs +5 -1
  529. package/package.json +4 -3
  530. package/src/data-structures/binary-tree/avl-tree.ts +1 -1
  531. package/src/data-structures/binary-tree/binary-tree.ts +40 -16
  532. package/src/data-structures/binary-tree/bst.ts +6 -6
  533. package/src/data-structures/binary-tree/index.ts +3 -3
  534. package/src/data-structures/binary-tree/red-black-tree.ts +34 -52
  535. package/src/data-structures/binary-tree/tree-map.ts +417 -0
  536. package/src/data-structures/binary-tree/tree-multi-map.ts +467 -325
  537. package/src/data-structures/binary-tree/tree-multi-set.ts +491 -0
  538. package/src/data-structures/binary-tree/tree-set.ts +394 -0
  539. package/src/interfaces/binary-tree.ts +1 -1
  540. package/src/types/data-structures/binary-tree/index.ts +3 -3
  541. package/src/types/data-structures/binary-tree/tree-map.ts +39 -0
  542. package/src/types/data-structures/binary-tree/tree-multi-set.ts +13 -0
  543. package/src/types/data-structures/binary-tree/tree-set.ts +33 -0
  544. package/test/config.ts +2 -2
  545. package/test/performance/benchmark-runner-enhanced.mjs +818 -0
  546. package/test/performance/cmake-benchmark-runner.mjs +234 -0
  547. package/test/performance/data-structures/binary-tree/avl-rb-range-search.test.cpp +112 -0
  548. package/test/performance/data-structures/binary-tree/avl-rb-range-search.test.mjs +51 -0
  549. package/test/performance/data-structures/binary-tree/avl-tree.test.cpp +181 -0
  550. package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +138 -0
  551. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.mjs +85 -0
  552. package/test/performance/data-structures/binary-tree/binary-tree.test.mjs +100 -0
  553. package/test/performance/data-structures/binary-tree/bst.test.mjs +61 -0
  554. package/test/performance/data-structures/binary-tree/red-black-tree-cjs.test.mjs +259 -0
  555. package/test/performance/data-structures/binary-tree/red-black-tree.test.cpp +213 -0
  556. package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +275 -0
  557. package/test/performance/data-structures/binary-tree/tree-map.test.cpp +129 -0
  558. package/test/performance/data-structures/binary-tree/tree-map.test.mjs +171 -0
  559. package/test/performance/data-structures/binary-tree/tree-multi-map.test.cpp +205 -0
  560. package/test/performance/data-structures/binary-tree/tree-multi-map.test.mjs +106 -0
  561. package/test/performance/data-structures/binary-tree/tree-multi-set.test.cpp +217 -0
  562. package/test/performance/data-structures/binary-tree/tree-multi-set.test.mjs +91 -0
  563. package/test/performance/data-structures/binary-tree/tree-set.test.cpp +127 -0
  564. package/test/performance/data-structures/binary-tree/tree-set.test.mjs +174 -0
  565. package/test/performance/data-structures/comparison/{comparison.test.ts → comparison.test.mjs} +17 -17
  566. package/test/performance/data-structures/graph/{directed-graph.test.ts → directed-graph.test.mjs} +4 -4
  567. package/test/performance/data-structures/hash/hash-map.test.cpp +183 -0
  568. package/test/performance/data-structures/hash/hash-map.test.mjs +187 -0
  569. package/test/performance/data-structures/heap/heap.test.cpp +61 -0
  570. package/test/performance/data-structures/heap/heap.test.mjs +31 -0
  571. package/test/performance/data-structures/linked-list/doubly-linked-list.test.cpp +84 -0
  572. package/test/performance/data-structures/linked-list/doubly-linked-list.test.mjs +125 -0
  573. package/test/performance/data-structures/linked-list/singly-linked-list.test.cpp +77 -0
  574. package/test/performance/data-structures/linked-list/singly-linked-list.test.mjs +84 -0
  575. package/test/performance/data-structures/priority-queue/max-priority-queue.test.mjs +40 -0
  576. package/test/performance/data-structures/priority-queue/priority-queue.test.cpp +59 -0
  577. package/test/performance/data-structures/priority-queue/priority-queue.test.mjs +64 -0
  578. package/test/performance/data-structures/queue/deque.test.cpp +119 -0
  579. package/test/performance/data-structures/queue/deque.test.mjs +144 -0
  580. package/test/performance/data-structures/queue/queue.test.cpp +59 -0
  581. package/test/performance/data-structures/queue/queue.test.mjs +77 -0
  582. package/test/performance/data-structures/stack/stack.test.cpp +40 -0
  583. package/test/performance/data-structures/stack/stack.test.mjs +69 -0
  584. package/test/performance/data-structures/trie/trie.test.mjs +43 -0
  585. package/test/performance/reportor-enhanced.mjs +871 -0
  586. package/test/performance/runner-config.json +33 -21
  587. package/test/unit/data-structures/base/iterable-element-base.more-branches.coverage.test.ts +6 -6
  588. package/test/unit/data-structures/base/linear-base.array.coverage.test.ts +5 -5
  589. package/test/unit/data-structures/base/linear-base.concat-else.coverage.test.ts +10 -10
  590. package/test/unit/data-structures/base/linear-base.more-branches.coverage.test.ts +7 -10
  591. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +5 -5
  592. package/test/unit/data-structures/binary-tree/binary-tree.remaining-branches.coverage.test.ts +7 -4
  593. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +7 -7
  594. package/test/unit/data-structures/binary-tree/bst.more-branches-3.coverage.test.ts +1 -1
  595. package/test/unit/data-structures/binary-tree/bst.test.ts +4 -4
  596. package/test/unit/data-structures/binary-tree/overall.test.ts +18 -31
  597. package/test/unit/data-structures/binary-tree/red-black-tree.boundary-max-update.coverage.test.ts +1 -1
  598. package/test/unit/data-structures/binary-tree/red-black-tree.cache-stale-insert.coverage.test.ts +2 -2
  599. package/test/unit/data-structures/binary-tree/red-black-tree.hint-mapmode-defined.coverage.test.ts +4 -4
  600. package/test/unit/data-structures/binary-tree/red-black-tree.hint-mapmode-undefined.coverage.test.ts +5 -5
  601. package/test/unit/data-structures/binary-tree/red-black-tree.hint-more.coverage.test.ts +3 -3
  602. package/test/unit/data-structures/binary-tree/red-black-tree.remaining-branches.coverage.test.ts +2 -2
  603. package/test/unit/data-structures/binary-tree/red-black-tree.set-inputs.coverage.test.ts +1 -1
  604. package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-parent-cache.coverage.test.ts +1 -1
  605. package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-remaining.coverage.test.ts +4 -4
  606. package/test/unit/data-structures/binary-tree/red-black-tree.setkvnode-uncovered.coverage.test.ts +1 -1
  607. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +2 -2
  608. package/test/unit/data-structures/binary-tree/red-black-tree.update-branches.coverage.test.ts +4 -4
  609. package/test/unit/data-structures/binary-tree/tree-map.test.ts +270 -0
  610. package/test/unit/data-structures/binary-tree/tree-multi-map.coverage.test.ts +144 -3
  611. package/test/unit/data-structures/binary-tree/{tree-multi-map.test.ts → tree-multi-map.legacy.test.ts.skip} +16 -16
  612. package/test/unit/data-structures/binary-tree/tree-multi-map.rfc.test.ts +99 -0
  613. package/test/unit/data-structures/binary-tree/tree-multi-map.simplified.test.ts +482 -0
  614. package/test/unit/data-structures/binary-tree/tree-multi-set.test.ts +545 -0
  615. package/test/unit/data-structures/binary-tree/tree-set.test.ts +187 -0
  616. package/test/unit/unrestricted-interconversion.test.ts +12 -10
  617. package/test/utils/patch.ts +3 -3
  618. package/test/utils/perf.mjs +34 -0
  619. package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +0 -236
  620. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +0 -197
  621. package/dist/types/data-structures/binary-tree/tree-counter.d.ts +0 -243
  622. package/dist/types/types/data-structures/binary-tree/avl-tree-counter.d.ts +0 -2
  623. package/dist/types/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +0 -2
  624. package/dist/types/types/data-structures/binary-tree/tree-counter.d.ts +0 -2
  625. package/src/data-structures/binary-tree/avl-tree-counter.ts +0 -539
  626. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +0 -438
  627. package/src/data-structures/binary-tree/tree-counter.ts +0 -587
  628. package/src/types/data-structures/binary-tree/avl-tree-counter.ts +0 -3
  629. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +0 -3
  630. package/src/types/data-structures/binary-tree/tree-counter.ts +0 -3
  631. package/test/performance/benchmark-runner.ts +0 -531
  632. package/test/performance/data-structures/binary-tree/avl-tree.test.ts +0 -40
  633. package/test/performance/data-structures/binary-tree/binary-tree-overall.test.ts +0 -37
  634. package/test/performance/data-structures/binary-tree/binary-tree.test.ts +0 -40
  635. package/test/performance/data-structures/binary-tree/bst.test.ts +0 -28
  636. package/test/performance/data-structures/binary-tree/red-black-tree.test.ts +0 -60
  637. package/test/performance/data-structures/hash/hash-map.test.ts +0 -99
  638. package/test/performance/data-structures/heap/heap.test.ts +0 -26
  639. package/test/performance/data-structures/heap/min-heap.test.ts +0 -0
  640. package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +0 -59
  641. package/test/performance/data-structures/linked-list/linked-list.test.ts +0 -0
  642. package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +0 -35
  643. package/test/performance/data-structures/linked-list/skip-linked-list.test.ts +0 -0
  644. package/test/performance/data-structures/linked-list/skip-list.test.ts +0 -0
  645. package/test/performance/data-structures/matrix/matrix.test.ts +0 -0
  646. package/test/performance/data-structures/matrix/navigator.test.ts +0 -0
  647. package/test/performance/data-structures/priority-queue/max-priority-queue.test.ts +0 -17
  648. package/test/performance/data-structures/priority-queue/min-priority-queue.test.ts +0 -0
  649. package/test/performance/data-structures/priority-queue/priority-queue.test.ts +0 -34
  650. package/test/performance/data-structures/queue/deque.test.ts +0 -59
  651. package/test/performance/data-structures/queue/queue.test.ts +0 -35
  652. package/test/performance/data-structures/stack/stack.test.ts +0 -37
  653. package/test/performance/data-structures/trie/trie.test.ts +0 -18
  654. package/test/performance/reportor.ts +0 -279
  655. package/test/performance/single-suite-runner.ts +0 -72
  656. package/test/performance/types/index.ts +0 -1
  657. package/test/performance/types/reportor.ts +0 -7
  658. package/test/unit/data-structures/binary-tree/avl-tree-counter.more-branches-3.coverage.test.ts +0 -146
  659. package/test/unit/data-structures/binary-tree/avl-tree-counter.more-branches.coverage.test.ts +0 -93
  660. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +0 -878
  661. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.coverage.test.ts +0 -108
  662. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.more-branches-2.coverage.test.ts +0 -85
  663. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +0 -740
  664. package/test/unit/data-structures/binary-tree/tree-counter.coverage.test.ts +0 -115
  665. package/test/unit/data-structures/binary-tree/tree-counter.more-branches.coverage.test.ts +0 -244
  666. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +0 -979
  667. /package/{test/performance/data-structures/binary-tree/binary-index-tree.test.ts → build/_deps/benchmark-subbuild/CMakeFiles/benchmark-populate-complete} +0 -0
  668. /package/{test/performance/data-structures/binary-tree/segment-tree.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-build} +0 -0
  669. /package/{test/performance/data-structures/binary-tree/tree-multimap.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-configure} +0 -0
  670. /package/{test/performance/data-structures/graph/abstract-graph.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-done} +0 -0
  671. /package/{test/performance/data-structures/graph/map-graph.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-download} +0 -0
  672. /package/{test/performance/data-structures/graph/overall.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-install} +0 -0
  673. /package/{test/performance/data-structures/graph/undirected-graph.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-mkdir} +0 -0
  674. /package/{test/performance/data-structures/hash/hash-table.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-patch} +0 -0
  675. /package/{test/performance/data-structures/heap/max-heap.test.ts → build/_deps/benchmark-subbuild/benchmark-populate-prefix/src/benchmark-populate-stamp/benchmark-populate-test} +0 -0
  676. /package/test/unit/data-structures/binary-tree/{tree-multi-map.more-branches-2.coverage.test.ts → tree-multi-map.more-branches-2.coverage.test.ts.skip} +0 -0
@@ -2,187 +2,33 @@
2
2
  * data-structure-typed
3
3
  *
4
4
  * @author Pablo Zeng
5
- * @copyright Copyright (c) 2022 Pablo Zeng <zrwusa@gmail.com>
5
+ * @copyright Copyright (c) 2022 Pablo Zeng
6
6
  * @license MIT License
7
7
  */
8
8
 
9
- import type {
10
- BTNOptKeyOrNull,
11
- ElemOf,
12
- EntryCallback,
13
- FamilyPosition,
14
- RBTNColor,
15
- TreeMultiMapOptions
16
- } from '../../types';
9
+ import type { Comparator, TreeMultiMapOptions } from '../../types';
17
10
  import { RedBlackTree, RedBlackTreeNode } from './red-black-tree';
18
- import { IBinaryTree } from '../../interfaces';
11
+ import { TreeSet } from './tree-set';
19
12
 
20
13
  /**
21
- * Node used by TreeMultiMap; stores the key with a bucket of values (array).
22
- * @remarks Time O(1), Space O(1)
23
- * @template K
24
- * @template V
14
+ * Node type used by TreeMultiMap (alias to RedBlackTreeNode for backward compatibility).
15
+ *
16
+ * @deprecated Direct node manipulation is discouraged. Use TreeMultiMap methods instead.
25
17
  */
26
- export class TreeMultiMapNode<K = any, V = any> {
27
- key: K;
28
- value?: V[];
29
- parent?: TreeMultiMapNode<K, V> = undefined;
30
-
31
- /**
32
- * Create a TreeMultiMap node with an optional value bucket.
33
- * @remarks Time O(1), Space O(1)
34
- * @param key - Key of the node.
35
- * @param [value] - Initial array of values.
36
- * @returns New TreeMultiMapNode instance.
37
- */
38
- constructor(key: K, value: V[] = [], color: RBTNColor = 'BLACK') {
39
- this.key = key;
40
- this.value = value;
41
- this.color = color;
42
- }
43
-
44
- _left?: TreeMultiMapNode<K, V> | null | undefined = undefined;
45
-
46
- /**
47
- * Get the left child pointer.
48
- * @remarks Time O(1), Space O(1)
49
- * @returns Left child node, or null/undefined.
50
- */
51
- get left(): TreeMultiMapNode<K, V> | null | undefined {
52
- return this._left;
53
- }
54
-
55
- /**
56
- * Set the left child and update its parent pointer.
57
- * @remarks Time O(1), Space O(1)
58
- * @param v - New left child node, or null/undefined.
59
- * @returns void
60
- */
61
- set left(v: TreeMultiMapNode<K, V> | null | undefined) {
62
- if (v) {
63
- v.parent = this;
64
- }
65
- this._left = v;
66
- }
67
-
68
- _right?: TreeMultiMapNode<K, V> | null | undefined = undefined;
69
-
70
- /**
71
- * Get the right child pointer.
72
- * @remarks Time O(1), Space O(1)
73
- * @returns Right child node, or null/undefined.
74
- */
75
- get right(): TreeMultiMapNode<K, V> | null | undefined {
76
- return this._right;
77
- }
78
-
79
- /**
80
- * Set the right child and update its parent pointer.
81
- * @remarks Time O(1), Space O(1)
82
- * @param v - New right child node, or null/undefined.
83
- * @returns void
84
- */
85
- set right(v: TreeMultiMapNode<K, V> | null | undefined) {
86
- if (v) {
87
- v.parent = this;
88
- }
89
- this._right = v;
90
- }
91
-
92
- _height: number = 0;
93
-
94
- /**
95
- * Gets the height of the node (used in self-balancing trees).
96
- * @remarks Time O(1), Space O(1)
97
- *
98
- * @returns The height.
99
- */
100
- get height(): number {
101
- return this._height;
102
- }
103
-
104
- /**
105
- * Sets the height of the node.
106
- * @remarks Time O(1), Space O(1)
107
- *
108
- * @param value - The new height.
109
- */
110
- set height(value: number) {
111
- this._height = value;
112
- }
113
-
114
- _color: RBTNColor = 'BLACK';
115
-
116
- /**
117
- * Gets the color of the node (used in Red-Black trees).
118
- * @remarks Time O(1), Space O(1)
119
- *
120
- * @returns The node's color.
121
- */
122
- get color(): RBTNColor {
123
- return this._color;
124
- }
125
-
126
- /**
127
- * Sets the color of the node.
128
- * @remarks Time O(1), Space O(1)
129
- *
130
- * @param value - The new color.
131
- */
132
- set color(value: RBTNColor) {
133
- this._color = value;
134
- }
135
-
136
- _count: number = 1;
137
-
138
- /**
139
- * Gets the count of nodes in the subtree rooted at this node (used in order-statistic trees).
140
- * @remarks Time O(1), Space O(1)
141
- *
142
- * @returns The subtree node count.
143
- */
144
- get count(): number {
145
- return this._count;
146
- }
147
-
148
- /**
149
- * Sets the count of nodes in the subtree.
150
- * @remarks Time O(1), Space O(1)
151
- *
152
- * @param value - The new count.
153
- */
154
- set count(value: number) {
155
- this._count = value;
156
- }
157
-
158
- /**
159
- * Gets the position of the node relative to its parent.
160
- * @remarks Time O(1), Space O(1)
161
- *
162
- * @returns The family position (e.g., 'ROOT', 'LEFT', 'RIGHT').
163
- */
164
- get familyPosition(): FamilyPosition {
165
- if (!this.parent) {
166
- return this.left || this.right ? 'ROOT' : 'ISOLATED';
167
- }
168
-
169
- if (this.parent.left === this) {
170
- return this.left || this.right ? 'ROOT_LEFT' : 'LEFT';
171
- } else if (this.parent.right === this) {
172
- return this.left || this.right ? 'ROOT_RIGHT' : 'RIGHT';
173
- }
174
-
175
- return 'MAL_NODE';
18
+ export class TreeMultiMapNode<K = any, V = any> extends RedBlackTreeNode<K, V[]> {
19
+ constructor(key: K, value: V[] = []) {
20
+ super(key, value);
176
21
  }
177
22
  }
178
23
 
179
24
  /**
180
- * Red-Black Tree–based multimap (key → array of values). Preserves O(log N) updates and supports map-like mode.
181
- * @remarks Time O(1), Space O(1)
182
- * @template K
183
- * @template V
184
- * @template R
25
+ * TreeMultiMap (ordered MultiMap) key → bucket (Array of values).
185
26
  *
27
+ * Semantics (RFC):
28
+ * - Bucketed design: each key appears once; duplicates live in the bucket.
29
+ * - `get(key)` returns a **live** bucket reference.
30
+ * - Default iteration yields bucket entries: `[K, V[]]`.
31
+ * - Navigable operations (`first/last/ceiling/...`) return entry tuples like TreeMap.
186
32
  * @example
187
33
  * // players ranked by score with their equipment
188
34
  * type Equipment = {
@@ -310,7 +156,7 @@ export class TreeMultiMapNode<K = any, V = any> {
310
156
  * isMapMode: false
311
157
  * });
312
158
  *
313
- * const topPlayersEquipments = playerRankings.rangeSearch([8900, 10000], node => playerRankings.get(node));
159
+ * const topPlayersEquipments = playerRankings.rangeSearch([8900, 10000], node => playerRankings.get(node.key));
314
160
  * console.log(topPlayersEquipments); // [
315
161
  * // [
316
162
  * // {
@@ -348,202 +194,498 @@ export class TreeMultiMapNode<K = any, V = any> {
348
194
  * // ]
349
195
  * // ];
350
196
  */
351
- export class TreeMultiMap<K = any, V = any, R = any> extends RedBlackTree<K, V[], R> implements IBinaryTree<K, V[], R> {
197
+ export class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]]> {
198
+ readonly #core: RedBlackTree<K, V[], R>;
199
+ readonly #isDefaultComparator: boolean;
200
+
352
201
  /**
353
- * Create a TreeMultiMap and optionally bulk-insert items.
354
- * @remarks Time O(N log N), Space O(N)
355
- * @param [keysNodesEntriesOrRaws] - Iterable of keys/nodes/entries/raw items to insert.
356
- * @param [options] - Options for TreeMultiMap (comparator, reverse, map mode).
357
- * @returns New TreeMultiMap instance.
202
+ * Creates a new TreeMultiMap.
203
+ * @param keysNodesEntriesOrRaws - Initial entries
204
+ * @param options - Configuration options
205
+ * @remarks Time O(m log m), Space O(m) where m is the number of initial entries
358
206
  */
359
207
  constructor(
360
- keysNodesEntriesOrRaws: Iterable<
361
- K | TreeMultiMapNode<K, V> | [K | null | undefined, V[] | undefined] | null | undefined | R
362
- > = [],
363
- options?: TreeMultiMapOptions<K, V[], R>
208
+ keysNodesEntriesOrRaws: Iterable<K | [K | null | undefined, V[] | undefined] | null | undefined | R> = [],
209
+ options: TreeMultiMapOptions<K, V[], R> = {} as any
364
210
  ) {
365
- super([], { ...options });
366
- if (keysNodesEntriesOrRaws) {
367
- this.setMany(keysNodesEntriesOrRaws);
211
+ const comparator = (options as any).comparator ?? TreeSet.createDefaultComparator<K>();
212
+ this.#isDefaultComparator = (options as any).comparator === undefined;
213
+ this.#core = new RedBlackTree<K, V[], R>([], { ...(options as any), comparator, isMapMode: (options as any).isMapMode });
214
+
215
+ for (const x of keysNodesEntriesOrRaws as any) {
216
+ if (x === null || x === undefined) continue;
217
+ if (Array.isArray(x)) {
218
+ const [k, bucket] = x;
219
+ if (k === null || k === undefined) continue;
220
+ if (bucket !== undefined) {
221
+ // seed bucket (copy)
222
+ this.#core.set(k as K, [...bucket] as V[]);
223
+ } else {
224
+ this.#core.set(k as K, [] as V[]);
225
+ }
226
+ continue;
227
+ }
228
+ // key-only
229
+ this.#core.set(x as K, [] as V[]);
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Validates the key against the default comparator rules.
235
+ * @remarks Time O(1), Space O(1)
236
+ */
237
+ private _validateKey(key: K): void {
238
+ if (!this.#isDefaultComparator) return;
239
+ // reuse TreeSet strict validation (same policy)
240
+ // NOTE: TreeSet._validateKey is private, so we replicate the checks.
241
+ if (typeof key === 'number') {
242
+ if (Number.isNaN(key)) throw new TypeError('TreeMultiMap: NaN is not a valid key');
243
+ return;
368
244
  }
245
+ if (typeof key === 'string') return;
246
+ if (key instanceof Date) {
247
+ if (Number.isNaN(key.getTime())) throw new TypeError('TreeMultiMap: invalid Date key');
248
+ return;
249
+ }
250
+ throw new TypeError('TreeMultiMap: comparator is required for non-number/non-string/non-Date keys');
369
251
  }
370
252
 
371
- override createNode(key: K, value: V[] = []): TreeMultiMapNode<K, V> {
372
- return new TreeMultiMapNode<K, V>(key, this._isMapMode ? [] : value);
253
+ /**
254
+ * Number of distinct keys.
255
+ * @remarks Time O(1), Space O(1)
256
+ */
257
+ get size(): number {
258
+ return this.#core.size;
373
259
  }
374
260
 
375
261
  /**
376
- * Checks if the given item is a `TreeMultiMapNode` instance.
262
+ * Whether the map is empty.
377
263
  * @remarks Time O(1), Space O(1)
378
- *
379
- * @param keyNodeOrEntry - The item to check.
380
- * @returns True if it's a TreeMultiMapNode, false otherwise.
381
264
  */
382
- override isNode(
383
- keyNodeOrEntry: K | TreeMultiMapNode<K, V> | [K | null | undefined, V[] | undefined] | null | undefined
384
- ): keyNodeOrEntry is TreeMultiMapNode<K, V> {
385
- return keyNodeOrEntry instanceof TreeMultiMapNode;
265
+ isEmpty(): boolean {
266
+ return this.size === 0;
386
267
  }
387
268
 
388
- override set(
389
- keyNodeOrEntry: K | TreeMultiMapNode<K, V> | [K | null | undefined, V[] | undefined] | null | undefined
390
- ): boolean;
269
+ /**
270
+ * Removes all entries from the map.
271
+ * @remarks Time O(1), Space O(1)
272
+ */
273
+ clear(): void {
274
+ this.#core.clear();
275
+ }
391
276
 
392
- override set(key: K, value: V): boolean;
277
+ /**
278
+ * Bucket length for a key (missing => 0).
279
+ * @remarks Time O(log n), Space O(1)
280
+ */
281
+ count(key: K): number {
282
+ const b = this.get(key);
283
+ return Array.isArray(b) ? b.length : 0;
284
+ }
393
285
 
394
286
  /**
395
- * Insert a value or a list of values into the multimap. If the key exists, values are appended.
396
- * @remarks Time O(log N + M), Space O(1)
397
- * @param keyNodeOrEntry - Key, node, or [key, values] entry.
398
- * @param [value] - Single value to set when a bare key is provided.
399
- * @returns True if inserted or appended; false if ignored.
287
+ * Total number of values across all buckets bucket.length).
288
+ * @remarks Time O(n), Space O(1)
400
289
  */
401
- override set(
402
- keyNodeOrEntry: K | TreeMultiMapNode<K, V> | [K | null | undefined, V[] | undefined] | null | undefined,
403
- value?: V
404
- ): boolean {
405
- if (this.isRealNode(keyNodeOrEntry)) return super.set(keyNodeOrEntry);
290
+ get totalSize(): number {
291
+ let sum = 0;
292
+ for (const [, bucket] of this) sum += bucket.length;
293
+ return sum;
294
+ }
406
295
 
407
- const _commonAdd = (key?: BTNOptKeyOrNull<K>, values?: V[]) => {
408
- if (key === undefined || key === null) return false;
296
+ /**
297
+ * Whether the map contains the given key.
298
+ * @remarks Time O(log n), Space O(1)
299
+ */
300
+ has(key: K): boolean {
301
+ this._validateKey(key);
302
+ return this.#core.has(key);
303
+ }
409
304
 
410
- const _setToValues = () => {
411
- const existingValues = this.get(key);
412
- if (existingValues !== undefined && values !== undefined) {
413
- for (const value of values) existingValues.push(value);
414
- return true;
415
- }
416
- return false;
417
- };
418
-
419
- const _setByNode = () => {
420
- const existingNode = this.getNode(key);
421
- if (this.isRealNode(existingNode)) {
422
- const existingValues = this.get(existingNode);
423
- if (existingValues === undefined) {
424
- super.set(key, values);
425
- return true;
426
- }
427
- if (values !== undefined) {
428
- for (const value of values) existingValues.push(value);
429
- return true;
430
- } else {
431
- return false;
432
- }
433
- } else {
434
- return super.set(key, values);
435
- }
436
- };
305
+ /**
306
+ * Live bucket reference (do not auto-delete key if bucket becomes empty via mutation).
307
+ * @remarks Time O(log n), Space O(1)
308
+ */
309
+ get(key: K): V[] | undefined {
310
+ this._validateKey(key);
311
+ return this.#core.get(key);
312
+ }
313
+
314
+ /**
315
+ * Append a single value.
316
+ * @remarks Time O(log n), Space O(1)
317
+ */
318
+ add(key: K, value: V): boolean {
319
+ this._validateKey(key);
320
+ const bucket = this.#core.get(key);
321
+ if (bucket) {
322
+ bucket.push(value);
323
+ return true;
324
+ }
325
+ return this.#core.set(key, [value]);
326
+ }
437
327
 
438
- if (this._isMapMode) {
439
- return _setByNode() || _setToValues();
328
+ /**
329
+ * Alias for compatibility with existing TreeMultiMap semantics.
330
+ * @remarks Time O(log n), Space O(1) for single value; O(log n + m) for bucket append
331
+ */
332
+ set(entry: [K | null | undefined, V[] | undefined] | K | null | undefined, value?: V): boolean;
333
+ set(key: K, value: V): boolean;
334
+ set(entry: [K | null | undefined, V[] | undefined] | K | null | undefined, value?: V): boolean {
335
+ if (entry === null || entry === undefined) return false;
336
+ if (Array.isArray(entry)) {
337
+ const [k, bucket] = entry;
338
+ if (k === null || k === undefined) return false;
339
+ if (value !== undefined) return this.add(k as K, value);
340
+ if (bucket === undefined) {
341
+ // ensure key exists
342
+ return this.#core.set(k as K, [] as V[]);
440
343
  }
441
- return _setToValues() || _setByNode();
442
- };
344
+ // append bucket
345
+ const existing = this.#core.get(k as K);
346
+ if (existing) {
347
+ existing.push(...bucket);
348
+ return true;
349
+ }
350
+ return this.#core.set(k as K, [...bucket] as V[]);
351
+ }
352
+ // key-only or key+value
353
+ if (value !== undefined) return this.add(entry as K, value);
354
+ return this.#core.set(entry as K, [] as V[]);
355
+ }
356
+
357
+ /**
358
+ * Deletes a key and its entire bucket.
359
+ * @remarks Time O(log n), Space O(1)
360
+ */
361
+ delete(key: K): boolean {
362
+ this._validateKey(key);
363
+ return this.#core.delete(key).length > 0;
364
+ }
443
365
 
444
- if (this.isEntry(keyNodeOrEntry)) {
445
- const [key, values] = keyNodeOrEntry;
446
- return _commonAdd(key, value !== undefined ? [value] : values);
366
+ /**
367
+ * Check if a specific value exists in a key's bucket.
368
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
369
+ */
370
+ hasEntry(key: K, value: V, eq: (a: V, b: V) => boolean = Object.is): boolean {
371
+ const bucket = this.get(key);
372
+ if (!Array.isArray(bucket)) return false;
373
+ return bucket.some(v => eq(v, value));
374
+ }
375
+
376
+ /**
377
+ * Delete a single occurrence of a value from a key's bucket.
378
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
379
+ */
380
+ deleteValue(key: K, value: V, eq: (a: V, b: V) => boolean = Object.is): boolean {
381
+ const bucket = this.get(key);
382
+ if (!Array.isArray(bucket)) return false;
383
+ const idx = bucket.findIndex(v => eq(v, value));
384
+ if (idx === -1) return false;
385
+ bucket.splice(idx, 1);
386
+ if (bucket.length === 0) this.delete(key);
387
+ return true;
388
+ }
389
+
390
+ /**
391
+ * Delete all occurrences of a value from a key's bucket.
392
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
393
+ */
394
+ deleteValues(key: K, value: V, eq: (a: V, b: V) => boolean = Object.is): number {
395
+ const bucket = this.get(key);
396
+ if (!Array.isArray(bucket) || bucket.length === 0) return 0;
397
+ let removed = 0;
398
+ for (let i = bucket.length - 1; i >= 0; i--) {
399
+ if (eq(bucket[i] as V, value)) {
400
+ bucket.splice(i, 1);
401
+ removed++;
402
+ }
447
403
  }
404
+ if (bucket.length === 0 && removed > 0) this.delete(key);
405
+ return removed;
406
+ }
407
+
408
+ // ---- iteration (bucket view) ----
409
+
410
+ /**
411
+ * Iterates over all entries as [key, bucket] pairs.
412
+ * @remarks Time O(n), Space O(1)
413
+ */
414
+ *[Symbol.iterator](): Iterator<[K, V[]]> {
415
+ for (const [k, v] of this.#core) {
416
+ // core always stores buckets, but guard anyway
417
+ yield [k, v ?? ([] as V[])];
418
+ }
419
+ }
448
420
 
449
- return _commonAdd(keyNodeOrEntry, value !== undefined ? [value] : undefined);
421
+ /**
422
+ * Iterates over all keys.
423
+ * @remarks Time O(n), Space O(1)
424
+ */
425
+ *keys(): IterableIterator<K> {
426
+ yield* this.#core.keys();
450
427
  }
451
428
 
452
429
  /**
453
- * Delete a single value from the bucket at a given key. Removes the key if the bucket becomes empty.
454
- * @remarks Time O(log N), Space O(1)
455
- * @param keyNodeOrEntry - Key, node, or [key, values] entry to locate the bucket.
456
- * @param value - Value to remove from the bucket.
457
- * @returns True if the value was removed; false if not found.
430
+ * Iterates over all buckets.
431
+ * @remarks Time O(n), Space O(1)
458
432
  */
459
- deleteValue(
460
- keyNodeOrEntry: K | TreeMultiMapNode<K, V> | [K | null | undefined, V[] | undefined] | null | undefined,
461
- value: V
462
- ): boolean {
463
- const values = this.get(keyNodeOrEntry);
464
- if (Array.isArray(values)) {
465
- const index = values.indexOf(value);
466
- if (index === -1) return false;
467
- values.splice(index, 1);
433
+ *values(): IterableIterator<V[]> {
434
+ for (const [, bucket] of this) yield bucket;
435
+ }
468
436
 
469
- if (values.length === 0) this.delete(keyNodeOrEntry);
437
+ // ---- entry-flat views ----
470
438
 
471
- return true;
439
+ /**
440
+ * Iterates over all entries for a specific key.
441
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
442
+ */
443
+ *entriesOf(key: K): IterableIterator<[K, V]> {
444
+ const bucket = this.get(key);
445
+ if (!Array.isArray(bucket)) return;
446
+ for (const v of bucket) yield [key, v];
447
+ }
448
+
449
+ /**
450
+ * Iterates over all values for a specific key.
451
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
452
+ */
453
+ *valuesOf(key: K): IterableIterator<V> {
454
+ const bucket = this.get(key);
455
+ if (!Array.isArray(bucket)) return;
456
+ yield* bucket;
457
+ }
458
+
459
+ /**
460
+ * Iterates over all [key, value] pairs (flattened from buckets).
461
+ * @remarks Time O(T), Space O(1) where T is totalSize
462
+ */
463
+ *flatEntries(): IterableIterator<[K, V]> {
464
+ for (const [k, bucket] of this) {
465
+ for (const v of bucket) yield [k, v];
472
466
  }
473
- return false;
474
467
  }
475
468
 
476
- override map<MK = K, MVArr extends unknown[] = V[], MR = any>(
477
- callback: EntryCallback<K, V[] | undefined, [MK, MVArr]>,
478
- options?: Partial<TreeMultiMapOptions<MK, MVArr, MR>>,
479
- thisArg?: unknown
480
- ): TreeMultiMap<MK, ElemOf<MVArr>, MR>;
469
+ // ━━━ Navigable methods (return [K, V[]] | undefined) ━━━
481
470
 
482
- override map<MK = K, MV = V[], MR = any>(
483
- callback: EntryCallback<K, V[] | undefined, [MK, MV]>,
484
- options?: Partial<TreeMultiMapOptions<MK, MV, MR>>,
485
- thisArg?: unknown
486
- ): RedBlackTree<MK, MV, MR>;
471
+ /**
472
+ * Returns the entry with the smallest key.
473
+ * @remarks Time O(log n), Space O(1)
474
+ * @example
475
+ * const map = new TreeMultiMap([[1, ['a']], [2, ['b']]]);
476
+ * map.first(); // [1, ['a']]
477
+ */
478
+ first(): [K, V[]] | undefined {
479
+ const k = this.#core.getLeftMost();
480
+ if (k === undefined) return undefined;
481
+ const b = this.get(k);
482
+ return b === undefined ? undefined : [k, b];
483
+ }
484
+
485
+ /**
486
+ * Returns the entry with the largest key.
487
+ * @remarks Time O(log n), Space O(1)
488
+ * @example
489
+ * const map = new TreeMultiMap([[1, ['a']], [2, ['b']]]);
490
+ * map.last(); // [2, ['b']]
491
+ */
492
+ last(): [K, V[]] | undefined {
493
+ const k = this.#core.getRightMost();
494
+ if (k === undefined) return undefined;
495
+ const b = this.get(k);
496
+ return b === undefined ? undefined : [k, b];
497
+ }
487
498
 
488
499
  /**
489
- * Create a new tree by mapping each [key, values] bucket.
490
- * @remarks Time O(N log N), Space O(N)
491
- * @template MK
492
- * @template MV
493
- * @template MR
494
- * @param callback - Function mapping (key, values, index, tree) → [newKey, newValue].
495
- * @param [options] - Options for the output tree.
496
- * @param [thisArg] - Value for `this` inside the callback.
497
- * @returns A new RedBlackTree (or TreeMultiMap when mapping to array values; see overloads).
500
+ * Removes and returns the entry with the smallest key.
501
+ * @remarks Time O(log n), Space O(1)
502
+ * @example
503
+ * const map = new TreeMultiMap([[1, ['a']], [2, ['b']]]);
504
+ * map.pollFirst(); // [1, ['a']]
505
+ * map.has(1); // false
498
506
  */
499
- override map<MK, MV, MR extends object>(
500
- callback: EntryCallback<K, V[] | undefined, [MK, MV]>,
501
- options?: Partial<TreeMultiMapOptions<MK, MV, MR>>,
502
- thisArg?: unknown
503
- ): RedBlackTree<MK, MV, MR> {
504
- const out = this._createLike<MK, MV, MR>([], options);
505
- let i = 0;
506
- for (const [k, v] of this) out.set(callback.call(thisArg, v, k, i++, this));
507
- return out;
507
+ pollFirst(): [K, V[]] | undefined {
508
+ const e = this.first();
509
+ if (!e) return undefined;
510
+ this.delete(e[0]);
511
+ return e;
508
512
  }
509
513
 
510
514
  /**
511
- * (Protected) Create an empty instance of the same concrete class.
515
+ * Removes and returns the entry with the largest key.
516
+ * @remarks Time O(log n), Space O(1)
517
+ * @example
518
+ * const map = new TreeMultiMap([[1, ['a']], [2, ['b']]]);
519
+ * map.pollLast(); // [2, ['b']]
520
+ * map.has(2); // false
521
+ */
522
+ pollLast(): [K, V[]] | undefined {
523
+ const e = this.last();
524
+ if (!e) return undefined;
525
+ this.delete(e[0]);
526
+ return e;
527
+ }
528
+
529
+ /**
530
+ * Returns the entry with the smallest key >= given key.
531
+ * @remarks Time O(log n), Space O(1)
532
+ * @example
533
+ * const map = new TreeMultiMap([[10, ['a']], [20, ['b']], [30, ['c']]]);
534
+ * map.ceiling(15); // [20, ['b']]
535
+ * map.ceiling(20); // [20, ['b']]
536
+ */
537
+ ceiling(key: K): [K, V[]] | undefined {
538
+ this._validateKey(key);
539
+ const k = this.#core.ceiling(key);
540
+ if (k === undefined) return undefined;
541
+ const b = this.get(k);
542
+ return b === undefined ? undefined : [k, b];
543
+ }
544
+
545
+ /**
546
+ * Returns the entry with the largest key <= given key.
547
+ * @remarks Time O(log n), Space O(1)
548
+ * @example
549
+ * const map = new TreeMultiMap([[10, ['a']], [20, ['b']], [30, ['c']]]);
550
+ * map.floor(25); // [20, ['b']]
551
+ * map.floor(20); // [20, ['b']]
552
+ */
553
+ floor(key: K): [K, V[]] | undefined {
554
+ this._validateKey(key);
555
+ const k = this.#core.floor(key);
556
+ if (k === undefined) return undefined;
557
+ const b = this.get(k);
558
+ return b === undefined ? undefined : [k, b];
559
+ }
560
+
561
+ /**
562
+ * Returns the entry with the smallest key > given key.
563
+ * @remarks Time O(log n), Space O(1)
564
+ * @example
565
+ * const map = new TreeMultiMap([[10, ['a']], [20, ['b']], [30, ['c']]]);
566
+ * map.higher(10); // [20, ['b']]
567
+ * map.higher(15); // [20, ['b']]
568
+ */
569
+ higher(key: K): [K, V[]] | undefined {
570
+ this._validateKey(key);
571
+ const k = this.#core.higher(key);
572
+ if (k === undefined) return undefined;
573
+ const b = this.get(k);
574
+ return b === undefined ? undefined : [k, b];
575
+ }
576
+
577
+ /**
578
+ * Returns the entry with the largest key < given key.
579
+ * @remarks Time O(log n), Space O(1)
580
+ * @example
581
+ * const map = new TreeMultiMap([[10, ['a']], [20, ['b']], [30, ['c']]]);
582
+ * map.lower(20); // [10, ['a']]
583
+ * map.lower(15); // [10, ['a']]
584
+ */
585
+ lower(key: K): [K, V[]] | undefined {
586
+ this._validateKey(key);
587
+ const k = this.#core.lower(key);
588
+ if (k === undefined) return undefined;
589
+ const b = this.get(k);
590
+ return b === undefined ? undefined : [k, b];
591
+ }
592
+
593
+ // ━━━ Tree utilities ━━━
594
+
595
+ /**
596
+ * Prints the internal tree structure (for debugging).
597
+ * @remarks Time O(n), Space O(n)
598
+ */
599
+ print(...args: any[]): void {
600
+ return (this.#core as any).print(...args);
601
+ }
602
+
603
+ /**
604
+ * Executes a callback for each entry.
605
+ * @remarks Time O(n), Space O(1)
606
+ */
607
+ forEach(callback: (value: V[], key: K, map: this) => void): void {
608
+ for (const [k, v] of this) {
609
+ callback(v, k, this);
610
+ }
611
+ }
612
+
613
+ /**
614
+ * Creates a new map with entries that pass the predicate.
615
+ * @remarks Time O(n), Space O(n)
616
+ */
617
+ filter(predicate: (value: V[], key: K, map: this) => boolean): TreeMultiMap<K, V, R> {
618
+ const filtered: [K, V[]][] = [];
619
+ for (const [k, v] of this) {
620
+ if (predicate(v, k, this)) filtered.push([k, v]);
621
+ }
622
+ return new TreeMultiMap<K, V, R>(filtered, { comparator: this.comparator as any });
623
+ }
624
+
625
+ /**
626
+ * Creates a new map by transforming each entry.
627
+ * @remarks Time O(n log n), Space O(n)
628
+ */
629
+ map<V2>(
630
+ mapper: (value: V[], key: K, map: this) => [K, V2[]]
631
+ ): TreeMultiMap<K, V2, R> {
632
+ const mapped: [K, V2[]][] = [];
633
+ for (const [k, v] of this) {
634
+ mapped.push(mapper(v, k, this));
635
+ }
636
+ return new TreeMultiMap<K, V2, R>(mapped, { comparator: this.comparator as any });
637
+ }
638
+
639
+ /**
640
+ * Reduces all entries to a single value.
641
+ * @remarks Time O(n), Space O(1)
642
+ */
643
+ reduce<U>(callback: (accumulator: U, value: V[], key: K, map: this) => U, initialValue: U): U {
644
+ let acc = initialValue;
645
+ for (const [k, v] of this) {
646
+ acc = callback(acc, v, k, this);
647
+ }
648
+ return acc;
649
+ }
650
+
651
+ /**
652
+ * Sets multiple entries at once.
653
+ * @remarks Time O(m log n), Space O(m) where m is input size
654
+ */
655
+ setMany(keysNodesEntriesOrRaws: Iterable<any>): boolean[] {
656
+ const results: boolean[] = [];
657
+ for (const x of keysNodesEntriesOrRaws) {
658
+ // Call implementation directly: entry can be K or [K, V[]] or [K, undefined]
659
+ results.push(this.set(x as any, undefined as any));
660
+ }
661
+ return results;
662
+ }
663
+
664
+ /**
665
+ * Searches for entries within a key range.
666
+ * @remarks Time O(log n + k), Space O(k) where k is result size
667
+ */
668
+ rangeSearch<C extends (node: RedBlackTreeNode<K, V[]>) => any>(
669
+ range: any,
670
+ callback?: C,
671
+ isBalanced?: any
672
+ ): ReturnType<C>[] {
673
+ return this.#core.rangeSearch(range, callback as any, isBalanced);
674
+ }
675
+
676
+ /**
677
+ * Creates a shallow clone of this map.
678
+ * @remarks Time O(n log n), Space O(n)
679
+ */
680
+ clone(): TreeMultiMap<K, V, R> {
681
+ return new TreeMultiMap<K, V, R>(this, { comparator: this.comparator as any, isMapMode: (this.#core as any)._isMapMode });
682
+ }
683
+
684
+ /**
685
+ * Expose comparator for advanced usage/testing (read-only).
512
686
  * @remarks Time O(1), Space O(1)
513
- * @template TK
514
- * @template TV
515
- * @template TR
516
- * @param [options] - Optional constructor options for the like-kind instance.
517
- * @returns An empty like-kind instance.
518
- */
519
- protected override _createInstance<TK = K, TV = V, TR = R>(options?: Partial<TreeMultiMapOptions<TK, TV, TR>>): this {
520
- const Ctor = this.constructor as unknown as new (
521
- iter?: Iterable<TK | RedBlackTreeNode<TK, TV> | [TK | null | undefined, TV | undefined] | null | undefined | TR>,
522
- opts?: TreeMultiMapOptions<TK, TV, TR>
523
- ) => RedBlackTree<TK, TV, TR>;
524
- return new Ctor([], { ...(this._snapshotOptions?.<TK, TV, TR>() ?? {}), ...(options ?? {}) }) as unknown as this;
525
- }
526
-
527
- /**
528
- * (Protected) Create a like-kind instance and seed it from an iterable.
529
- * @remarks Time O(N log N), Space O(N)
530
- * @template TK
531
- * @template TV
532
- * @template TR
533
- * @param iter - Iterable used to seed the new tree.
534
- * @param [options] - Options merged with the current snapshot.
535
- * @returns A like-kind RedBlackTree built from the iterable.
536
- */
537
- protected override _createLike<TK = K, TV = V, TR = R>(
538
- iter: Iterable<
539
- TK | RedBlackTreeNode<TK, TV> | [TK | null | undefined, TV | undefined] | null | undefined | TR
540
- > = [],
541
- options?: Partial<TreeMultiMapOptions<TK, TV, TR>>
542
- ): RedBlackTree<TK, TV, TR> {
543
- const Ctor = this.constructor as unknown as new (
544
- iter?: Iterable<TK | RedBlackTreeNode<TK, TV> | [TK | null | undefined, TV | undefined] | null | undefined | TR>,
545
- opts?: TreeMultiMapOptions<TK, TV, TR>
546
- ) => RedBlackTree<TK, TV, TR>;
547
- return new Ctor(iter, { ...(this._snapshotOptions?.<TK, TV, TR>() ?? {}), ...(options ?? {}) });
687
+ */
688
+ get comparator(): Comparator<K> {
689
+ return (this.#core as any)._comparator;
548
690
  }
549
691
  }