pigeonhole-db 1.1.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 (1256) hide show
  1. checksums.yaml +7 -0
  2. data/Cargo.lock +899 -0
  3. data/Cargo.toml +45 -0
  4. data/LICENSE +21 -0
  5. data/README.md +22 -0
  6. data/extconf.rb +12 -0
  7. data/lib/pigeonhole/api.rb +615 -0
  8. data/lib/pigeonhole/index.rb +208 -0
  9. data/lib/pigeonhole/memory.rb +507 -0
  10. data/lib/pigeonhole/version.rb +6 -0
  11. data/lib/pigeonhole-db.rb +6 -0
  12. data/lib/pigeonhole.rb +47 -0
  13. data/sig/pigeonhole.rbs +1484 -0
  14. data/src/budget.rs +205 -0
  15. data/src/classes.rs +279 -0
  16. data/src/convert.rs +192 -0
  17. data/src/db.rs +685 -0
  18. data/src/error.rs +151 -0
  19. data/src/feed.rs +316 -0
  20. data/src/fork.rs +64 -0
  21. data/src/gvl.rs +112 -0
  22. data/src/index.rs +1157 -0
  23. data/src/lib.rs +534 -0
  24. data/src/memory.rs +2178 -0
  25. data/src/read.rs +312 -0
  26. data/src/table.rs +1161 -0
  27. data/src/vector.rs +262 -0
  28. data/src/walk.rs +406 -0
  29. data/vendor/bundle/ruby/3.4.0/bin/minitest +29 -0
  30. data/vendor/bundle/ruby/3.4.0/bin/rake +29 -0
  31. data/vendor/bundle/ruby/3.4.0/bin/rake-compiler +29 -0
  32. data/vendor/bundle/ruby/3.4.0/bin/rake-compiler-dock +29 -0
  33. data/vendor/bundle/ruby/3.4.0/bin/rb-sys-dock +29 -0
  34. data/vendor/bundle/ruby/3.4.0/bin/rbs +29 -0
  35. data/vendor/bundle/ruby/3.4.0/cache/drb-2.2.3.gem +0 -0
  36. data/vendor/bundle/ruby/3.4.0/cache/logger-1.7.0.gem +0 -0
  37. data/vendor/bundle/ruby/3.4.0/cache/minitest-6.0.6.gem +0 -0
  38. data/vendor/bundle/ruby/3.4.0/cache/prism-1.9.0.gem +0 -0
  39. data/vendor/bundle/ruby/3.4.0/cache/rake-13.4.2.gem +0 -0
  40. data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-1.3.2.gem +0 -0
  41. data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-dock-1.12.0.gem +0 -0
  42. data/vendor/bundle/ruby/3.4.0/cache/rb_sys-0.9.130.gem +0 -0
  43. data/vendor/bundle/ruby/3.4.0/cache/rbs-4.2.0.gem +0 -0
  44. data/vendor/bundle/ruby/3.4.0/cache/toml-rb-6.0.0.gem +0 -0
  45. data/vendor/bundle/ruby/3.4.0/cache/tsort-0.2.0.gem +0 -0
  46. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem.build_complete +0 -0
  47. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem_make.out +44 -0
  48. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/mkmf.log +74 -0
  49. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/prism/prism.so +0 -0
  50. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem.build_complete +0 -0
  51. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem_make.out +41 -0
  52. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/mkmf.log +102 -0
  53. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/rbs_extension.so +0 -0
  54. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/LICENSE.txt +22 -0
  55. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/drb.gemspec +42 -0
  56. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/acl.rb +239 -0
  57. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/drb.rb +1993 -0
  58. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/eq.rb +15 -0
  59. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extserv.rb +44 -0
  60. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extservm.rb +94 -0
  61. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/gw.rb +161 -0
  62. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/observer.rb +26 -0
  63. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/ssl.rb +354 -0
  64. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/timeridconv.rb +97 -0
  65. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/unix.rb +118 -0
  66. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/version.rb +3 -0
  67. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/weakidconv.rb +31 -0
  68. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb.rb +3 -0
  69. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/BSDL +22 -0
  70. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/COPYING +56 -0
  71. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/README.md +104 -0
  72. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/errors.rb +9 -0
  73. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/formatter.rb +36 -0
  74. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/log_device.rb +265 -0
  75. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/period.rb +47 -0
  76. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/severity.rb +38 -0
  77. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/version.rb +5 -0
  78. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger.rb +789 -0
  79. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/History.rdoc +1860 -0
  80. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Manifest.txt +41 -0
  81. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/README.rdoc +763 -0
  82. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Rakefile +89 -0
  83. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/bin/minitest +5 -0
  84. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/design_rationale.rb +54 -0
  85. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/hoe/minitest.rb +30 -0
  86. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/assertions.rb +821 -0
  87. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/autorun.rb +5 -0
  88. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/benchmark.rb +452 -0
  89. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/bisect.rb +304 -0
  90. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/complete.rb +56 -0
  91. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/compress.rb +94 -0
  92. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/error_on_warning.rb +11 -0
  93. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/expectations.rb +321 -0
  94. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/find_minimal_combination.rb +127 -0
  95. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/hell.rb +11 -0
  96. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/manual_plugins.rb +4 -0
  97. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/parallel.rb +72 -0
  98. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/path_expander.rb +432 -0
  99. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride.rb +4 -0
  100. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride_plugin.rb +135 -0
  101. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server.rb +49 -0
  102. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server_plugin.rb +88 -0
  103. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/spec.rb +324 -0
  104. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint.rb +105 -0
  105. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint_plugin.rb +39 -0
  106. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test.rb +232 -0
  107. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test_task.rb +331 -0
  108. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest.rb +1232 -0
  109. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/metametameta.rb +150 -0
  110. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_bisect.rb +249 -0
  111. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_find_minimal_combination.rb +138 -0
  112. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_assertions.rb +1729 -0
  113. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_benchmark.rb +151 -0
  114. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_reporter.rb +437 -0
  115. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_spec.rb +1095 -0
  116. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test.rb +1295 -0
  117. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test_task.rb +57 -0
  118. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_path_expander.rb +229 -0
  119. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_server.rb +146 -0
  120. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/BSDmakefile +58 -0
  121. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CHANGELOG.md +786 -0
  122. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CODE_OF_CONDUCT.md +76 -0
  123. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CONTRIBUTING.md +58 -0
  124. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/LICENSE.md +7 -0
  125. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/Makefile +116 -0
  126. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/README.md +143 -0
  127. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/config.yml +4739 -0
  128. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/build_system.md +119 -0
  129. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/configuration.md +68 -0
  130. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/cruby_compilation.md +27 -0
  131. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/design.md +53 -0
  132. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/encoding.md +121 -0
  133. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/fuzzing.md +88 -0
  134. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/heredocs.md +36 -0
  135. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/javascript.md +118 -0
  136. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/local_variable_depth.md +229 -0
  137. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/mapping.md +117 -0
  138. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parser_translation.md +24 -0
  139. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parsing_rules.md +22 -0
  140. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/releasing.md +75 -0
  141. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/relocation.md +34 -0
  142. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ripper_translation.md +63 -0
  143. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_api.md +45 -0
  144. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_parser_translation.md +19 -0
  145. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/serialization.md +233 -0
  146. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/testing.md +55 -0
  147. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/Makefile +273 -0
  148. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_node.c +6945 -0
  149. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_pack.c +276 -0
  150. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extconf.rb +127 -0
  151. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.c +1427 -0
  152. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.h +19 -0
  153. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/ast.h +8254 -0
  154. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/defines.h +260 -0
  155. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/diagnostic.h +458 -0
  156. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/encoding.h +283 -0
  157. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/node.h +129 -0
  158. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/options.h +488 -0
  159. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/pack.h +163 -0
  160. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/parser.h +936 -0
  161. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/prettyprint.h +34 -0
  162. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/regexp.h +43 -0
  163. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/static_literals.h +121 -0
  164. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +236 -0
  165. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_char.h +204 -0
  166. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +218 -0
  167. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +130 -0
  168. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_list.h +103 -0
  169. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +29 -0
  170. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +113 -0
  171. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_string.h +200 -0
  172. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +32 -0
  173. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +46 -0
  174. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/version.h +29 -0
  175. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism.h +408 -0
  176. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/compiler.rb +801 -0
  177. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +392 -0
  178. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +2210 -0
  179. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +4767 -0
  180. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dsl.rb +1003 -0
  181. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/ffi.rb +578 -0
  182. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +2393 -0
  183. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +911 -0
  184. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +772 -0
  185. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node.rb +19966 -0
  186. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node_ext.rb +511 -0
  187. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pack.rb +230 -0
  188. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +188 -0
  189. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +66 -0
  190. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +155 -0
  191. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result.rb +907 -0
  192. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pattern.rb +269 -0
  193. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +15 -0
  194. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +13 -0
  195. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +14 -0
  196. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +14 -0
  197. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +36 -0
  198. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
  199. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/reflection.rb +416 -0
  200. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/relocation.rb +505 -0
  201. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/serialize.rb +2400 -0
  202. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/string_query.rb +31 -0
  203. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +62 -0
  204. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +2234 -0
  205. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +820 -0
  206. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +376 -0
  207. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +26 -0
  208. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +36 -0
  209. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +53 -0
  210. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +135 -0
  211. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +126 -0
  212. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +5 -0
  213. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +3520 -0
  214. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +1964 -0
  215. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation.rb +18 -0
  216. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/visitor.rb +813 -0
  217. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism.rb +98 -0
  218. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/prism.gemspec +172 -0
  219. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +12 -0
  220. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +524 -0
  221. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +12 -0
  222. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node.rbi +8750 -0
  223. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +107 -0
  224. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +404 -0
  225. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +58 -0
  226. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +12 -0
  227. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +11 -0
  228. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +23 -0
  229. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +15 -0
  230. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +473 -0
  231. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism.rbi +63 -0
  232. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/compiler.rbs +9 -0
  233. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +19 -0
  234. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +6 -0
  235. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dsl.rbs +351 -0
  236. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +22 -0
  237. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +10 -0
  238. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +159 -0
  239. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node.rbs +4042 -0
  240. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +149 -0
  241. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pack.rbs +43 -0
  242. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +38 -0
  243. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +197 -0
  244. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pattern.rbs +13 -0
  245. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/reflection.rbs +50 -0
  246. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/relocation.rbs +185 -0
  247. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/serialize.rbs +8 -0
  248. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/string_query.rbs +11 -0
  249. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/visitor.rbs +169 -0
  250. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism.rbs +272 -0
  251. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/diagnostic.c +854 -0
  252. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/encoding.c +5340 -0
  253. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/node.c +8685 -0
  254. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/options.c +338 -0
  255. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/pack.c +509 -0
  256. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prettyprint.c +8957 -0
  257. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prism.c +22679 -0
  258. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/regexp.c +790 -0
  259. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/serialize.c +2274 -0
  260. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/static_literals.c +617 -0
  261. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/token_type.c +703 -0
  262. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_buffer.c +357 -0
  263. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_char.c +318 -0
  264. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +342 -0
  265. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_integer.c +670 -0
  266. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_list.c +49 -0
  267. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_memchr.c +35 -0
  268. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_newline_list.c +125 -0
  269. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_string.c +381 -0
  270. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +36 -0
  271. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +206 -0
  272. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/History.rdoc +2454 -0
  273. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
  274. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/README.rdoc +155 -0
  275. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
  276. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
  277. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
  278. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/a.c +6 -0
  279. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/b.c +6 -0
  280. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/main.c +11 -0
  281. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
  282. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
  283. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
  284. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rake.1 +156 -0
  285. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
  286. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
  287. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/exe/rake +27 -0
  288. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
  289. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
  290. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
  291. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
  292. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
  293. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
  294. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
  295. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
  296. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
  297. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
  298. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
  299. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
  300. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
  301. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
  302. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
  303. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
  304. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
  305. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
  306. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
  307. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
  308. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
  309. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
  310. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
  311. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
  312. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
  313. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
  314. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
  315. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
  316. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
  317. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
  318. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  319. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
  320. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
  321. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
  322. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
  323. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
  324. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
  325. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
  326. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
  327. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
  328. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
  329. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
  330. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
  331. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake.rb +69 -0
  332. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/rake.gemspec +102 -0
  333. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Gemfile +8 -0
  334. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/History.md +708 -0
  335. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/LICENSE.txt +20 -0
  336. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/README.md +505 -0
  337. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Rakefile +15 -0
  338. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/appveyor.yml +22 -0
  339. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/bin/rake-compiler +24 -0
  340. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/cucumber.yml +4 -0
  341. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/compile.feature +79 -0
  342. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-compile.feature +23 -0
  343. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package-multi.feature +15 -0
  344. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package.feature +14 -0
  345. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-compile.feature +22 -0
  346. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-no-native-compile.feature +33 -0
  347. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-package.feature +24 -0
  348. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/package.feature +40 -0
  349. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/compilation.rb +70 -0
  350. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/cross_compilation.rb +27 -0
  351. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/execution.rb +52 -0
  352. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/folders.rb +32 -0
  353. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/gem.rb +46 -0
  354. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/java_compilation.rb +7 -0
  355. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/env.rb +10 -0
  356. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/file_template_helpers.rb +137 -0
  357. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/generator_helpers.rb +123 -0
  358. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/platform_extension_helpers.rb +27 -0
  359. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/baseextensiontask.rb +90 -0
  360. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/compiler_config.rb +38 -0
  361. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensioncompiler.rb +51 -0
  362. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensiontask.rb +621 -0
  363. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/javaextensiontask.rb +321 -0
  364. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bin/cross-ruby.rake +189 -0
  365. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bootstrap.rake +11 -0
  366. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/common.rake +10 -0
  367. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/cucumber.rake +23 -0
  368. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/gem.rake +15 -0
  369. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/rspec.rake +9 -0
  370. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
  371. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
  372. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
  373. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
  374. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
  375. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
  376. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
  377. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
  378. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
  379. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
  380. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
  381. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
  382. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
  383. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
  384. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
  385. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
  386. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0004-Enable-build-of-static-libruby.patch +38 -0
  387. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0005-build-miniruby-first.patch +16 -0
  388. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0006-ruby-4-rubyspec-capiext.patch +16 -0
  389. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
  390. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
  391. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
  392. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
  393. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
  394. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
  395. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
  396. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
  397. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
  398. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
  399. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
  400. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
  401. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
  402. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
  403. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
  404. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
  405. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
  406. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
  407. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
  408. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
  409. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
  410. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
  411. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
  412. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
  413. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
  414. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
  415. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.c +65 -0
  416. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.h +11 -0
  417. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
  418. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
  419. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
  420. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
  421. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
  422. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
  423. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
  424. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
  425. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
  426. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-APACHE +190 -0
  427. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-MIT +21 -0
  428. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/README.md +42 -0
  429. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/certs/ianks.pem +21 -0
  430. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/exe/rb-sys-dock +495 -0
  431. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/config.rb +72 -0
  432. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/metadata.rb +158 -0
  433. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo.rb +9 -0
  434. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder/link_flag_converter.rb +37 -0
  435. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder.rb +370 -0
  436. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/error.rb +43 -0
  437. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/extensiontask.rb +188 -0
  438. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf/config.rb +75 -0
  439. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf.rb +413 -0
  440. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info/data.rb +10 -0
  441. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info.rb +82 -0
  442. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/util/logger.rb +73 -0
  443. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/version.rb +5 -0
  444. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys.rb +8 -0
  445. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/BSDL +22 -0
  446. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/CHANGELOG.md +2463 -0
  447. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/COPYING +56 -0
  448. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Dockerfile.jruby +53 -0
  449. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/README.md +240 -0
  450. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Rakefile +1213 -0
  451. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Steepfile +55 -0
  452. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/config.yml +920 -0
  453. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/array.rbs +4205 -0
  454. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/basic_object.rbs +376 -0
  455. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/binding.rbs +148 -0
  456. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/builtin.rbs +278 -0
  457. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/class.rbs +223 -0
  458. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/comparable.rbs +192 -0
  459. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/complex.rbs +812 -0
  460. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/constants.rbs +96 -0
  461. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/data.rbs +415 -0
  462. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/dir.rbs +993 -0
  463. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/encoding.rbs +1368 -0
  464. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerable.rbs +2506 -0
  465. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/arithmetic_sequence.rbs +70 -0
  466. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/product.rbs +92 -0
  467. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator.rbs +705 -0
  468. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/env.rbs +6 -0
  469. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errno.rbs +682 -0
  470. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errors.rbs +789 -0
  471. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/exception.rbs +485 -0
  472. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/false_class.rbs +82 -0
  473. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber.rbs +570 -0
  474. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber_error.rbs +11 -0
  475. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file.rbs +2045 -0
  476. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_constants.rbs +463 -0
  477. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_stat.rbs +534 -0
  478. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_test.rbs +331 -0
  479. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/float.rbs +1292 -0
  480. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/gc.rbs +788 -0
  481. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/global_variables.rbs +184 -0
  482. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/hash.rbs +2183 -0
  483. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/integer.rbs +1374 -0
  484. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/buffer.rbs +995 -0
  485. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/wait.rbs +48 -0
  486. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io.rbs +3473 -0
  487. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/kernel.rbs +3172 -0
  488. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/marshal.rbs +207 -0
  489. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/match_data.rbs +637 -0
  490. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/math.rbs +770 -0
  491. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/method.rbs +422 -0
  492. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/module.rbs +1856 -0
  493. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/nil_class.rbs +210 -0
  494. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/numeric.rbs +832 -0
  495. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object.rbs +108 -0
  496. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space/weak_key_map.rbs +166 -0
  497. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space.rbs +197 -0
  498. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/pathname.rbs +1312 -0
  499. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/proc.rbs +905 -0
  500. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/process.rbs +2316 -0
  501. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ractor.rbs +914 -0
  502. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/random.rbs +255 -0
  503. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/range.rbs +1209 -0
  504. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rational.rbs +502 -0
  505. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rb_config.rbs +88 -0
  506. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/ops.rbs +154 -0
  507. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/argf.rbs +1236 -0
  508. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/env_class.rbs +1214 -0
  509. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/main_class.rbs +123 -0
  510. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/random.rbs +186 -0
  511. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/refinement.rbs +59 -0
  512. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/regexp.rbs +1974 -0
  513. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby.rbs +53 -0
  514. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby_vm.rbs +809 -0
  515. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/basic_specification.rbs +6 -0
  516. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/config_file.rbs +38 -0
  517. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/dependency_installer.rbs +6 -0
  518. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/errors.rbs +112 -0
  519. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/installer.rbs +15 -0
  520. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/path_support.rbs +6 -0
  521. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/platform.rbs +7 -0
  522. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/request_set.rbs +49 -0
  523. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/requirement.rbs +138 -0
  524. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/rubygems.rbs +1108 -0
  525. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/source_list.rbs +15 -0
  526. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/specification.rbs +31 -0
  527. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/stream_ui.rbs +5 -0
  528. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/uninstaller.rbs +10 -0
  529. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/version.rbs +133 -0
  530. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/set.rbs +751 -0
  531. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/signal.rbs +110 -0
  532. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/string.rbs +5532 -0
  533. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/struct.rbs +668 -0
  534. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/symbol.rbs +482 -0
  535. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread.rbs +1821 -0
  536. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread_group.rbs +79 -0
  537. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/time.rbs +1793 -0
  538. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/trace_point.rbs +483 -0
  539. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/true_class.rbs +98 -0
  540. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/unbound_method.rbs +337 -0
  541. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/warning.rbs +87 -0
  542. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/CONTRIBUTING.md +107 -0
  543. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/aliases.md +79 -0
  544. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/architecture.md +110 -0
  545. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/collection.md +192 -0
  546. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/config.md +171 -0
  547. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/data_and_struct.md +86 -0
  548. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/encoding.md +56 -0
  549. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/gem.md +56 -0
  550. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/inline.md +634 -0
  551. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rbs_by_example.md +309 -0
  552. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/release.md +303 -0
  553. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/repo.md +125 -0
  554. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rust.md +96 -0
  555. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/sigs.md +167 -0
  556. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/stdlib.md +155 -0
  557. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/syntax.md +952 -0
  558. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/tools.md +17 -0
  559. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/type_fingerprint.md +21 -0
  560. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/wasm_serialization.md +80 -0
  561. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/exe/rbs +7 -0
  562. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/Makefile +273 -0
  563. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.c +1870 -0
  564. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.h +41 -0
  565. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.c +189 -0
  566. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.h +105 -0
  567. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/compat.h +10 -0
  568. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/extconf.rb +40 -0
  569. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.c +299 -0
  570. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.h +82 -0
  571. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/main.c +649 -0
  572. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_extension.h +16 -0
  573. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.c +9 -0
  574. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.h +24 -0
  575. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/goodcheck.yml +91 -0
  576. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/ast.h +1055 -0
  577. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/defines.h +104 -0
  578. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/lexer.h +208 -0
  579. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/location.h +40 -0
  580. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/parser.h +187 -0
  581. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/serialize.h +39 -0
  582. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/string.h +47 -0
  583. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_allocator.h +59 -0
  584. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_assert.h +20 -0
  585. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_buffer.h +83 -0
  586. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_constant_pool.h +155 -0
  587. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_encoding.h +282 -0
  588. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_unescape.h +24 -0
  589. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs.h +14 -0
  590. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ancestor_graph.rb +92 -0
  591. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/annotations.rb +199 -0
  592. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/formatter.rb +82 -0
  593. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  594. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_source.rb +131 -0
  595. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate.rb +8 -0
  596. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/annotation.rb +29 -0
  597. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/comment.rb +29 -0
  598. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/declarations.rb +472 -0
  599. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/directives.rb +49 -0
  600. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/members.rb +451 -0
  601. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/annotations.rb +451 -0
  602. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/comment_block.rb +247 -0
  603. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/declarations.rb +291 -0
  604. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  605. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  606. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/members.rb +762 -0
  607. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/type_param.rb +235 -0
  608. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/visitor.rb +137 -0
  609. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/buffer.rb +189 -0
  610. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/builtin_names.rb +58 -0
  611. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/colored_io.rb +48 -0
  612. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/diff.rb +84 -0
  613. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/validate.rb +294 -0
  614. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli.rb +1253 -0
  615. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/cleaner.rb +38 -0
  616. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile.rb +92 -0
  617. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  618. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config.rb +81 -0
  619. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/installer.rb +32 -0
  620. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/base.rb +14 -0
  621. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/git.rb +265 -0
  622. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/local.rb +81 -0
  623. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/rubygems.rb +48 -0
  624. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/stdlib.rb +50 -0
  625. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources.rb +38 -0
  626. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection.rb +16 -0
  627. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/constant.rb +28 -0
  628. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition.rb +415 -0
  629. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/ancestor_builder.rb +681 -0
  630. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/method_builder.rb +295 -0
  631. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder.rb +1057 -0
  632. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/diff.rb +131 -0
  633. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/class_entry.rb +81 -0
  634. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/module_entry.rb +91 -0
  635. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/use_map.rb +77 -0
  636. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment.rb +1028 -0
  637. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_loader.rb +167 -0
  638. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_walker.rb +155 -0
  639. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/errors.rb +634 -0
  640. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/factory.rb +18 -0
  641. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/file_finder.rb +28 -0
  642. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser/comment_association.rb +117 -0
  643. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser.rb +568 -0
  644. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/location_aux.rb +170 -0
  645. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/locator.rb +247 -0
  646. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/method_type.rb +145 -0
  647. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/namespace.rb +154 -0
  648. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/lex_result.rb +15 -0
  649. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/token.rb +23 -0
  650. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser_aux.rb +144 -0
  651. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/helpers.rb +164 -0
  652. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/node_usage.rb +99 -0
  653. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rb.rb +816 -0
  654. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rbi.rb +793 -0
  655. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/helpers.rb +59 -0
  656. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/reflection.rb +19 -0
  657. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/value_object_generator.rb +278 -0
  658. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime.rb +680 -0
  659. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/repository.rb +127 -0
  660. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/constant_resolver.rb +219 -0
  661. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/type_name_resolver.rb +167 -0
  662. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/rewriter.rb +70 -0
  663. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/sorter.rb +198 -0
  664. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/source.rb +99 -0
  665. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/substitution.rb +83 -0
  666. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/subtractor.rb +204 -0
  667. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/errors.rb +80 -0
  668. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/guaranteed.rb +30 -0
  669. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/hook.rb +212 -0
  670. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/observer.rb +19 -0
  671. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup.rb +84 -0
  672. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup_helper.rb +50 -0
  673. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/tester.rb +167 -0
  674. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/type_check.rb +457 -0
  675. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test.rb +112 -0
  676. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_dependency.rb +100 -0
  677. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_regularity.rb +126 -0
  678. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_name.rb +122 -0
  679. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/types.rb +1646 -0
  680. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/convertibles.rb +177 -0
  681. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/spy.rb +138 -0
  682. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/type_assertions.rb +383 -0
  683. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/with_aliases.rb +145 -0
  684. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test.rb +6 -0
  685. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/validator.rb +186 -0
  686. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/variance_calculator.rb +189 -0
  687. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/vendorer.rb +71 -0
  688. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/version.rb +5 -0
  689. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/deserializer.rb +213 -0
  690. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/location.rb +61 -0
  691. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/parser.rb +174 -0
  692. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/runtime.rb +211 -0
  693. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/serialization_schema.rb +111 -0
  694. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/writer.rb +424 -0
  695. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs.rb +117 -0
  696. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_extension.so +0 -0
  697. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_jars.rb +39 -0
  698. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc/discover.rb +20 -0
  699. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc_plugin/parser.rb +168 -0
  700. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/rbs.gemspec +77 -0
  701. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/annotation.json +14 -0
  702. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/comment.json +26 -0
  703. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/decls.json +326 -0
  704. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/function.json +98 -0
  705. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/location.json +56 -0
  706. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/members.json +266 -0
  707. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/methodType.json +50 -0
  708. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/typeParam.json +52 -0
  709. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/types.json +317 -0
  710. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_builder.rbs +163 -0
  711. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_graph.rbs +60 -0
  712. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/annotations.rbs +102 -0
  713. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/formatter.rbs +24 -0
  714. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_annotater.rbs +85 -0
  715. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_source.rbs +32 -0
  716. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotation.rbs +27 -0
  717. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/annotations.rbs +470 -0
  718. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/comment_block.rbs +127 -0
  719. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/declarations.rbs +158 -0
  720. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  721. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  722. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/members.rbs +198 -0
  723. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/buffer.rbs +108 -0
  724. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/builtin_names.rbs +44 -0
  725. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/colored_io.rbs +15 -0
  726. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/diff.rbs +15 -0
  727. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/validate.rbs +47 -0
  728. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli.rbs +89 -0
  729. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/cleaner.rbs +13 -0
  730. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile.rbs +74 -0
  731. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile_generator.rbs +68 -0
  732. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config.rbs +46 -0
  733. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/installer.rbs +17 -0
  734. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/sources.rbs +214 -0
  735. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection.rbs +4 -0
  736. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/comment.rbs +26 -0
  737. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/constant.rbs +21 -0
  738. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/declarations.rbs +274 -0
  739. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition.rbs +232 -0
  740. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition_builder.rbs +181 -0
  741. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/diff.rbs +28 -0
  742. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/directives.rbs +77 -0
  743. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/class_entry.rbs +56 -0
  744. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/module_entry.rbs +65 -0
  745. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment.rbs +286 -0
  746. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_loader.rbs +111 -0
  747. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_walker.rbs +65 -0
  748. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/errors.rbs +408 -0
  749. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/factory.rbs +5 -0
  750. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/file_finder.rbs +28 -0
  751. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser/comment_association.rbs +71 -0
  752. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser.rbs +126 -0
  753. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/location.rbs +135 -0
  754. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/locator.rbs +56 -0
  755. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/manifest.yaml +5 -0
  756. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/members.rbs +258 -0
  757. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_builder.rbs +89 -0
  758. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_types.rbs +58 -0
  759. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/namespace.rbs +161 -0
  760. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/parser.rbs +164 -0
  761. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/helpers.rbs +29 -0
  762. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/node_usage.rbs +20 -0
  763. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rb.rbs +96 -0
  764. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rbi.rbs +104 -0
  765. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/runtime.rbs +182 -0
  766. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rbs.rbs +21 -0
  767. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rdoc/rbs.rbs +67 -0
  768. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/repository.rbs +85 -0
  769. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/constant_resolver.rbs +92 -0
  770. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/context.rbs +34 -0
  771. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/type_name_resolver.rbs +61 -0
  772. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rewriter.rbs +45 -0
  773. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/bundler.rbs +38 -0
  774. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/enumerable.rbs +5 -0
  775. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/rubygems.rbs +19 -0
  776. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/sorter.rbs +41 -0
  777. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/source.rbs +48 -0
  778. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/substitution.rbs +48 -0
  779. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/subtractor.rbs +37 -0
  780. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/errors.rbs +52 -0
  781. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/guranteed.rbs +9 -0
  782. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/type_check.rbs +19 -0
  783. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test.rbs +82 -0
  784. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_dependency.rbs +53 -0
  785. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_regularity.rbs +98 -0
  786. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_param.rbs +115 -0
  787. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/typename.rbs +89 -0
  788. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/types.rbs +588 -0
  789. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/convertibles.rbs +154 -0
  790. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/spy.rbs +22 -0
  791. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/type_assertions.rbs +211 -0
  792. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/with_aliases.rbs +136 -0
  793. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/use_map.rbs +35 -0
  794. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/util.rbs +9 -0
  795. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/validator.rbs +63 -0
  796. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/variance_calculator.rbs +87 -0
  797. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/vendorer.rbs +51 -0
  798. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/version.rbs +3 -0
  799. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/visitor.rbs +47 -0
  800. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/deserializer.rbs +66 -0
  801. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/serialization_schema.rbs +13 -0
  802. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/writer.rbs +127 -0
  803. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/ast.c +1644 -0
  804. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.c +3223 -0
  805. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.re +187 -0
  806. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexstate.c +222 -0
  807. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/location.c +31 -0
  808. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/parser.c +4318 -0
  809. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/serialize.c +965 -0
  810. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/string.c +41 -0
  811. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_allocator.c +171 -0
  812. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_assert.c +19 -0
  813. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_buffer.c +54 -0
  814. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_constant_pool.c +268 -0
  815. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_encoding.c +21454 -0
  816. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_unescape.c +167 -0
  817. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/abbrev.rbs +66 -0
  818. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/array.rbs +26 -0
  819. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/base64/0/base64.rbs +355 -0
  820. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/benchmark/0/benchmark.rbs +452 -0
  821. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  822. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  823. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  824. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/core.rbs +911 -0
  825. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/manifest.yaml +4 -0
  826. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi-escape/0/escape.rbs +171 -0
  827. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/coverage/0/coverage.rbs +266 -0
  828. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/csv.rbs +3776 -0
  829. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/manifest.yaml +3 -0
  830. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date.rbs +1598 -0
  831. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date_time.rbs +617 -0
  832. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/time.rbs +26 -0
  833. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/dbm/0/dbm.rbs +421 -0
  834. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/delegator.rbs +188 -0
  835. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/kernel.rbs +47 -0
  836. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/simple_delegator.rbs +96 -0
  837. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  838. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/digest/0/digest.rbs +693 -0
  839. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/erb/0/erb.rbs +933 -0
  840. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/etc/0/etc.rbs +884 -0
  841. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/fileutils/0/fileutils.rbs +1753 -0
  842. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/find/0/find.rbs +49 -0
  843. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/forwardable/0/forwardable.rbs +271 -0
  844. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/io-console/0/io-console.rbs +414 -0
  845. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ipaddr/0/ipaddr.rbs +431 -0
  846. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/json/0/json.rbs +1963 -0
  847. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/kconv/0/kconv.rbs +166 -0
  848. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/formatter.rbs +45 -0
  849. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/log_device.rbs +100 -0
  850. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/logger.rbs +796 -0
  851. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/manifest.yaml +2 -0
  852. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/period.rbs +17 -0
  853. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/severity.rbs +34 -0
  854. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/kernel.rbs +42 -0
  855. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  856. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  857. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  858. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  859. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  860. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  861. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  862. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/compress.rbs +13 -0
  863. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  864. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  865. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  866. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/guard.rbs +64 -0
  867. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/mock.rbs +64 -0
  868. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  869. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  870. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  871. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  872. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  873. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  874. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  875. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  876. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  877. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/result.rbs +28 -0
  878. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  879. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/skip.rbs +6 -0
  880. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  881. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  882. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec.rbs +11 -0
  883. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  884. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  885. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  886. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test.rbs +69 -0
  887. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  888. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  889. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  890. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit.rbs +4 -0
  891. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest.rbs +115 -0
  892. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/monitor/0/monitor.rbs +363 -0
  893. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  894. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/manifest.yaml +3 -0
  895. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/net-http.rbs +5580 -0
  896. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/manifest.yaml +2 -0
  897. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  898. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/manifest.yaml +2 -0
  899. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  900. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/nkf/0/nkf.rbs +402 -0
  901. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/objspace/0/objspace.rbs +470 -0
  902. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/observable/0/observable.rbs +217 -0
  903. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/manifest.yaml +4 -0
  904. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/open-uri.rbs +433 -0
  905. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open3/0/open3.rbs +606 -0
  906. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/manifest.yaml +3 -0
  907. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/openssl.rbs +12237 -0
  908. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/optparse/0/optparse.rbs +1734 -0
  909. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pathname/0/pathname.rbs +36 -0
  910. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/manifest.yaml +2 -0
  911. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/pp.rbs +301 -0
  912. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  913. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pstore/0/pstore.rbs +608 -0
  914. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/core_ext.rbs +12 -0
  915. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/dbm.rbs +237 -0
  916. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/manifest.yaml +3 -0
  917. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/psych.rbs +455 -0
  918. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/store.rbs +57 -0
  919. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pty/0/pty.rbs +240 -0
  920. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  921. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/code_object.rbs +52 -0
  922. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/comment.rbs +61 -0
  923. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/context.rbs +153 -0
  924. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/markup.rbs +117 -0
  925. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/options.rbs +76 -0
  926. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/parser.rbs +56 -0
  927. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/rdoc.rbs +393 -0
  928. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/ri.rbs +17 -0
  929. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/store.rbs +48 -0
  930. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/top_level.rbs +97 -0
  931. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/manifest.yaml +3 -0
  932. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/resolv.rbs +1787 -0
  933. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ripper/0/ripper.rbs +1654 -0
  934. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/manifest.yaml +2 -0
  935. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/securerandom.rbs +49 -0
  936. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/shellwords/0/shellwords.rbs +229 -0
  937. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/singleton/0/singleton.rbs +137 -0
  938. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/addrinfo.rbs +666 -0
  939. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/basic_socket.rbs +590 -0
  940. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/constants.rbs +2295 -0
  941. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/ip_socket.rbs +94 -0
  942. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket.rbs +4170 -0
  943. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket_error.rbs +5 -0
  944. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_server.rbs +192 -0
  945. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_socket.rbs +87 -0
  946. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/udp_socket.rbs +133 -0
  947. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_server.rbs +169 -0
  948. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_socket.rbs +172 -0
  949. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/stringio/0/stringio.rbs +1682 -0
  950. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/strscan/0/string_scanner.rbs +1648 -0
  951. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/manifest.yaml +3 -0
  952. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/tempfile.rbs +483 -0
  953. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/time/0/time.rbs +434 -0
  954. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/timeout/0/timeout.rbs +132 -0
  955. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  956. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/cyclic.rbs +8 -0
  957. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/interfaces.rbs +20 -0
  958. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/tsort.rbs +410 -0
  959. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/common.rbs +621 -0
  960. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/file.rbs +118 -0
  961. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ftp.rbs +13 -0
  962. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/generic.rbs +1111 -0
  963. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/http.rbs +104 -0
  964. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/https.rbs +14 -0
  965. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldap.rbs +230 -0
  966. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldaps.rbs +14 -0
  967. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/mailto.rbs +92 -0
  968. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  969. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  970. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ws.rbs +13 -0
  971. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/wss.rbs +9 -0
  972. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/manifest.yaml +2 -0
  973. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/yaml.rbs +1 -0
  974. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/buf_error.rbs +10 -0
  975. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/data_error.rbs +10 -0
  976. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/deflate.rbs +211 -0
  977. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/error.rbs +20 -0
  978. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  979. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  980. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  981. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  982. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file.rbs +156 -0
  983. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_reader.rbs +293 -0
  984. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_writer.rbs +169 -0
  985. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/inflate.rbs +180 -0
  986. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/mem_error.rbs +10 -0
  987. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/need_dict.rbs +13 -0
  988. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_end.rbs +11 -0
  989. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_error.rbs +11 -0
  990. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/version_error.rbs +11 -0
  991. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zlib.rbs +449 -0
  992. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zstream.rbs +200 -0
  993. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/README.md +109 -0
  994. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/rbs_wasm.c +479 -0
  995. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/LICENSE +19 -0
  996. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/README.md +135 -0
  997. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/datetime.rb +54 -0
  998. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/dumper.rb +182 -0
  999. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/errors.rb +17 -0
  1000. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/inline_table.rb +18 -0
  1001. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/keyvalue.rb +45 -0
  1002. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/parser.rb +296 -0
  1003. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/string.rb +41 -0
  1004. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table.rb +34 -0
  1005. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table_array.rb +43 -0
  1006. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/version.rb +5 -0
  1007. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb.rb +90 -0
  1008. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Gemfile +4 -0
  1009. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/LICENSE.txt +22 -0
  1010. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/README.md +72 -0
  1011. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Rakefile +10 -0
  1012. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/console +14 -0
  1013. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/setup +8 -0
  1014. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb +455 -0
  1015. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/tsort.gemspec +29 -0
  1016. data/vendor/bundle/ruby/3.4.0/specifications/drb-2.2.3.gemspec +22 -0
  1017. data/vendor/bundle/ruby/3.4.0/specifications/logger-1.7.0.gemspec +22 -0
  1018. data/vendor/bundle/ruby/3.4.0/specifications/minitest-6.0.6.gemspec +35 -0
  1019. data/vendor/bundle/ruby/3.4.0/specifications/prism-1.9.0.gemspec +24 -0
  1020. data/vendor/bundle/ruby/3.4.0/specifications/rake-13.4.2.gemspec +26 -0
  1021. data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-1.3.2.gemspec +33 -0
  1022. data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
  1023. data/vendor/bundle/ruby/3.4.0/specifications/rb_sys-0.9.130.gemspec +29 -0
  1024. data/vendor/bundle/ruby/3.4.0/specifications/rbs-4.2.0.gemspec +33 -0
  1025. data/vendor/bundle/ruby/3.4.0/specifications/toml-rb-6.0.0.gemspec +27 -0
  1026. data/vendor/bundle/ruby/3.4.0/specifications/tsort-0.2.0.gemspec +23 -0
  1027. data/vendor/cache/Cargo.toml +21 -0
  1028. data/vendor/cache/LICENSE +21 -0
  1029. data/vendor/cache/README.md +5 -0
  1030. data/vendor/cache/src/hash.rs +85 -0
  1031. data/vendor/cache/src/lib.rs +751 -0
  1032. data/vendor/cache/src/loom_tests.rs +340 -0
  1033. data/vendor/cache/src/s3fifo.rs +648 -0
  1034. data/vendor/cache/src/sync.rs +25 -0
  1035. data/vendor/cache/src/tests.rs +260 -0
  1036. data/vendor/compaction/Cargo.toml +32 -0
  1037. data/vendor/compaction/LICENSE +21 -0
  1038. data/vendor/compaction/README.md +5 -0
  1039. data/vendor/compaction/src/blob.rs +478 -0
  1040. data/vendor/compaction/src/cursor.rs +700 -0
  1041. data/vendor/compaction/src/gc.rs +802 -0
  1042. data/vendor/compaction/src/job.rs +861 -0
  1043. data/vendor/compaction/src/lib.rs +102 -0
  1044. data/vendor/compaction/src/merge.rs +995 -0
  1045. data/vendor/compaction/src/picker.rs +681 -0
  1046. data/vendor/compaction/src/resolver.rs +1346 -0
  1047. data/vendor/engine/Cargo.toml +56 -0
  1048. data/vendor/engine/LICENSE +21 -0
  1049. data/vendor/engine/README.md +5 -0
  1050. data/vendor/engine/src/admission.rs +421 -0
  1051. data/vendor/engine/src/catalog.rs +1233 -0
  1052. data/vendor/engine/src/check.rs +1386 -0
  1053. data/vendor/engine/src/clock.rs +244 -0
  1054. data/vendor/engine/src/clock_loom.rs +482 -0
  1055. data/vendor/engine/src/close_gate.rs +325 -0
  1056. data/vendor/engine/src/compact.rs +1509 -0
  1057. data/vendor/engine/src/engine/hooks.rs +1654 -0
  1058. data/vendor/engine/src/engine/info.rs +229 -0
  1059. data/vendor/engine/src/engine.rs +6114 -0
  1060. data/vendor/engine/src/error.rs +490 -0
  1061. data/vendor/engine/src/feed.rs +960 -0
  1062. data/vendor/engine/src/feed_reader.rs +1600 -0
  1063. data/vendor/engine/src/flush.rs +839 -0
  1064. data/vendor/engine/src/flushed_roots.rs +158 -0
  1065. data/vendor/engine/src/flushed_through_loom.rs +77 -0
  1066. data/vendor/engine/src/health.rs +201 -0
  1067. data/vendor/engine/src/large.rs +372 -0
  1068. data/vendor/engine/src/large_settle.rs +201 -0
  1069. data/vendor/engine/src/lib.rs +112 -0
  1070. data/vendor/engine/src/load_slot.rs +324 -0
  1071. data/vendor/engine/src/maintenance.rs +935 -0
  1072. data/vendor/engine/src/manifest/flight.rs +563 -0
  1073. data/vendor/engine/src/manifest.rs +1516 -0
  1074. data/vendor/engine/src/nonblocking.rs +603 -0
  1075. data/vendor/engine/src/options.rs +334 -0
  1076. data/vendor/engine/src/position.rs +125 -0
  1077. data/vendor/engine/src/purge_guard.rs +220 -0
  1078. data/vendor/engine/src/read/keys.rs +1049 -0
  1079. data/vendor/engine/src/read/knn.rs +423 -0
  1080. data/vendor/engine/src/read/reduce.rs +2057 -0
  1081. data/vendor/engine/src/read/traverse.rs +1013 -0
  1082. data/vendor/engine/src/read.rs +2429 -0
  1083. data/vendor/engine/src/row_cache.rs +1101 -0
  1084. data/vendor/engine/src/shard/tablets.rs +3582 -0
  1085. data/vendor/engine/src/shard.rs +12215 -0
  1086. data/vendor/engine/src/snapshot.rs +1429 -0
  1087. data/vendor/engine/src/source.rs +1379 -0
  1088. data/vendor/engine/src/timer_state.rs +226 -0
  1089. data/vendor/engine/src/waker.rs +124 -0
  1090. data/vendor/engine/src/watermark_waiters.rs +674 -0
  1091. data/vendor/engine/src/write.rs +1321 -0
  1092. data/vendor/format/Cargo.toml +40 -0
  1093. data/vendor/format/LICENSE +21 -0
  1094. data/vendor/format/README.md +5 -0
  1095. data/vendor/format/src/blob.rs +101 -0
  1096. data/vendor/format/src/block.rs +1120 -0
  1097. data/vendor/format/src/bloom.rs +456 -0
  1098. data/vendor/format/src/buckets.rs +552 -0
  1099. data/vendor/format/src/bytes.rs +101 -0
  1100. data/vendor/format/src/checksum.rs +132 -0
  1101. data/vendor/format/src/compress.rs +196 -0
  1102. data/vendor/format/src/cursor.rs +110 -0
  1103. data/vendor/format/src/distance.rs +598 -0
  1104. data/vendor/format/src/error.rs +93 -0
  1105. data/vendor/format/src/exact.rs +602 -0
  1106. data/vendor/format/src/feed.rs +285 -0
  1107. data/vendor/format/src/filter.rs +157 -0
  1108. data/vendor/format/src/half.rs +182 -0
  1109. data/vendor/format/src/hash.rs +127 -0
  1110. data/vendor/format/src/hll.rs +500 -0
  1111. data/vendor/format/src/ids.rs +95 -0
  1112. data/vendor/format/src/key.rs +620 -0
  1113. data/vendor/format/src/kind_params.rs +101 -0
  1114. data/vendor/format/src/lib.rs +54 -0
  1115. data/vendor/format/src/manifest.rs +1287 -0
  1116. data/vendor/format/src/roaring.rs +865 -0
  1117. data/vendor/format/src/scan.rs +297 -0
  1118. data/vendor/format/src/shm.rs +805 -0
  1119. data/vendor/format/src/sst.rs +233 -0
  1120. data/vendor/format/src/superblock.rs +345 -0
  1121. data/vendor/format/src/value.rs +163 -0
  1122. data/vendor/format/src/varint.rs +87 -0
  1123. data/vendor/format/src/vector.rs +936 -0
  1124. data/vendor/format/src/version.rs +92 -0
  1125. data/vendor/format/src/wal.rs +999 -0
  1126. data/vendor/io/Cargo.toml +29 -0
  1127. data/vendor/io/LICENSE +21 -0
  1128. data/vendor/io/README.md +5 -0
  1129. data/vendor/io/src/async_poll.rs +44 -0
  1130. data/vendor/io/src/buf.rs +694 -0
  1131. data/vendor/io/src/completion.rs +444 -0
  1132. data/vendor/io/src/error.rs +110 -0
  1133. data/vendor/io/src/file.rs +206 -0
  1134. data/vendor/io/src/lib.rs +53 -0
  1135. data/vendor/io/src/nowait.rs +256 -0
  1136. data/vendor/io/src/os/mod.rs +149 -0
  1137. data/vendor/io/src/os/unix.rs +897 -0
  1138. data/vendor/io/src/os/windows.rs +552 -0
  1139. data/vendor/io/src/own.rs +257 -0
  1140. data/vendor/io/src/pread.rs +854 -0
  1141. data/vendor/io/src/ring_wake.rs +113 -0
  1142. data/vendor/io/src/shared.rs +410 -0
  1143. data/vendor/io/src/sim.rs +1545 -0
  1144. data/vendor/io/src/sys.rs +214 -0
  1145. data/vendor/io/src/uring.rs +1839 -0
  1146. data/vendor/io/src/vfs.rs +154 -0
  1147. data/vendor/memory/Cargo.toml +34 -0
  1148. data/vendor/memory/LICENSE +21 -0
  1149. data/vendor/memory/README.md +11 -0
  1150. data/vendor/memory/src/consolidate.rs +640 -0
  1151. data/vendor/memory/src/dedup.rs +231 -0
  1152. data/vendor/memory/src/error.rs +131 -0
  1153. data/vendor/memory/src/feed_loop.rs +572 -0
  1154. data/vendor/memory/src/forget.rs +724 -0
  1155. data/vendor/memory/src/hooks.rs +109 -0
  1156. data/vendor/memory/src/ivf.rs +204 -0
  1157. data/vendor/memory/src/layout.rs +340 -0
  1158. data/vendor/memory/src/lib.rs +61 -0
  1159. data/vendor/memory/src/recall.rs +1182 -0
  1160. data/vendor/memory/src/store.rs +1785 -0
  1161. data/vendor/memory/src/watch.rs +339 -0
  1162. data/vendor/memtable/Cargo.toml +24 -0
  1163. data/vendor/memtable/LICENSE +21 -0
  1164. data/vendor/memtable/README.md +5 -0
  1165. data/vendor/memtable/src/lib.rs +1658 -0
  1166. data/vendor/memtable/src/loom_tests.rs +274 -0
  1167. data/vendor/memtable/src/mem.rs +344 -0
  1168. data/vendor/memtable/src/tests.rs +1061 -0
  1169. data/vendor/pager/Cargo.toml +23 -0
  1170. data/vendor/pager/LICENSE +21 -0
  1171. data/vendor/pager/README.md +5 -0
  1172. data/vendor/pager/src/alloc.rs +1008 -0
  1173. data/vendor/pager/src/lib.rs +1710 -0
  1174. data/vendor/pigeonhole/Cargo.toml +42 -0
  1175. data/vendor/pigeonhole/LICENSE +21 -0
  1176. data/vendor/pigeonhole/README.md +99 -0
  1177. data/vendor/pigeonhole/src/cell.rs +829 -0
  1178. data/vendor/pigeonhole/src/check.rs +368 -0
  1179. data/vendor/pigeonhole/src/db.rs +2324 -0
  1180. data/vendor/pigeonhole/src/doc_support.rs +89 -0
  1181. data/vendor/pigeonhole/src/error.rs +257 -0
  1182. data/vendor/pigeonhole/src/feed.rs +696 -0
  1183. data/vendor/pigeonhole/src/info.rs +425 -0
  1184. data/vendor/pigeonhole/src/lib.rs +202 -0
  1185. data/vendor/pigeonhole/src/merge.rs +135 -0
  1186. data/vendor/pigeonhole/src/metrics.rs +476 -0
  1187. data/vendor/pigeonhole/src/nonblocking.rs +666 -0
  1188. data/vendor/pigeonhole/src/options.rs +2075 -0
  1189. data/vendor/pigeonhole/src/read/budget.rs +584 -0
  1190. data/vendor/pigeonhole/src/read.rs +2463 -0
  1191. data/vendor/pigeonhole/src/recovery.rs +876 -0
  1192. data/vendor/pigeonhole/src/retry.rs +358 -0
  1193. data/vendor/pigeonhole/src/set.rs +103 -0
  1194. data/vendor/pigeonhole/src/table.rs +861 -0
  1195. data/vendor/pigeonhole/src/vector.rs +351 -0
  1196. data/vendor/pigeonhole/src/write.rs +2815 -0
  1197. data/vendor/runtime/Cargo.toml +21 -0
  1198. data/vendor/runtime/LICENSE +21 -0
  1199. data/vendor/runtime/README.md +5 -0
  1200. data/vendor/runtime/src/completion.rs +629 -0
  1201. data/vendor/runtime/src/drivers.rs +1175 -0
  1202. data/vendor/runtime/src/lib.rs +1546 -0
  1203. data/vendor/runtime/src/pool.rs +992 -0
  1204. data/vendor/runtime/src/sched.rs +809 -0
  1205. data/vendor/runtime/src/signal.rs +532 -0
  1206. data/vendor/runtime/src/submit_gate.rs +144 -0
  1207. data/vendor/shm/Cargo.toml +24 -0
  1208. data/vendor/shm/LICENSE +21 -0
  1209. data/vendor/shm/README.md +5 -0
  1210. data/vendor/shm/src/lib.rs +427 -0
  1211. data/vendor/shm/src/lock.rs +153 -0
  1212. data/vendor/shm/src/region.rs +1609 -0
  1213. data/vendor/sst/Cargo.toml +26 -0
  1214. data/vendor/sst/LICENSE +21 -0
  1215. data/vendor/sst/README.md +5 -0
  1216. data/vendor/sst/src/blob.rs +380 -0
  1217. data/vendor/sst/src/iter.rs +803 -0
  1218. data/vendor/sst/src/lib.rs +695 -0
  1219. data/vendor/sst/src/reader.rs +814 -0
  1220. data/vendor/sst/src/writer.rs +596 -0
  1221. data/vendor/text/Cargo.toml +26 -0
  1222. data/vendor/text/LICENSE +21 -0
  1223. data/vendor/text/README.md +9 -0
  1224. data/vendor/text/src/error.rs +108 -0
  1225. data/vendor/text/src/fuzzy.rs +265 -0
  1226. data/vendor/text/src/highlight.rs +236 -0
  1227. data/vendor/text/src/index.rs +1152 -0
  1228. data/vendor/text/src/layout.rs +424 -0
  1229. data/vendor/text/src/lib.rs +75 -0
  1230. data/vendor/text/src/maxscore.rs +658 -0
  1231. data/vendor/text/src/query.rs +450 -0
  1232. data/vendor/text/src/search.rs +569 -0
  1233. data/vendor/text/src/sloppy.rs +460 -0
  1234. data/vendor/text/src/tokenizer.rs +163 -0
  1235. data/vendor/vector/Cargo.toml +28 -0
  1236. data/vendor/vector/LICENSE +21 -0
  1237. data/vendor/vector/README.md +9 -0
  1238. data/vendor/vector/src/error.rs +63 -0
  1239. data/vendor/vector/src/half.rs +167 -0
  1240. data/vendor/vector/src/hooks.rs +135 -0
  1241. data/vendor/vector/src/index.rs +2690 -0
  1242. data/vendor/vector/src/layout.rs +102 -0
  1243. data/vendor/vector/src/lib.rs +52 -0
  1244. data/vendor/vector/src/point.rs +500 -0
  1245. data/vendor/vector/src/rebalancer.rs +200 -0
  1246. data/vendor/vector/src/registry.rs +81 -0
  1247. data/vendor/wal/Cargo.toml +25 -0
  1248. data/vendor/wal/LICENSE +21 -0
  1249. data/vendor/wal/README.md +5 -0
  1250. data/vendor/wal/src/feed.rs +610 -0
  1251. data/vendor/wal/src/foreground.rs +122 -0
  1252. data/vendor/wal/src/lib.rs +458 -0
  1253. data/vendor/wal/src/mem.rs +166 -0
  1254. data/vendor/wal/src/recovery.rs +426 -0
  1255. data/vendor/wal/src/stream.rs +2382 -0
  1256. metadata +1310 -0
@@ -0,0 +1,2057 @@
1
+ //! Bounded-result read pushdown (D296, #490 A): a visitor runs on each resolved cell of the
2
+ //! input, where the scan would have handed it out, and a reducer keeps a bounded result (the
3
+ //! k best, the first n, one per key). Only the reducer's result leaves the read.
4
+ //!
5
+ //! The scan's own code ([`super::ScanCursor`]) is untouched: this module's loop is a sibling
6
+ //! that drives the same per-family [`Lane`]s (resolver over the tablet's sources), so the
7
+ //! visitor sees exactly what a scan returns (snapshot, deletes, TTL, versions, merges and
8
+ //! value predicates applied) and reads each value where the lane holds it, without assembling
9
+ //! rows. #1167 measured that any change to the scan's per-cell loop costs its shapes.
10
+ //!
11
+ //! Work is cut at tablet boundaries into groups. Each group has its own visitor and reducer,
12
+ //! and stops only on its own account (a visitor's [`Visit::Stop`], or its reducer's `Break`):
13
+ //! no group stops because of another, so a group's result is a function of its key range at
14
+ //! the snapshot, and merging the groups' results gives exactly the sequential result at any
15
+ //! fan-out (D296 rev 1.2). The one shared flag ends every group on an error.
16
+
17
+ use std::ops::{Bound, ControlFlow};
18
+ use std::sync::Arc;
19
+ use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
20
+
21
+ use pigeonhole_format::key::{Escaped, TERMINATOR, encode_row_prefix};
22
+ use pigeonhole_format::{Cursor, FamilyId, TableId, Timestamp};
23
+
24
+ use super::keys::{KeyCursor, KeyGroup, KeySet, key_groups};
25
+ use super::{
26
+ FORK_CHECK_ROWS, Lane, LaneValue, MergeKind, ReadSpec, clamp_into, column_of, give_back,
27
+ past_row, row_of, skips_columns, take_scan_resolver,
28
+ };
29
+ use crate::catalog::FamilyMeta;
30
+ use crate::snapshot::{Snapshot, SstSet, TabletEntry, View};
31
+ use crate::source::{Located, Pinned, Source};
32
+ use crate::{ColumnPosition, Error, Result};
33
+
34
+ /// A row range on unescaped row keys, `(start, end)`.
35
+ pub type RowRange = (Bound<Vec<u8>>, Bound<Vec<u8>>);
36
+
37
+ /// What a bounded read reads.
38
+ #[derive(Debug, Clone)]
39
+ #[non_exhaustive]
40
+ pub enum ReadInput {
41
+ /// Row ranges, sorted and disjoint, each `(start, end)` on unescaped row keys. One range
42
+ /// is a scan's input; several cover, for example, an IVF index's probed partitions in one
43
+ /// read under one snapshot.
44
+ Ranges(Vec<RowRange>),
45
+ /// Rows by key (D299's multi-get, #489): sorted and distinct by construction, read with
46
+ /// one forward cursor per source per tablet group.
47
+ Keys(Arc<KeySet>),
48
+ }
49
+
50
+ /// What a [`CellVisitor`] tells the read to do after one cell.
51
+ #[derive(Debug, Clone, PartialEq, Eq)]
52
+ pub enum Visit<I> {
53
+ /// Nothing from this cell; go on to the next.
54
+ Skip,
55
+ /// Push `I` to the reducer and go on.
56
+ Emit(I),
57
+ /// Push `I`, then skip the rest of this row (a seek past it, not a walk).
58
+ EmitAndNextRow(I),
59
+ /// Skip the rest of this row.
60
+ NextRow,
61
+ /// End this group's read.
62
+ Stop,
63
+ }
64
+
65
+ /// Runs on each resolved cell of a bounded read.
66
+ pub trait CellVisitor {
67
+ /// What it hands the reducer.
68
+ type Item;
69
+
70
+ /// Whether [`visit`](Self::visit) reads its `qualifier`. A visitor that doesn't (a
71
+ /// nearest-neighbour search scores the value alone) gets an empty one, and a range read
72
+ /// unescapes the qualifier only for an item the reducer [`admits`](Reducer::admits)
73
+ /// (#1283 lever 1). A constant, so a visitor that reads it compiles as before.
74
+ const QUALIFIER: bool = true;
75
+
76
+ /// One cell, borrowed for the call: `row` and `qualifier` unescaped, `value` the stored
77
+ /// value with its tag byte (in place where the source holds it).
78
+ fn visit(
79
+ &mut self,
80
+ row: &[u8],
81
+ family: FamilyId,
82
+ qualifier: &[u8],
83
+ ts: Timestamp,
84
+ value: &[u8],
85
+ ) -> Visit<Self::Item>;
86
+ }
87
+
88
+ /// The cell an item came from, borrowed for a [`Reducer::push`]. Cells order as a scan hands
89
+ /// them out: by row, then family in the read's family order, then qualifier, then newest
90
+ /// version first. That is a total order over a read's cells.
91
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
92
+ pub struct CellRef<'a> {
93
+ /// Unescaped row key.
94
+ pub row: &'a [u8],
95
+ /// The family's position in the read's family order (the scan's).
96
+ pub family_rank: u32,
97
+ /// The family.
98
+ pub family: FamilyId,
99
+ /// Unescaped qualifier.
100
+ pub qualifier: &'a [u8],
101
+ /// The version's timestamp.
102
+ pub ts: Timestamp,
103
+ }
104
+
105
+ impl CellRef<'_> {
106
+ fn order(&self) -> (&[u8], u32, &[u8], std::cmp::Reverse<Timestamp>) {
107
+ (
108
+ self.row,
109
+ self.family_rank,
110
+ self.qualifier,
111
+ std::cmp::Reverse(self.ts),
112
+ )
113
+ }
114
+
115
+ /// An owned copy.
116
+ pub fn to_key(&self) -> CellKey {
117
+ CellKey {
118
+ row: self.row.to_vec(),
119
+ family_rank: self.family_rank,
120
+ family: self.family,
121
+ qualifier: self.qualifier.to_vec(),
122
+ ts: self.ts,
123
+ }
124
+ }
125
+ }
126
+
127
+ impl PartialOrd for CellRef<'_> {
128
+ fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
129
+ Some(self.cmp(other))
130
+ }
131
+ }
132
+
133
+ impl Ord for CellRef<'_> {
134
+ fn cmp(&self, other: &Self) -> std::cmp::Ordering {
135
+ self.order().cmp(&other.order())
136
+ }
137
+ }
138
+
139
+ /// An owned [`CellRef`]: a result's cell, ordered the same way.
140
+ #[derive(Debug, Clone, PartialEq, Eq, Hash)]
141
+ pub struct CellKey {
142
+ /// Unescaped row key.
143
+ pub row: Vec<u8>,
144
+ /// The family's position in the read's family order.
145
+ pub family_rank: u32,
146
+ /// The family.
147
+ pub family: FamilyId,
148
+ /// Unescaped qualifier.
149
+ pub qualifier: Vec<u8>,
150
+ /// The version's timestamp.
151
+ pub ts: Timestamp,
152
+ }
153
+
154
+ impl CellKey {
155
+ /// This key, borrowed.
156
+ pub fn as_ref(&self) -> CellRef<'_> {
157
+ CellRef {
158
+ row: &self.row,
159
+ family_rank: self.family_rank,
160
+ family: self.family,
161
+ qualifier: &self.qualifier,
162
+ ts: self.ts,
163
+ }
164
+ }
165
+ }
166
+
167
+ impl PartialOrd for CellKey {
168
+ fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
169
+ Some(self.cmp(other))
170
+ }
171
+ }
172
+
173
+ impl Ord for CellKey {
174
+ fn cmp(&self, other: &Self) -> std::cmp::Ordering {
175
+ self.as_ref().cmp(&other.as_ref())
176
+ }
177
+ }
178
+
179
+ /// Keeps a bounded result. `merge` must be associative and commutative, and the result a
180
+ /// function of the multiset of pushes, so fan-out equals the sequential read.
181
+ pub trait Reducer: Send {
182
+ /// What it keeps.
183
+ type Item: Send;
184
+
185
+ /// One item from `cell`. A group pushes in cell order. `Break` ends this group's read
186
+ /// (the reducer is full, or has all it can take).
187
+ fn push(&mut self, cell: CellRef<'_>, item: Self::Item) -> ControlFlow<()>;
188
+
189
+ /// Whether `item` could be kept, judged before its cell is built: `false` only when
190
+ /// [`push`](Self::push) would drop it whatever its cell, and then it isn't pushed (#1283
191
+ /// lever 1). It never changes what is kept: an item that ties the bound is admitted, and
192
+ /// `push` breaks the tie by cell.
193
+ #[inline]
194
+ fn admits(&self, _item: &Self::Item) -> bool {
195
+ true
196
+ }
197
+
198
+ /// Folds another group's result in.
199
+ fn merge(&mut self, other: Self);
200
+
201
+ /// The result, in the reducer's order.
202
+ fn finish(self) -> Vec<(CellKey, Self::Item)>;
203
+ }
204
+
205
+ /// A bounded read's input, per-row selection and fan-out.
206
+ #[derive(Debug, Clone)]
207
+ #[non_exhaustive]
208
+ pub struct ReduceSpec {
209
+ /// The rows read.
210
+ pub input: ReadInput,
211
+ /// Families, qualifier selection, time range, value predicates and versions, as for a scan.
212
+ pub read: ReadSpec,
213
+ /// Threads the call may use (1 = the caller's only). More run tablet groups on scoped
214
+ /// threads owned by the call, never the engine's: only when the input is large enough to
215
+ /// pay for them (`parallel_floor` estimated entries per thread), and never on a thread
216
+ /// that drives a shard (D88).
217
+ pub parallelism: usize,
218
+ /// Estimated entries per thread below which a read does not fan out
219
+ /// ([`PARALLEL_FLOOR_ENTRIES`] by default; 0 fans out whenever there are groups). For a
220
+ /// [`ReadInput::Keys`] input it counts keys: a key set's rows are not estimated before
221
+ /// they are read. Key groups are per tablet, so keys inside one tablet never fan out.
222
+ pub parallel_floor: u64,
223
+ /// D308: the read of this row (unescaped), if the input reaches it, resumes after this
224
+ /// column: families the read selects before the position's skip the row, the
225
+ /// position's family starts past the column (all its versions), and later families
226
+ /// start at the selection's own bound. Other rows are read as usual. A position from
227
+ /// another table, or whose family the read doesn't select, is `InvalidArgument`; so is
228
+ /// one whose row a range excludes by its start (`Bound::Excluded(row)`): the row would be
229
+ /// skipped whole, so a range resumed in a row starts at `Bound::Included(row)`.
230
+ pub resume: Option<(Vec<u8>, ColumnPosition)>,
231
+ }
232
+
233
+ impl ReduceSpec {
234
+ /// `input` with the default selection, on the caller's thread.
235
+ pub fn new(input: ReadInput) -> Self {
236
+ Self {
237
+ input,
238
+ read: ReadSpec::default(),
239
+ parallelism: 1,
240
+ parallel_floor: PARALLEL_FLOOR_ENTRIES,
241
+ resume: None,
242
+ }
243
+ }
244
+ }
245
+
246
+ /// A bounded read's result and counts.
247
+ #[derive(Debug)]
248
+ #[non_exhaustive]
249
+ pub struct Reduced<I> {
250
+ /// `(cell, item)`, in the reducer's order.
251
+ pub items: Vec<(CellKey, I)>,
252
+ /// Counts over every group.
253
+ pub stats: ReduceStats,
254
+ }
255
+
256
+ /// Counts of a bounded read.
257
+ #[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
258
+ #[non_exhaustive]
259
+ pub struct ReduceStats {
260
+ /// Tablet groups read.
261
+ pub groups: u64,
262
+ /// Rows the visitor saw a cell of.
263
+ pub rows: u64,
264
+ /// Cells the visitor saw.
265
+ pub cells: u64,
266
+ /// Threads used (1 when the read ran on the caller's thread).
267
+ pub threads: u64,
268
+ /// Lanes read straight from their one SST, with nothing to resolve (#1283 lever 3).
269
+ pub plain_lanes: u64,
270
+ }
271
+
272
+ impl ReduceStats {
273
+ fn add(&mut self, o: &ReduceStats) {
274
+ self.groups += o.groups;
275
+ self.rows += o.rows;
276
+ self.cells += o.cells;
277
+ self.plain_lanes += o.plain_lanes;
278
+ }
279
+ }
280
+
281
+ /// Estimated entries a tablet group must hold, on average, before a read fans out: about
282
+ /// 20,000 rows at today's per-row cost is some 2 ms, against 10-20 µs to start a thread
283
+ /// (D296 rev 1, perf287's work floor).
284
+ pub const PARALLEL_FLOOR_ENTRIES: u64 = 20_000;
285
+
286
+ /// One tablet's share of one input range.
287
+ struct Group<'a> {
288
+ tablet: &'a TabletEntry,
289
+ /// The range, unescaped (for the excluded start and the end check).
290
+ start: &'a Bound<Vec<u8>>,
291
+ end: &'a Bound<Vec<u8>>,
292
+ /// The range clamped to the tablet, as row prefixes (`None` = unbounded).
293
+ lo: Option<Vec<u8>>,
294
+ hi: Option<Vec<u8>>,
295
+ }
296
+
297
+ /// A unit of a bounded read: one tablet's share of a range, or one tablet's run of keys.
298
+ enum Work<'a> {
299
+ Range(Group<'a>),
300
+ Keys(KeyGroup),
301
+ }
302
+
303
+ /// Cuts `input` into work units, in key order.
304
+ fn work<'a>(snapshot: &'a Snapshot, table: TableId, input: &'a ReadInput) -> Result<Vec<Work<'a>>> {
305
+ match input {
306
+ ReadInput::Ranges(ranges) => Ok(groups(&snapshot.view, table, ranges)?
307
+ .into_iter()
308
+ .map(Work::Range)
309
+ .collect()),
310
+ ReadInput::Keys(keys) => Ok(key_groups(snapshot, table, keys)?
311
+ .into_iter()
312
+ .map(Work::Keys)
313
+ .collect()),
314
+ }
315
+ }
316
+
317
+ /// Cuts row ranges into tablet groups, in key order.
318
+ fn groups<'a>(view: &'a View, table: TableId, ranges: &'a [RowRange]) -> Result<Vec<Group<'a>>> {
319
+ // Sorted and disjoint, or a cell would be visited (and counted by a reducer) twice.
320
+ for pair in ranges.windows(2) {
321
+ if !before(&pair[0].1, &pair[1].0) {
322
+ return Err(Error::InvalidArgument(
323
+ "bounded read: the ranges must be sorted and disjoint".to_owned(),
324
+ ));
325
+ }
326
+ }
327
+ let mut out = Vec::new();
328
+ let (mut lo, mut hi) = (Vec::new(), Vec::new());
329
+ for (start, end) in ranges {
330
+ let s = match start {
331
+ Bound::Included(s) | Bound::Excluded(s) => {
332
+ let mut k = Vec::new();
333
+ encode_row_prefix(&mut k, s)?;
334
+ Some(k)
335
+ }
336
+ Bound::Unbounded => None,
337
+ };
338
+ let e = match end {
339
+ Bound::Excluded(e) => {
340
+ let mut k = Vec::new();
341
+ encode_row_prefix(&mut k, e)?;
342
+ Some(k)
343
+ }
344
+ Bound::Included(e) => {
345
+ let mut k = Vec::new();
346
+ encode_row_prefix(&mut k, e)?;
347
+ let mut past = Vec::new();
348
+ past_row(&k, &mut past);
349
+ Some(past)
350
+ }
351
+ Bound::Unbounded => None,
352
+ };
353
+ for tablet in view.tablets().tablets_of(table) {
354
+ let (has_lo, has_hi) =
355
+ clamp_into(tablet, s.as_deref(), e.as_deref(), &mut lo, &mut hi)?;
356
+ if has_lo && has_hi && lo >= hi {
357
+ continue;
358
+ }
359
+ out.push(Group {
360
+ tablet,
361
+ start,
362
+ end,
363
+ lo: has_lo.then(|| lo.clone()),
364
+ hi: has_hi.then(|| hi.clone()),
365
+ });
366
+ }
367
+ }
368
+ Ok(out)
369
+ }
370
+
371
+ /// Whether every row a range ending at `end` holds comes before every row a range starting
372
+ /// at `start` holds.
373
+ fn before(end: &Bound<Vec<u8>>, start: &Bound<Vec<u8>>) -> bool {
374
+ match (end, start) {
375
+ (Bound::Unbounded, _) | (_, Bound::Unbounded) => false,
376
+ (Bound::Included(e), Bound::Included(s)) => e < s,
377
+ (Bound::Included(e) | Bound::Excluded(e), Bound::Excluded(s))
378
+ | (Bound::Excluded(e), Bound::Included(s)) => e <= s,
379
+ }
380
+ }
381
+
382
+ /// Entries the group's sources hold (SSTs it may read, memtables): an over-estimate after a
383
+ /// split, enough to decide whether fan-out pays.
384
+ fn estimate(view: &View, families: &[FamilyId], g: &Group<'_>) -> u64 {
385
+ let mut n = 0;
386
+ for &family in families {
387
+ let located = view.locate(g.tablet.shard, g.tablet.id, family);
388
+ if let Some(ssts) = located.ssts {
389
+ n += ssts
390
+ .levels
391
+ .iter()
392
+ .flatten()
393
+ .map(|s| s.meta.entries)
394
+ .sum::<u64>();
395
+ }
396
+ if let Some(mems) = located.mems {
397
+ n += mems.readers.iter().map(|r| r.len() as u64).sum::<u64>();
398
+ }
399
+ }
400
+ n
401
+ }
402
+
403
+ /// What a group's read needs from the call.
404
+ struct Ctx<'a> {
405
+ snapshot: &'a Snapshot,
406
+ /// For the `Keys` input's cursors (their async-read counters).
407
+ shared: &'a Arc<crate::shard::Shared>,
408
+ input: &'a ReadInput,
409
+ families: &'a [FamilyId],
410
+ read: &'a ReadSpec,
411
+ now: Timestamp,
412
+ abort: &'a AtomicBool,
413
+ resume: Option<&'a Resume>,
414
+ }
415
+
416
+ /// [`ReduceSpec::resume`], checked and encoded: the row, the position's family's rank in the
417
+ /// read's family order, and the key just past every version of the column.
418
+ pub(super) struct Resume {
419
+ row: Vec<u8>,
420
+ rank: u32,
421
+ past: Vec<u8>,
422
+ }
423
+
424
+ impl Resume {
425
+ pub(super) fn new(
426
+ table: TableId,
427
+ families: &[FamilyId],
428
+ (row, pos): &(Vec<u8>, ColumnPosition),
429
+ ) -> Result<Self> {
430
+ if pos.table() != table {
431
+ return Err(Error::InvalidArgument(
432
+ "a position from another table".to_owned(),
433
+ ));
434
+ }
435
+ let Some(rank) = families.iter().position(|f| *f == pos.family()) else {
436
+ return Err(Error::InvalidArgument(
437
+ "a position whose family the read does not select".to_owned(),
438
+ ));
439
+ };
440
+ let mut col = Vec::new();
441
+ pigeonhole_format::key::encode_column_prefix(&mut col, row, pos.qualifier())?;
442
+ let mut past = Vec::new();
443
+ past_row(&col, &mut past);
444
+ Ok(Self {
445
+ row: row.clone(),
446
+ rank: rank as u32,
447
+ past,
448
+ })
449
+ }
450
+
451
+ /// Whether `row` (unescaped) is the position's row.
452
+ pub(super) fn is(&self, row: &[u8]) -> bool {
453
+ self.row == row
454
+ }
455
+
456
+ /// Positions the lane of family rank `rank`, pending in the position's row (escaped as
457
+ /// `row_esc`), as the resume says: dropped from the row, moved past the column, or left.
458
+ pub(super) fn apply<L: ReduceLane>(
459
+ &self,
460
+ lane: &mut L,
461
+ rank: u32,
462
+ row_esc: &[u8],
463
+ ) -> Result<()> {
464
+ if !in_row(lane, row_esc) {
465
+ return Ok(());
466
+ }
467
+ match rank.cmp(&self.rank) {
468
+ std::cmp::Ordering::Less => lane.drop_row(),
469
+ std::cmp::Ordering::Equal => {
470
+ if lane.col() < self.past.as_slice() {
471
+ lane.reseek(&self.past)?;
472
+ }
473
+ Ok(())
474
+ }
475
+ std::cmp::Ordering::Greater => Ok(()),
476
+ }
477
+ }
478
+ }
479
+
480
+ /// A lane `visit_lanes` reads: a [`Lane`] (through the MVCC resolver), or a [`PlainLane`]
481
+ /// (#1283 lever 3). A group reads through one kind only, so each is its own instance of the
482
+ /// loop, and neither pays a dispatch per cell.
483
+ pub(super) trait ReduceLane {
484
+ /// The lane's family.
485
+ fn family(&self) -> FamilyId;
486
+ /// A cell is held (fetched, not yet handed on).
487
+ fn pending(&self) -> bool;
488
+ /// No cell is left.
489
+ fn done(&self) -> bool;
490
+ /// The held cell's timestamp.
491
+ fn ts(&self) -> Timestamp;
492
+ /// Moves to the next visible cell.
493
+ fn fetch(&mut self) -> Result<()>;
494
+ /// The held cell's column prefix (only while pending).
495
+ fn col(&self) -> &[u8];
496
+ /// The held cell's stored value (only while pending).
497
+ fn value(&self) -> &[u8];
498
+ /// Drops the held cell and the rest of its row.
499
+ fn drop_row(&mut self) -> Result<()>;
500
+ /// Drops the held cell and holds the first visible one at or after `key`.
501
+ fn reseek(&mut self, key: &[u8]) -> Result<()>;
502
+ }
503
+
504
+ impl ReduceLane for Lane {
505
+ #[inline]
506
+ fn family(&self) -> FamilyId {
507
+ self.family
508
+ }
509
+ #[inline]
510
+ fn pending(&self) -> bool {
511
+ self.pending
512
+ }
513
+ #[inline]
514
+ fn done(&self) -> bool {
515
+ self.done
516
+ }
517
+ #[inline]
518
+ fn ts(&self) -> Timestamp {
519
+ self.ts
520
+ }
521
+ #[inline]
522
+ fn fetch(&mut self) -> Result<()> {
523
+ Lane::fetch(self)
524
+ }
525
+ #[inline]
526
+ fn col(&self) -> &[u8] {
527
+ Lane::col(self)
528
+ }
529
+ #[inline]
530
+ fn value(&self) -> &[u8] {
531
+ Lane::value(self)
532
+ }
533
+ fn drop_row(&mut self) -> Result<()> {
534
+ self.pending = false;
535
+ self.resolver.skip_row()
536
+ }
537
+ fn reseek(&mut self, key: &[u8]) -> Result<()> {
538
+ self.pending = false;
539
+ self.pinned = None;
540
+ self.resolver.seek(key)?;
541
+ Lane::fetch(self)
542
+ }
543
+ }
544
+
545
+ /// A lane over the one SST source of its family in the tablet, when nothing in it needs the
546
+ /// MVCC resolver (#1283 lever 3, [`plain_lane`]). A column's first entry in key order is
547
+ /// then its version (newest timestamp, then newest seqno), so the lane takes it from the
548
+ /// block as it lies and steps past the column's older entries: no merge, group walk or copy.
549
+ struct PlainLane {
550
+ family: FamilyId,
551
+ src: Source,
552
+ /// The view's SSTs and blob files, to read separated values.
553
+ ssts: Arc<SstSet>,
554
+ /// The column prefix of the cell last taken: an entry still in it is an older version.
555
+ col: Vec<u8>,
556
+ /// The group's end (an encoded row prefix), as `CellResolver::set_upper_bound`.
557
+ hi: Option<Vec<u8>>,
558
+ /// The source is on the held cell (it moves past it on the next fetch).
559
+ held: bool,
560
+ ts: Timestamp,
561
+ /// A separated value, read from its blob file.
562
+ pinned: Option<LaneValue>,
563
+ pending: bool,
564
+ done: bool,
565
+ }
566
+
567
+ impl PlainLane {
568
+ /// The lane `lane` (opened by `open_lanes`, plain by [`plain_lane`]) as a plain one: its
569
+ /// SST source, seeked to the group's start. The resolver goes back to the pool.
570
+ fn from_lane(mut lane: Lane, g: &Group<'_>) -> Result<PlainLane> {
571
+ let mut sources = std::mem::take(lane.resolver.cursor_mut().sources_mut());
572
+ give_back(lane.resolver);
573
+ // The empty memtables' sources go (`plain_lane` checked they hold nothing).
574
+ sources.retain(|s| matches!(s, Source::Sst(_)));
575
+ let mut src = sources.pop().expect("plain_lane checked one SST source");
576
+ src.seek(g.lo.as_deref().unwrap_or(&[]))?;
577
+ Ok(PlainLane {
578
+ family: lane.family,
579
+ src,
580
+ ssts: lane.ssts,
581
+ col: Vec::new(),
582
+ hi: g.hi.clone(),
583
+ held: false,
584
+ ts: 0,
585
+ pinned: None,
586
+ pending: false,
587
+ done: false,
588
+ })
589
+ }
590
+ }
591
+
592
+ impl ReduceLane for PlainLane {
593
+ #[inline]
594
+ fn family(&self) -> FamilyId {
595
+ self.family
596
+ }
597
+ #[inline]
598
+ fn pending(&self) -> bool {
599
+ self.pending
600
+ }
601
+ #[inline]
602
+ fn done(&self) -> bool {
603
+ self.done
604
+ }
605
+ #[inline]
606
+ fn ts(&self) -> Timestamp {
607
+ self.ts
608
+ }
609
+ fn fetch(&mut self) -> Result<()> {
610
+ self.pending = false;
611
+ self.pinned = None;
612
+ if self.done {
613
+ return Ok(());
614
+ }
615
+ if std::mem::take(&mut self.held) {
616
+ self.src.next()?;
617
+ }
618
+ while self.src.valid() {
619
+ let key = self.src.key();
620
+ if self.hi.as_deref().is_some_and(|hi| key >= hi) {
621
+ break;
622
+ }
623
+ let (col, ts, _, kind) = pigeonhole_format::key::split_suffix(key)?;
624
+ if col == self.col.as_slice() {
625
+ // An older version of the column just taken.
626
+ self.src.next()?;
627
+ continue;
628
+ }
629
+ if kind != pigeonhole_format::Kind::Put {
630
+ // `plain_lane` checked the SSTs hold no deletes, and the family no operands.
631
+ return Err(Error::Corruption(
632
+ "an entry other than a put in an SST counted without deletes or operands"
633
+ .into(),
634
+ ));
635
+ }
636
+ self.col.clear();
637
+ self.col.extend_from_slice(col);
638
+ self.held = true;
639
+ self.ts = ts;
640
+ if let Some(v) = self.ssts.read_blob(self.src.value())? {
641
+ self.pinned = Some(LaneValue::Pinned(Pinned::Block(v)));
642
+ }
643
+ self.pending = true;
644
+ return Ok(());
645
+ }
646
+ self.done = true;
647
+ Ok(())
648
+ }
649
+ #[inline]
650
+ fn col(&self) -> &[u8] {
651
+ column_of(self.src.key())
652
+ }
653
+ #[inline]
654
+ fn value(&self) -> &[u8] {
655
+ match &self.pinned {
656
+ Some(v) => v,
657
+ None => self.src.value(),
658
+ }
659
+ }
660
+ fn drop_row(&mut self) -> Result<()> {
661
+ // The source is on the held cell, in the row: skip from there.
662
+ self.pending = false;
663
+ self.held = false;
664
+ self.src.skip_row()
665
+ }
666
+ fn reseek(&mut self, key: &[u8]) -> Result<()> {
667
+ self.pending = false;
668
+ self.held = false;
669
+ self.col.clear();
670
+ self.src.seek(key)?;
671
+ self.fetch()
672
+ }
673
+ }
674
+
675
+ /// Whether a lane with `sources` (filled for `located` with `filter`) and options `opts` can
676
+ /// read plain ([`PlainLane`]) at read point `snapshot`. Checked once, when the lane opens
677
+ /// (simp724's review on #1283):
678
+ /// 1. one SST source (an SST, or one level's SSTs), and every memtable of the family here
679
+ /// empty. `scan_sources_located` adds a source for every memtable, the empty active one
680
+ /// included; one empty when the lane opens holds nothing at or below the read point,
681
+ /// since every commit there applied before the read point became visible;
682
+ /// 2. no delete entries (cell, column or family: `SstMeta::deletes` counts every kind) in
683
+ /// any of the family's SSTs here;
684
+ /// 3. every entry at or below the read point;
685
+ /// 4. a standard or vector family (plain puts) with no merge operator, known or not;
686
+ /// 5. one version, no time range (the resolver's or the filter's), no column limit and no
687
+ /// value predicate;
688
+ /// 6. no TTL.
689
+ fn plain_lane(
690
+ located: &Located<'_>,
691
+ meta: &FamilyMeta,
692
+ opts: &pigeonhole_compaction::ResolveOptions,
693
+ filter: &pigeonhole_format::scan::ScanFilter,
694
+ sources: &[Source],
695
+ snapshot: pigeonhole_format::Seqno,
696
+ ) -> bool {
697
+ let Some(ssts) = located.ssts else {
698
+ return false;
699
+ };
700
+ sources.iter().filter(|s| matches!(s, Source::Sst(_))).count() == 1
701
+ && located
702
+ .mems
703
+ .is_none_or(|m| m.readers.iter().all(|r| r.is_empty()))
704
+ && ssts
705
+ .iter()
706
+ .all(|s| s.meta.deletes == 0 && s.meta.seqno_range.1 <= snapshot)
707
+ // A kind added later stays out until listed here.
708
+ && matches!(
709
+ meta.options.kind,
710
+ pigeonhole_format::manifest::FamilyKind::Standard
711
+ | pigeonhole_format::manifest::FamilyKind::Vector
712
+ )
713
+ // `merge_op` alone is also `None` for an operator this build doesn't know
714
+ // (`MergeKind::Unknown`), whose operands are still there.
715
+ && meta.merge == MergeKind::None
716
+ && meta.merge_op.is_none()
717
+ && meta.options.ttl_micros == 0
718
+ && opts.versions == 1
719
+ && opts.time_range.is_none()
720
+ && filter.time_range.is_none()
721
+ && opts.columns_per_row == 0
722
+ && opts.value.is_none()
723
+ }
724
+
725
+ /// Opens the group's lanes, one per family with data in the tablet's range, each seeked to
726
+ /// the group's start: [`super::ScanCursor`]'s tablet opening, for one tablet.
727
+ fn open_lanes(
728
+ ctx: &Ctx<'_>,
729
+ g: &Group<'_>,
730
+ lanes: &mut Vec<Lane>,
731
+ plain: &mut Vec<bool>,
732
+ ) -> Result<()> {
733
+ let view = &ctx.snapshot.view;
734
+ for &family in ctx.families {
735
+ let located = view.locate(g.tablet.shard, g.tablet.id, family);
736
+ if !located.has_data() {
737
+ continue;
738
+ }
739
+ let Some(meta) = view.catalog.family(family) else {
740
+ continue;
741
+ };
742
+ let (mut opts, filter) = ctx.read.resolve_opts(meta, ctx.snapshot.seqno, ctx.now);
743
+ let resolver_blobs = super::ResolverBlobs::attach(&mut opts, &view.ssts);
744
+ let mut resolver = take_scan_resolver();
745
+ let filled = view.scan_sources_located::<false>(
746
+ &located,
747
+ &filter,
748
+ g.lo.as_deref(),
749
+ g.hi.as_deref(),
750
+ false,
751
+ resolver.cursor_mut().sources_mut(),
752
+ );
753
+ if let Err(e) = filled {
754
+ give_back(resolver);
755
+ return Err(e);
756
+ }
757
+ if resolver.cursor_mut().sources().is_empty() {
758
+ give_back(resolver);
759
+ continue;
760
+ }
761
+ opts.skip_columns = skips_columns(resolver.cursor_mut().sources());
762
+ plain.push(plain_lane(
763
+ &located,
764
+ meta,
765
+ &opts,
766
+ &filter,
767
+ resolver.cursor_mut().sources(),
768
+ ctx.snapshot.seqno,
769
+ ));
770
+ resolver.cursor_mut().reset();
771
+ resolver.reset(opts);
772
+ resolver.set_upper_bound(g.hi.as_deref());
773
+ lanes.push(Lane {
774
+ family,
775
+ unknown_merge: (meta.merge == MergeKind::Unknown)
776
+ .then(|| meta.options.merge_operator.clone()),
777
+ resolver,
778
+ grew: false,
779
+ ssts: Arc::clone(&view.ssts),
780
+ resolver_blobs,
781
+ ts: 0,
782
+ pinned: None,
783
+ pending: false,
784
+ done: false,
785
+ });
786
+ let lane = lanes.last_mut().expect("pushed above");
787
+ lane.resolver.seek(g.lo.as_deref().unwrap_or(&[]))?;
788
+ }
789
+ Ok(())
790
+ }
791
+
792
+ /// The family's position in the read's family order.
793
+ fn rank_of(families: &[FamilyId], family: FamilyId) -> u32 {
794
+ families
795
+ .iter()
796
+ .position(|f| *f == family)
797
+ .unwrap_or(usize::MAX) as u32
798
+ }
799
+
800
+ /// Whether the lane's pending cell is in the row whose escaped key is `row_esc`.
801
+ pub(super) fn in_row<L: ReduceLane>(lane: &L, row_esc: &[u8]) -> bool {
802
+ if !lane.pending() {
803
+ return false;
804
+ }
805
+ let col = lane.col();
806
+ let row_len = row_esc.len() + TERMINATOR.len();
807
+ col.len() >= row_len && col.starts_with(row_esc) && col[row_esc.len()..row_len] == TERMINATOR
808
+ }
809
+
810
+ /// Drops the rest of the row in every lane (a seek past it).
811
+ fn skip_row<L: ReduceLane>(lanes: &mut [L], row_esc: &[u8]) -> Result<()> {
812
+ for lane in lanes {
813
+ if in_row(lane, row_esc) {
814
+ lane.drop_row()?;
815
+ }
816
+ }
817
+ Ok(())
818
+ }
819
+
820
+ /// Reads one group into `reducer`; `true` when the reducer broke (it has all it can take).
821
+ fn run_group<V, R>(
822
+ ctx: &Ctx<'_>,
823
+ g: &Group<'_>,
824
+ visitor: &mut V,
825
+ reducer: &mut R,
826
+ stats: &mut ReduceStats,
827
+ ) -> Result<bool>
828
+ where
829
+ V: CellVisitor<Item = R::Item>,
830
+ R: Reducer,
831
+ {
832
+ ctx.snapshot.check_process()?;
833
+ let mut lanes = Vec::new();
834
+ let mut plain = Vec::new();
835
+ let opened = open_lanes(ctx, g, &mut lanes, &mut plain);
836
+ // Each lane's family position in the read's family order, once per group (perf287's
837
+ // nit on #1209: not a search per cell).
838
+ let ranks: Vec<u32> = lanes
839
+ .iter()
840
+ .map(|l| rank_of(ctx.families, l.family))
841
+ .collect();
842
+ if opened.is_ok() && !lanes.is_empty() && plain.iter().all(|p| *p) {
843
+ // Every lane plain (#1283 lever 3): the group reads through `PlainLane`s, a second
844
+ // instance of `visit_lanes`, so neither kind of lane pays for the other per cell.
845
+ let mut plains = Vec::with_capacity(lanes.len());
846
+ let mut moved = Ok(());
847
+ for lane in lanes {
848
+ match moved.and_then(|()| PlainLane::from_lane(lane, g)) {
849
+ Ok(p) => {
850
+ plains.push(p);
851
+ moved = Ok(());
852
+ }
853
+ Err(e) => moved = Err(e),
854
+ }
855
+ }
856
+ stats.plain_lanes += plains.len() as u64;
857
+ let read =
858
+ moved.and_then(|()| visit_lanes(ctx, g, &mut plains, &ranks, visitor, reducer, stats));
859
+ stats.groups += 1;
860
+ return ctx.snapshot.checked(read);
861
+ }
862
+ let read =
863
+ opened.and_then(|()| visit_lanes(ctx, g, &mut lanes, &ranks, visitor, reducer, stats));
864
+ for lane in lanes {
865
+ if !lane.grew {
866
+ give_back(lane.resolver);
867
+ }
868
+ }
869
+ stats.groups += 1;
870
+ ctx.snapshot.checked(read)
871
+ }
872
+
873
+ fn visit_lanes<V, R, L>(
874
+ ctx: &Ctx<'_>,
875
+ g: &Group<'_>,
876
+ lanes: &mut [L],
877
+ ranks: &[u32],
878
+ visitor: &mut V,
879
+ reducer: &mut R,
880
+ stats: &mut ReduceStats,
881
+ ) -> Result<bool>
882
+ where
883
+ V: CellVisitor<Item = R::Item>,
884
+ R: Reducer,
885
+ L: ReduceLane,
886
+ {
887
+ let (mut row_esc, mut row, mut qualifier) = (Vec::new(), Vec::new(), Vec::new());
888
+ loop {
889
+ if ctx.abort.load(Ordering::Relaxed) {
890
+ return Ok(false);
891
+ }
892
+ for lane in lanes.iter_mut() {
893
+ if !lane.pending() && !lane.done() {
894
+ lane.fetch()?;
895
+ }
896
+ }
897
+ // The smallest pending row across lanes.
898
+ let Some(best) = lanes
899
+ .iter()
900
+ .filter(|l| l.pending())
901
+ .map(|l| row_of(l.col()))
902
+ .min()
903
+ else {
904
+ return Ok(false);
905
+ };
906
+ row_esc.clear();
907
+ row_esc.extend_from_slice(best);
908
+ row.clear();
909
+ Escaped::new(&row_esc).unescape_long_into(&mut row);
910
+ if matches!(g.start, Bound::Excluded(s) if *s == row) {
911
+ skip_row(lanes, &row_esc)?;
912
+ continue;
913
+ }
914
+ let past = match g.end {
915
+ Bound::Included(e) => row > *e,
916
+ Bound::Excluded(e) => row >= *e,
917
+ Bound::Unbounded => false,
918
+ };
919
+ if past {
920
+ return Ok(false);
921
+ }
922
+ if let Some(r) = ctx.resume
923
+ && r.is(&row)
924
+ {
925
+ for (lane, &rank) in lanes.iter_mut().zip(ranks) {
926
+ r.apply(lane, rank, &row_esc)?;
927
+ }
928
+ if !lanes.iter().any(|l| in_row(l, &row_esc)) {
929
+ continue;
930
+ }
931
+ }
932
+ stats.rows += 1;
933
+ if stats.rows.is_multiple_of(FORK_CHECK_ROWS) {
934
+ ctx.snapshot.check_process()?;
935
+ }
936
+ let row_len = row_esc.len() + TERMINATOR.len();
937
+ let mut next_row = false;
938
+ 'lanes: for (lane, &family_rank) in lanes.iter_mut().zip(ranks) {
939
+ while in_row(lane, &row_esc) {
940
+ let col = lane.col();
941
+ let end = col.len().saturating_sub(2).max(row_len);
942
+ // Unescaped before the visit only for a visitor that reads it; otherwise only
943
+ // for an item the reducer admits (#1283 lever 1).
944
+ if V::QUALIFIER {
945
+ qualifier.clear();
946
+ Escaped::new(&col[row_len..end]).unescape_into(&mut qualifier);
947
+ }
948
+ stats.cells += 1;
949
+ let q: &[u8] = if V::QUALIFIER { &qualifier } else { &[] };
950
+ let visit = visitor.visit(&row, lane.family(), q, lane.ts(), lane.value());
951
+ let (item, after) = match visit {
952
+ Visit::Skip => (None, None),
953
+ Visit::Emit(item) => (Some(item), None),
954
+ Visit::EmitAndNextRow(item) => (Some(item), Some(false)),
955
+ Visit::NextRow => (None, Some(false)),
956
+ Visit::Stop => return Ok(false),
957
+ };
958
+ if let Some(item) = item
959
+ && (V::QUALIFIER || reducer.admits(&item))
960
+ {
961
+ if !V::QUALIFIER {
962
+ let col = lane.col();
963
+ qualifier.clear();
964
+ Escaped::new(&col[row_len..end]).unescape_into(&mut qualifier);
965
+ }
966
+ let cell = CellRef {
967
+ row: &row,
968
+ family_rank,
969
+ family: lane.family(),
970
+ qualifier: &qualifier,
971
+ ts: lane.ts(),
972
+ };
973
+ if reducer.push(cell, item).is_break() {
974
+ return Ok(true);
975
+ }
976
+ }
977
+ if after.is_some() {
978
+ next_row = true;
979
+ break 'lanes;
980
+ }
981
+ lane.fetch()?;
982
+ }
983
+ }
984
+ if next_row {
985
+ skip_row(lanes, &row_esc)?;
986
+ }
987
+ }
988
+ }
989
+
990
+ /// Reads one key group into `reducer` through its own [`KeyCursor`] (D296 PR 2): the visitor
991
+ /// sees each present key's resolved cells in place, as for a range; `NextRow` skips the rest
992
+ /// of the key without reading it. `true` when the reducer broke.
993
+ fn run_keys<V, R>(
994
+ ctx: &Ctx<'_>,
995
+ group: &KeyGroup,
996
+ visitor: &mut V,
997
+ reducer: &mut R,
998
+ stats: &mut ReduceStats,
999
+ ) -> Result<bool>
1000
+ where
1001
+ V: CellVisitor<Item = R::Item>,
1002
+ R: Reducer,
1003
+ {
1004
+ let ReadInput::Keys(keys) = &ctx.input else {
1005
+ unreachable!("a key group comes from a Keys input");
1006
+ };
1007
+ let mut cur = KeyCursor::for_group(
1008
+ ctx.snapshot.clone(),
1009
+ ctx.families.to_vec(),
1010
+ ctx.read.clone(),
1011
+ ctx.now,
1012
+ Arc::clone(keys),
1013
+ group.clone(),
1014
+ Arc::clone(ctx.shared),
1015
+ );
1016
+ stats.groups += 1;
1017
+ let mut row = Vec::new();
1018
+ // Cells come grouped by family: the rank of the last family seen, looked up once.
1019
+ let mut rank: Option<(FamilyId, u32)> = None;
1020
+ while let Some(i) = cur.next_key()? {
1021
+ if ctx.abort.load(Ordering::Relaxed) {
1022
+ return Ok(false);
1023
+ }
1024
+ row.clear();
1025
+ row.extend_from_slice(keys.get(i));
1026
+ if let Some(r) = ctx.resume
1027
+ && r.is(&row)
1028
+ && !cur.resume_in_row(r)?
1029
+ {
1030
+ continue;
1031
+ }
1032
+ stats.rows += 1;
1033
+ loop {
1034
+ let Some(c) = cur.next_cell()? else {
1035
+ break;
1036
+ };
1037
+ stats.cells += 1;
1038
+ let family_rank = match rank {
1039
+ Some((f, r)) if f == c.family => r,
1040
+ _ => {
1041
+ let r = rank_of(ctx.families, c.family);
1042
+ rank = Some((c.family, r));
1043
+ r
1044
+ }
1045
+ };
1046
+ let cell = CellRef {
1047
+ row: &row,
1048
+ family_rank,
1049
+ family: c.family,
1050
+ qualifier: c.qualifier,
1051
+ ts: c.ts,
1052
+ };
1053
+ let (item, next_row) = match visitor.visit(&row, c.family, c.qualifier, c.ts, c.stored)
1054
+ {
1055
+ Visit::Skip => (None, false),
1056
+ Visit::Emit(item) => (Some(item), false),
1057
+ Visit::EmitAndNextRow(item) => (Some(item), true),
1058
+ Visit::NextRow => (None, true),
1059
+ Visit::Stop => return Ok(false),
1060
+ };
1061
+ if let Some(item) = item
1062
+ && reducer.push(cell, item).is_break()
1063
+ {
1064
+ return Ok(true);
1065
+ }
1066
+ if next_row {
1067
+ cur.skip_rest_of_key();
1068
+ break;
1069
+ }
1070
+ }
1071
+ }
1072
+ Ok(false)
1073
+ }
1074
+
1075
+ /// [`Engine::reduce`](crate::Engine::reduce): [`reduce_into`], then the merged reducer's
1076
+ /// [`Reducer::finish`].
1077
+ pub(crate) fn reduce<V, R>(
1078
+ snapshot: &Snapshot,
1079
+ table: TableId,
1080
+ families: &[FamilyId],
1081
+ spec: &ReduceSpec,
1082
+ ctx: (Timestamp, bool, &Arc<crate::shard::Shared>),
1083
+ visitor: &(impl Fn() -> V + Sync),
1084
+ reducer: &(impl Fn() -> R + Sync),
1085
+ ) -> Result<Reduced<R::Item>>
1086
+ where
1087
+ V: CellVisitor<Item = R::Item>,
1088
+ R: Reducer,
1089
+ {
1090
+ let (acc, stats) = reduce_into(snapshot, table, families, spec, ctx, visitor, reducer)?;
1091
+ Ok(Reduced {
1092
+ items: acc.finish(),
1093
+ stats,
1094
+ })
1095
+ }
1096
+
1097
+ /// The groups, sequential or fanned out, merged into one reducer and handed back unfinished,
1098
+ /// for a caller that takes its result in another form (traversal's `DedupeLimit::into_nodes`,
1099
+ /// D304).
1100
+ pub(crate) fn reduce_into<V, R>(
1101
+ snapshot: &Snapshot,
1102
+ table: TableId,
1103
+ families: &[FamilyId],
1104
+ spec: &ReduceSpec,
1105
+ (now, may_fan_out, shared): (Timestamp, bool, &Arc<crate::shard::Shared>),
1106
+ visitor: &(impl Fn() -> V + Sync),
1107
+ reducer: &(impl Fn() -> R + Sync),
1108
+ ) -> Result<(R, ReduceStats)>
1109
+ where
1110
+ V: CellVisitor<Item = R::Item>,
1111
+ R: Reducer,
1112
+ {
1113
+ let view = Arc::clone(&snapshot.view);
1114
+ let resume = spec
1115
+ .resume
1116
+ .as_ref()
1117
+ .map(|r| Resume::new(table, families, r))
1118
+ .transpose()?;
1119
+ // perf287's N1 on #1264: an excluded start skips its row before the resume could apply.
1120
+ if let (Some((row, _)), ReadInput::Ranges(ranges)) = (&spec.resume, &spec.input)
1121
+ && ranges
1122
+ .iter()
1123
+ .any(|(start, _)| matches!(start, Bound::Excluded(s) if s == row))
1124
+ {
1125
+ return Err(Error::InvalidArgument(
1126
+ "a resume in a row that a range's excluded start skips: start the range at the \
1127
+ row, included"
1128
+ .to_owned(),
1129
+ ));
1130
+ }
1131
+ let groups = work(snapshot, table, &spec.input)?;
1132
+ let abort = AtomicBool::new(false);
1133
+ let ctx = Ctx {
1134
+ snapshot,
1135
+ shared,
1136
+ input: &spec.input,
1137
+ families,
1138
+ read: &spec.read,
1139
+ now,
1140
+ abort: &abort,
1141
+ resume: resume.as_ref(),
1142
+ };
1143
+ let threads = if may_fan_out && spec.parallelism > 1 && groups.len() > 1 {
1144
+ let by_work = match spec.parallel_floor {
1145
+ 0 => usize::MAX,
1146
+ floor => {
1147
+ let total: u64 = groups
1148
+ .iter()
1149
+ .map(|w| match w {
1150
+ Work::Range(g) => estimate(&view, families, g),
1151
+ Work::Keys(k) => k.keys.len() as u64,
1152
+ })
1153
+ .sum();
1154
+ usize::try_from(total / floor).unwrap_or(usize::MAX).max(1)
1155
+ }
1156
+ };
1157
+ spec.parallelism.min(groups.len()).min(by_work)
1158
+ } else {
1159
+ 1
1160
+ };
1161
+ // One visitor per group. `true` when the reducer broke.
1162
+ let run_into = |w: &Work<'_>, r: &mut R, stats: &mut ReduceStats| -> Result<bool> {
1163
+ let mut v = visitor();
1164
+ match w {
1165
+ Work::Range(g) => run_group(&ctx, g, &mut v, r, stats),
1166
+ Work::Keys(k) => run_keys(&ctx, k, &mut v, r, stats),
1167
+ }
1168
+ };
1169
+ // Fanned out, one reducer per group as well: a group stops only on its own account.
1170
+ let run = |w: &Work<'_>, stats: &mut ReduceStats| -> Result<R> {
1171
+ let mut r = reducer();
1172
+ run_into(w, &mut r, stats)?;
1173
+ Ok(r)
1174
+ };
1175
+ let mut stats = ReduceStats::default();
1176
+ let mut acc = reducer();
1177
+ if threads <= 1 {
1178
+ // Sequentially, every group pushes into the one accumulator (D308 B2). The groups
1179
+ // are in key order, so its pushes are the read's cells in order, exactly as one
1180
+ // scan would push them; a `Break` means the whole read has what it needs, and the
1181
+ // groups after it are not read. No per-group merge.
1182
+ for g in &groups {
1183
+ if run_into(g, &mut acc, &mut stats)? {
1184
+ break;
1185
+ }
1186
+ }
1187
+ stats.threads = 1;
1188
+ } else {
1189
+ let next = AtomicUsize::new(0);
1190
+ let results: Vec<Result<(R, ReduceStats)>> = std::thread::scope(|s| {
1191
+ let workers: Vec<_> = (0..threads)
1192
+ .map(|_| {
1193
+ s.spawn(|| -> Result<(R, ReduceStats)> {
1194
+ let mut mine = reducer();
1195
+ let mut st = ReduceStats::default();
1196
+ loop {
1197
+ let i = next.fetch_add(1, Ordering::Relaxed);
1198
+ let Some(g) = groups.get(i) else {
1199
+ return Ok((mine, st));
1200
+ };
1201
+ match run(g, &mut st) {
1202
+ Ok(r) => mine.merge(r),
1203
+ Err(e) => {
1204
+ abort.store(true, Ordering::Relaxed);
1205
+ return Err(e);
1206
+ }
1207
+ }
1208
+ }
1209
+ })
1210
+ })
1211
+ .collect();
1212
+ workers
1213
+ .into_iter()
1214
+ // A worker's panic is the caller's, as it would be on the caller's thread.
1215
+ .map(|w| w.join().unwrap_or_else(|p| std::panic::resume_unwind(p)))
1216
+ .collect()
1217
+ });
1218
+ for r in results {
1219
+ let (r, st) = r?;
1220
+ acc.merge(r);
1221
+ stats.add(&st);
1222
+ }
1223
+ stats.threads = threads as u64;
1224
+ }
1225
+ Ok((acc, stats))
1226
+ }
1227
+
1228
+ /// The `k` items with the smallest scores, ties broken by cell order: a total order, so the
1229
+ /// result is the same at any fan-out and in any push order (D296 R1).
1230
+ #[derive(Debug, Clone)]
1231
+ pub struct TopK<S> {
1232
+ k: usize,
1233
+ /// Sorted ascending by (score, cell); at most `k`.
1234
+ kept: Vec<(S, CellKey)>,
1235
+ }
1236
+
1237
+ impl<S: Ord> TopK<S> {
1238
+ /// Keeps the `k` smallest scores.
1239
+ pub fn new(k: usize) -> Self {
1240
+ Self {
1241
+ k,
1242
+ kept: Vec::with_capacity(k.min(1024) + 1),
1243
+ }
1244
+ }
1245
+
1246
+ /// Whether `(score, cell)` would enter.
1247
+ fn enters(&self, score: &S, cell: CellRef<'_>) -> bool {
1248
+ if self.k == 0 {
1249
+ return false;
1250
+ }
1251
+ match self.kept.last() {
1252
+ Some((ws, wc)) if self.kept.len() == self.k => (score, cell) < (ws, wc.as_ref()),
1253
+ _ => true,
1254
+ }
1255
+ }
1256
+
1257
+ fn insert(&mut self, score: S, key: CellKey) {
1258
+ if !self.enters(&score, key.as_ref()) {
1259
+ return;
1260
+ }
1261
+ let at = self.kept.partition_point(|(s, k)| (s, k) < (&score, &key));
1262
+ self.kept.insert(at, (score, key));
1263
+ self.kept.truncate(self.k);
1264
+ }
1265
+ }
1266
+
1267
+ impl<S: Ord + Send> Reducer for TopK<S> {
1268
+ type Item = S;
1269
+
1270
+ fn push(&mut self, cell: CellRef<'_>, item: S) -> ControlFlow<()> {
1271
+ // Only a candidate that enters is copied.
1272
+ if self.enters(&item, cell) {
1273
+ self.insert(item, cell.to_key());
1274
+ }
1275
+ ControlFlow::Continue(())
1276
+ }
1277
+
1278
+ /// A score above the worst kept one, with `k` kept, can't enter whatever its cell; one
1279
+ /// equal to it can, by a smaller cell.
1280
+ #[inline]
1281
+ fn admits(&self, item: &S) -> bool {
1282
+ match self.kept.last() {
1283
+ Some((worst, _)) if self.kept.len() == self.k => item <= worst,
1284
+ _ => self.k > 0,
1285
+ }
1286
+ }
1287
+
1288
+ fn merge(&mut self, other: Self) {
1289
+ for (s, key) in other.kept {
1290
+ self.insert(s, key);
1291
+ }
1292
+ }
1293
+
1294
+ fn finish(self) -> Vec<(CellKey, S)> {
1295
+ self.kept.into_iter().map(|(s, k)| (k, s)).collect()
1296
+ }
1297
+ }
1298
+
1299
+ /// The first `n` cells in scan order. A group pushes in that order and stops at its own n-th;
1300
+ /// merging keeps the `n` smallest cells, which is the sequential first `n` (D296 rev 1.2).
1301
+ #[derive(Debug, Clone)]
1302
+ pub struct Limit<I> {
1303
+ n: usize,
1304
+ /// In cell order; at most `n`.
1305
+ kept: Vec<(CellKey, I)>,
1306
+ }
1307
+
1308
+ impl<I> Limit<I> {
1309
+ /// Keeps the first `n`.
1310
+ pub fn new(n: usize) -> Self {
1311
+ Self {
1312
+ n,
1313
+ kept: Vec::new(),
1314
+ }
1315
+ }
1316
+ }
1317
+
1318
+ impl<I: Send> Reducer for Limit<I> {
1319
+ type Item = I;
1320
+
1321
+ fn push(&mut self, cell: CellRef<'_>, item: I) -> ControlFlow<()> {
1322
+ if self.kept.len() >= self.n {
1323
+ return ControlFlow::Break(());
1324
+ }
1325
+ // A group pushes in cell order, so this appends.
1326
+ debug_assert!(self.kept.last().is_none_or(|(k, _)| k.as_ref() < cell));
1327
+ self.kept.push((cell.to_key(), item));
1328
+ if self.kept.len() >= self.n {
1329
+ ControlFlow::Break(())
1330
+ } else {
1331
+ ControlFlow::Continue(())
1332
+ }
1333
+ }
1334
+
1335
+ fn merge(&mut self, other: Self) {
1336
+ let mut all = std::mem::take(&mut self.kept);
1337
+ all.extend(other.kept);
1338
+ all.sort_by(|a, b| a.0.cmp(&b.0));
1339
+ all.truncate(self.n);
1340
+ self.kept = all;
1341
+ }
1342
+
1343
+ fn finish(self) -> Vec<(CellKey, I)> {
1344
+ self.kept
1345
+ }
1346
+ }
1347
+
1348
+ /// D308: the per-item overhead in a budget's size, standing for the timestamp (8 bytes), the
1349
+ /// family and the item's framing. Stable from 1.1.0.
1350
+ pub const BUDGET_ITEM_OVERHEAD: u64 = 16;
1351
+
1352
+ /// The first column past a [`ByteBudget`]'s prefix: its first cell, and its size as the
1353
+ /// first item of a page (every version the read selects, plus the row key).
1354
+ #[derive(Debug, Clone, PartialEq, Eq)]
1355
+ pub struct Overflow {
1356
+ /// The column's first cell.
1357
+ pub key: CellKey,
1358
+ /// Its size, the row key included: a budget of this size returns it whole when a read
1359
+ /// resumes at it.
1360
+ pub bytes: u64,
1361
+ }
1362
+
1363
+ /// A [`ByteBudget`]'s result.
1364
+ #[derive(Debug)]
1365
+ #[non_exhaustive]
1366
+ pub struct BytePage<I> {
1367
+ /// The kept cells, in cell order.
1368
+ pub items: Vec<(CellKey, I)>,
1369
+ /// Their size by D308's rule: each item's own size, plus each row's key once.
1370
+ pub bytes: u64,
1371
+ /// The first column that didn't fit, when the budget cut the read.
1372
+ pub overflow: Option<Overflow>,
1373
+ /// Whether [`ByteBudget::with_rows`]'s row limit stopped the read first: true only when
1374
+ /// a row followed the `n`-th, so an input of exactly `n` rows gives `false` (the read ran
1375
+ /// out, with nothing to resume). Then `overflow` is `None`.
1376
+ pub cut_by_rows: bool,
1377
+ }
1378
+
1379
+ struct Kept<I> {
1380
+ key: CellKey,
1381
+ item: I,
1382
+ /// The item's own size, without its row key.
1383
+ size: u64,
1384
+ }
1385
+
1386
+ /// The longest prefix of the read's cells, in cell order, whose size is at most `budget`
1387
+ /// bytes (D308): `Limit` measured in bytes, cut at column boundaries. An item's own size is
1388
+ /// `size(cell, item)` (by D308, its qualifier, its value and [`BUDGET_ITEM_OVERHEAD`]); each
1389
+ /// row's key counts once, on the row's first kept cell.
1390
+ ///
1391
+ /// A column (every version the read selects) is admitted whole or not at all: the read
1392
+ /// pushes one cell per version, so a column that doesn't fit is rolled back, and its
1393
+ /// remaining versions are counted into the [`Overflow`] before the group breaks on the next
1394
+ /// column. A group stops on its own budget (D296 rev 1.2); `merge` concatenates and cuts the
1395
+ /// global prefix again, which is exact: a row never spans two groups, so each cell's size is
1396
+ /// the same in its group as in the whole read, and a group's share of the global prefix is a
1397
+ /// prefix of its own cells that its budget already covered.
1398
+ pub struct ByteBudget<I, F, L: RowLimit = NoRowLimit> {
1399
+ budget: u64,
1400
+ size: F,
1401
+ kept: Vec<Kept<I>>,
1402
+ used: u64,
1403
+ /// The open column's first cell, and its start in `kept`.
1404
+ open: Option<CellKey>,
1405
+ open_at: usize,
1406
+ overflow: Option<Overflow>,
1407
+ /// D308's N4 (#1280): a scan's `limit` bounds the read too. [`NoRowLimit`] (the default,
1408
+ /// zero-sized) compiles every row-limit branch away, so a read without one runs exactly
1409
+ /// the budget's own code (#1284: an in-struct limit cost scan-budget 20 instructions per
1410
+ /// cell, mostly codegen around fields it never used).
1411
+ limit: L,
1412
+ }
1413
+
1414
+ /// A [`ByteBudget`]'s row limit: [`NoRowLimit`] or [`RowsLimit`].
1415
+ pub trait RowLimit: Send {
1416
+ /// Whether this limits rows at all; `false` compiles the limit's branches away.
1417
+ const LIMITED: bool;
1418
+ /// The most rows the read keeps.
1419
+ fn max_rows(&self) -> usize;
1420
+ /// Rows with a kept cell (this group's own account until `cut`).
1421
+ fn kept_rows(&self) -> usize;
1422
+ /// Sets the kept-row count.
1423
+ fn set_kept_rows(&mut self, n: usize);
1424
+ /// Whether more rows followed the limit's last.
1425
+ fn full(&self) -> bool;
1426
+ /// Records whether more rows followed the limit's last.
1427
+ fn set_full(&mut self, full: bool);
1428
+ }
1429
+
1430
+ /// No row limit: the budget alone stops the read.
1431
+ #[derive(Debug, Clone, Copy, Default)]
1432
+ pub struct NoRowLimit;
1433
+
1434
+ impl RowLimit for NoRowLimit {
1435
+ const LIMITED: bool = false;
1436
+ fn max_rows(&self) -> usize {
1437
+ usize::MAX
1438
+ }
1439
+ fn kept_rows(&self) -> usize {
1440
+ 0
1441
+ }
1442
+ fn set_kept_rows(&mut self, _: usize) {}
1443
+ fn full(&self) -> bool {
1444
+ false
1445
+ }
1446
+ fn set_full(&mut self, _: bool) {}
1447
+ }
1448
+
1449
+ /// At most `n` rows ([`ByteBudget::with_rows`]).
1450
+ #[derive(Debug, Clone, Copy)]
1451
+ pub struct RowsLimit {
1452
+ n: usize,
1453
+ kept: usize,
1454
+ full: bool,
1455
+ }
1456
+
1457
+ impl RowLimit for RowsLimit {
1458
+ const LIMITED: bool = true;
1459
+ fn max_rows(&self) -> usize {
1460
+ self.n
1461
+ }
1462
+ fn kept_rows(&self) -> usize {
1463
+ self.kept
1464
+ }
1465
+ fn set_kept_rows(&mut self, n: usize) {
1466
+ self.kept = n;
1467
+ }
1468
+ fn full(&self) -> bool {
1469
+ self.full
1470
+ }
1471
+ fn set_full(&mut self, full: bool) {
1472
+ self.full = full;
1473
+ }
1474
+ }
1475
+
1476
+ impl<I, F, L: RowLimit> std::fmt::Debug for ByteBudget<I, F, L> {
1477
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1478
+ f.debug_struct("ByteBudget")
1479
+ .field("budget", &self.budget)
1480
+ .field("kept", &self.kept.len())
1481
+ .field("used", &self.used)
1482
+ .field("overflow", &self.overflow)
1483
+ .finish()
1484
+ }
1485
+ }
1486
+
1487
+ impl<I, F: Fn(&CellRef<'_>, &I) -> u64> ByteBudget<I, F> {
1488
+ /// Keeps the in-budget prefix, an item's own size given by `size`.
1489
+ pub fn new(budget: u64, size: F) -> Self {
1490
+ Self {
1491
+ budget,
1492
+ size,
1493
+ kept: Vec::new(),
1494
+ used: 0,
1495
+ open: None,
1496
+ open_at: 0,
1497
+ overflow: None,
1498
+ limit: NoRowLimit,
1499
+ }
1500
+ }
1501
+
1502
+ /// Also stops after `n` rows (a scan's `limit`; #1280, perf287's N4 on #1281): whichever
1503
+ /// of the budget and the row limit stops the read first wins, and the read reads no
1504
+ /// further than that. A group stops at its own `n`-th row, which keeps everything the
1505
+ /// merged prefix needs from it, as `Limit` does.
1506
+ pub fn with_rows(self, n: usize) -> ByteBudget<I, F, RowsLimit> {
1507
+ ByteBudget {
1508
+ budget: self.budget,
1509
+ size: self.size,
1510
+ kept: self.kept,
1511
+ used: self.used,
1512
+ open: self.open,
1513
+ open_at: self.open_at,
1514
+ overflow: self.overflow,
1515
+ limit: RowsLimit {
1516
+ n,
1517
+ kept: 0,
1518
+ full: false,
1519
+ },
1520
+ }
1521
+ }
1522
+ }
1523
+
1524
+ impl<I, F: Fn(&CellRef<'_>, &I) -> u64, L: RowLimit> ByteBudget<I, F, L> {
1525
+ /// The result: the kept cells, their size, and the first column that didn't fit.
1526
+ pub fn into_page(mut self) -> BytePage<I> {
1527
+ self.cut();
1528
+ BytePage {
1529
+ bytes: self.used,
1530
+ overflow: self.overflow,
1531
+ cut_by_rows: self.limit.full(),
1532
+ items: self.kept.into_iter().map(|k| (k.key, k.item)).collect(),
1533
+ }
1534
+ }
1535
+
1536
+ /// Re-cuts `kept` (in cell order) to the global prefix: columns admitted whole while
1537
+ /// they fit, and nothing at or past a recorded overflow. With a row limit, also no row
1538
+ /// past the limit's last.
1539
+ fn cut(&mut self) {
1540
+ let mut used = 0u64;
1541
+ let mut keep = 0;
1542
+ let mut i = 0;
1543
+ let mut rows = 0usize;
1544
+ let mut hit_rows = false;
1545
+ let mut first_out: Option<Overflow> = None;
1546
+ while i < self.kept.len() {
1547
+ if let Some(o) = &self.overflow
1548
+ && self.kept[i].key >= o.key
1549
+ {
1550
+ break;
1551
+ }
1552
+ // The column starting at `i`.
1553
+ let mut j = i + 1;
1554
+ while j < self.kept.len() && same_column(&self.kept[j].key, &self.kept[i].key) {
1555
+ j += 1;
1556
+ }
1557
+ let row = &self.kept[i].key.row;
1558
+ let new_row = keep == 0 || self.kept[keep - 1].key.row != *row;
1559
+ if L::LIMITED && new_row && rows == self.limit.max_rows() {
1560
+ // The row limit stops first: what follows is past it.
1561
+ hit_rows = true;
1562
+ break;
1563
+ }
1564
+ let own: u64 = self.kept[i..j].iter().map(|k| k.size).sum();
1565
+ let charge = if new_row { row.len() as u64 } else { 0 };
1566
+ if used + own + charge > self.budget {
1567
+ first_out = Some(Overflow {
1568
+ key: self.kept[i].key.clone(),
1569
+ bytes: own + row.len() as u64,
1570
+ });
1571
+ break;
1572
+ }
1573
+ used += own + charge;
1574
+ if L::LIMITED {
1575
+ rows += usize::from(new_row);
1576
+ }
1577
+ keep = j;
1578
+ i = j;
1579
+ }
1580
+ let mut overflow = match (self.overflow.take(), first_out) {
1581
+ (Some(a), Some(b)) => Some(if a.key <= b.key { a } else { b }),
1582
+ (a, b) => a.or(b),
1583
+ };
1584
+ if L::LIMITED {
1585
+ // An overflow in a row past the limit's last: the row limit stopped the read
1586
+ // first.
1587
+ let last_row = keep.checked_sub(1).map(|k| self.kept[k].key.row.as_slice());
1588
+ if let Some(o) = &overflow
1589
+ && rows == self.limit.max_rows()
1590
+ && last_row != Some(o.key.row.as_slice())
1591
+ {
1592
+ overflow = None;
1593
+ hit_rows = true;
1594
+ }
1595
+ // The budget stopping first (an overflow within the limit's rows) wins over a
1596
+ // group's own row limit.
1597
+ let full = overflow.is_none() && (hit_rows || self.limit.full());
1598
+ self.limit.set_full(full);
1599
+ self.limit.set_kept_rows(rows);
1600
+ }
1601
+ self.overflow = overflow;
1602
+ self.kept.truncate(keep);
1603
+ self.used = used;
1604
+ }
1605
+ }
1606
+
1607
+ fn same_column(a: &CellKey, b: &CellKey) -> bool {
1608
+ a.row == b.row && a.family_rank == b.family_rank && a.qualifier == b.qualifier
1609
+ }
1610
+
1611
+ impl<I: Send, F: Fn(&CellRef<'_>, &I) -> u64 + Send, L: RowLimit> Reducer for ByteBudget<I, F, L> {
1612
+ type Item = I;
1613
+
1614
+ fn push(&mut self, cell: CellRef<'_>, item: I) -> ControlFlow<()> {
1615
+ let same = self.open.as_ref().is_some_and(|o| {
1616
+ o.row == cell.row && o.family_rank == cell.family_rank && o.qualifier == cell.qualifier
1617
+ });
1618
+ let size = (self.size)(&cell, &item);
1619
+ if let Some(o) = &mut self.overflow {
1620
+ // The overflow column's later versions count into its size; the next column ends
1621
+ // the group (B1).
1622
+ if same {
1623
+ o.bytes += size;
1624
+ return ControlFlow::Continue(());
1625
+ }
1626
+ return ControlFlow::Break(());
1627
+ }
1628
+ // At the row limit, a new row ends the group (a cell of the open column never starts
1629
+ // one).
1630
+ if L::LIMITED
1631
+ && !same
1632
+ && self.limit.kept_rows() == self.limit.max_rows()
1633
+ && self.kept.last().is_none_or(|k| k.key.row != cell.row)
1634
+ {
1635
+ self.limit.set_full(true);
1636
+ return ControlFlow::Break(());
1637
+ }
1638
+ if !same {
1639
+ self.open = Some(cell.to_key());
1640
+ self.open_at = self.kept.len();
1641
+ }
1642
+ // A group pushes in cell order, so this appends.
1643
+ debug_assert!(self.kept.last().is_none_or(|k| k.key.as_ref() < cell));
1644
+ let new_row = self.kept.last().is_none_or(|k| k.key.row != cell.row);
1645
+ let charge = if new_row { cell.row.len() as u64 } else { 0 };
1646
+ if self.used + size + charge <= self.budget {
1647
+ self.used += size + charge;
1648
+ if L::LIMITED && new_row {
1649
+ self.limit.set_kept_rows(self.limit.kept_rows() + 1);
1650
+ }
1651
+ self.kept.push(Kept {
1652
+ key: cell.to_key(),
1653
+ item,
1654
+ size,
1655
+ });
1656
+ return ControlFlow::Continue(());
1657
+ }
1658
+ // The column doesn't fit: roll back its earlier versions.
1659
+ let rolled: Vec<Kept<I>> = self.kept.drain(self.open_at..).collect();
1660
+ let own: u64 = rolled.iter().map(|k| k.size).sum::<u64>() + size;
1661
+ let open = self.open.clone().expect("a column is open");
1662
+ self.overflow = Some(Overflow {
1663
+ bytes: own + open.row.len() as u64,
1664
+ key: open,
1665
+ });
1666
+ let kept_row = self.kept.last().map(|k| k.key.row.as_slice());
1667
+ let rolled_charge = rolled
1668
+ .first()
1669
+ .filter(|k| kept_row != Some(k.key.row.as_slice()))
1670
+ .map_or(0, |k| k.key.row.len() as u64);
1671
+ self.used -= rolled.iter().map(|k| k.size).sum::<u64>() + rolled_charge;
1672
+ // A rolled-back column that opened its row takes the row back out of the count.
1673
+ if L::LIMITED
1674
+ && rolled
1675
+ .first()
1676
+ .is_some_and(|k| kept_row != Some(k.key.row.as_slice()))
1677
+ {
1678
+ self.limit.set_kept_rows(self.limit.kept_rows() - 1);
1679
+ }
1680
+ ControlFlow::Continue(())
1681
+ }
1682
+
1683
+ fn merge(&mut self, other: Self) {
1684
+ if L::LIMITED {
1685
+ self.limit.set_full(self.limit.full() || other.limit.full());
1686
+ }
1687
+ let mut all = std::mem::take(&mut self.kept);
1688
+ all.extend(other.kept);
1689
+ all.sort_by(|a, b| a.key.cmp(&b.key));
1690
+ self.kept = all;
1691
+ self.overflow = match (self.overflow.take(), other.overflow) {
1692
+ (Some(a), Some(b)) => Some(if a.key <= b.key { a } else { b }),
1693
+ (a, b) => a.or(b),
1694
+ };
1695
+ self.cut();
1696
+ self.open = None;
1697
+ self.open_at = self.kept.len();
1698
+ }
1699
+
1700
+ fn finish(self) -> Vec<(CellKey, I)> {
1701
+ self.into_page().items
1702
+ }
1703
+ }
1704
+
1705
+ /// One item per key the item gives (for example a traversal's destination node), the one
1706
+ /// from the first cell in scan order when a key repeats; keys in `exclude` are dropped
1707
+ /// (#489's visited set). Order-independent, so the same at any fan-out (D296 S2).
1708
+ pub struct Dedupe<I, K, F> {
1709
+ key_of: F,
1710
+ exclude: Option<Arc<std::collections::HashSet<K>>>,
1711
+ kept: std::collections::HashMap<K, (CellKey, I)>,
1712
+ }
1713
+
1714
+ impl<I, K, F> std::fmt::Debug for Dedupe<I, K, F> {
1715
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1716
+ f.debug_struct("Dedupe")
1717
+ .field("kept", &self.kept.len())
1718
+ .finish_non_exhaustive()
1719
+ }
1720
+ }
1721
+
1722
+ impl<I, K: std::hash::Hash + Eq, F: Fn(&I) -> K> Dedupe<I, K, F> {
1723
+ /// One item per `key_of(item)`, none whose key is in `exclude`.
1724
+ pub fn new(key_of: F, exclude: Option<Arc<std::collections::HashSet<K>>>) -> Self {
1725
+ Self {
1726
+ key_of,
1727
+ exclude,
1728
+ kept: std::collections::HashMap::new(),
1729
+ }
1730
+ }
1731
+
1732
+ fn offer(&mut self, cell: CellRef<'_>, item: I) {
1733
+ let key = (self.key_of)(&item);
1734
+ if self.exclude.as_ref().is_some_and(|x| x.contains(&key)) {
1735
+ return;
1736
+ }
1737
+ match self.kept.entry(key) {
1738
+ std::collections::hash_map::Entry::Occupied(mut o) => {
1739
+ if cell < o.get().0.as_ref() {
1740
+ o.insert((cell.to_key(), item));
1741
+ }
1742
+ }
1743
+ std::collections::hash_map::Entry::Vacant(v) => {
1744
+ v.insert((cell.to_key(), item));
1745
+ }
1746
+ }
1747
+ }
1748
+ }
1749
+
1750
+ impl<I, K, F> Reducer for Dedupe<I, K, F>
1751
+ where
1752
+ I: Send,
1753
+ K: std::hash::Hash + Eq + Send + Sync,
1754
+ F: Fn(&I) -> K + Send,
1755
+ {
1756
+ type Item = I;
1757
+
1758
+ fn push(&mut self, cell: CellRef<'_>, item: I) -> ControlFlow<()> {
1759
+ self.offer(cell, item);
1760
+ ControlFlow::Continue(())
1761
+ }
1762
+
1763
+ fn merge(&mut self, other: Self) {
1764
+ for (_, (cell, item)) in other.kept {
1765
+ self.offer(cell.as_ref(), item);
1766
+ }
1767
+ }
1768
+
1769
+ fn finish(self) -> Vec<(CellKey, I)> {
1770
+ let mut out: Vec<_> = self.kept.into_values().collect();
1771
+ out.sort_by(|a, b| a.0.cmp(&b.0));
1772
+ out
1773
+ }
1774
+ }
1775
+
1776
+ #[cfg(test)]
1777
+ mod tests {
1778
+ use super::*;
1779
+
1780
+ fn cell(row: &'static str, rank: u32, q: &'static str, ts: Timestamp) -> CellRef<'static> {
1781
+ CellRef {
1782
+ row: row.as_bytes(),
1783
+ family_rank: rank,
1784
+ family: FamilyId(rank),
1785
+ qualifier: q.as_bytes(),
1786
+ ts,
1787
+ }
1788
+ }
1789
+
1790
+ fn rows<I>(items: &[(CellKey, I)]) -> Vec<(&[u8], u32, &[u8], Timestamp)> {
1791
+ items
1792
+ .iter()
1793
+ .map(|(k, _)| {
1794
+ (
1795
+ k.row.as_slice(),
1796
+ k.family_rank,
1797
+ k.qualifier.as_slice(),
1798
+ k.ts,
1799
+ )
1800
+ })
1801
+ .collect()
1802
+ }
1803
+
1804
+ #[test]
1805
+ fn cells_order_as_a_scan_does_family_before_qualifier_newest_version_first() {
1806
+ assert!(
1807
+ cell("r", 0, "z", 1) < cell("r", 1, "a", 1),
1808
+ "family rank before qualifier"
1809
+ );
1810
+ assert!(
1811
+ cell("r", 0, "q", 9) < cell("r", 0, "q", 3),
1812
+ "newest version first"
1813
+ );
1814
+ assert!(cell("a", 9, "z", 0) < cell("b", 0, "a", 9), "row first");
1815
+ }
1816
+
1817
+ #[test]
1818
+ fn top_k_breaks_equal_scores_by_cell_order_in_any_merge_order() {
1819
+ // Equal scores across "groups": the first cells in scan order among the ties win,
1820
+ // including two versions of one column and the same qualifier in two families.
1821
+ let cells = [
1822
+ (cell("r3", 0, "a", 1), 1u32),
1823
+ (cell("r1", 1, "a", 1), 1),
1824
+ (cell("r1", 0, "b", 1), 1),
1825
+ (cell("r1", 0, "b", 5), 1),
1826
+ (cell("r2", 0, "a", 1), 1),
1827
+ (cell("r0", 0, "z", 1), 2),
1828
+ ];
1829
+ let mut seq = TopK::new(3);
1830
+ for (c, s) in cells {
1831
+ let _ = seq.push(c, s);
1832
+ }
1833
+ let want = seq.finish();
1834
+ assert_eq!(
1835
+ rows(&want),
1836
+ vec![
1837
+ (&b"r1"[..], 0, &b"b"[..], 5),
1838
+ (b"r1", 0, b"b", 1),
1839
+ (b"r1", 1, b"a", 1)
1840
+ ]
1841
+ );
1842
+ for split in 0..=cells.len() {
1843
+ let (a, b) = cells.split_at(split);
1844
+ let (mut x, mut y) = (TopK::new(3), TopK::new(3));
1845
+ for (c, s) in a {
1846
+ let _ = x.push(*c, *s);
1847
+ }
1848
+ for (c, s) in b.iter().rev() {
1849
+ let _ = y.push(*c, *s);
1850
+ }
1851
+ y.merge(x);
1852
+ assert_eq!(y.finish(), want, "split at {split}");
1853
+ }
1854
+ }
1855
+
1856
+ /// #1283 lever 1: `admits` refuses exactly the scores `push` would drop whatever their
1857
+ /// cell (above the worst kept, with `k` kept), and admits a tie, which `push` settles
1858
+ /// by cell. Dropping a refused item before its push keeps the same result.
1859
+ #[test]
1860
+ fn top_k_admits_every_score_that_could_enter() {
1861
+ assert!(!TopK::<u32>::new(0).admits(&0));
1862
+ let mut t = TopK::new(2);
1863
+ assert!(t.admits(&9), "room left");
1864
+ let _ = t.push(cell("b", 0, "q", 1), 5u32);
1865
+ assert!(t.admits(&9), "room left");
1866
+ let _ = t.push(cell("c", 0, "q", 1), 7);
1867
+ assert!(t.admits(&6) && t.admits(&7), "below and tying the worst");
1868
+ assert!(!t.admits(&8), "above the worst");
1869
+ // A tie with a smaller cell enters; it was admitted.
1870
+ let _ = t.push(cell("a", 0, "q", 1), 7);
1871
+ assert_eq!(
1872
+ rows(&t.clone().finish()),
1873
+ vec![(&b"b"[..], 0, &b"q"[..], 1), (b"a", 0, b"q", 1)]
1874
+ );
1875
+ // Every refused score is one `push` drops.
1876
+ let before = t.clone().finish();
1877
+ let _ = t.push(cell("0", 0, "", 0), 8);
1878
+ assert_eq!(t.finish(), before);
1879
+ }
1880
+
1881
+ #[test]
1882
+ fn limit_keeps_the_first_n_cells_in_scan_order_whichever_group_finishes_first() {
1883
+ // Within a row, family 0's "z" comes before family 1's "a" (ctr274's case).
1884
+ let mut early = Limit::new(2);
1885
+ assert!(early.push(cell("a", 0, "z", 1), 1).is_continue());
1886
+ assert!(early.push(cell("a", 1, "a", 1), 2).is_break());
1887
+ let mut late = Limit::new(2);
1888
+ let _ = late.push(cell("m", 0, "a", 1), 3);
1889
+ let _ = late.push(cell("n", 0, "a", 1), 4);
1890
+ late.merge(early);
1891
+ let got: Vec<i32> = late.finish().into_iter().map(|(_, i)| i).collect();
1892
+ assert_eq!(got, vec![1, 2]);
1893
+ }
1894
+
1895
+ #[test]
1896
+ fn dedupe_keeps_the_first_cell_per_key_and_drops_excluded_keys() {
1897
+ fn key(i: &u32) -> u32 {
1898
+ *i
1899
+ }
1900
+ let exclude = Arc::new(std::collections::HashSet::from([9u32]));
1901
+ let mut a = Dedupe::new(key as fn(&u32) -> u32, Some(Arc::clone(&exclude)));
1902
+ let _ = a.push(cell("r2", 0, "q", 1), 7);
1903
+ let _ = a.push(cell("r1", 0, "q", 1), 9);
1904
+ let mut b = Dedupe::new(key as fn(&u32) -> u32, Some(exclude));
1905
+ let _ = b.push(cell("r1", 0, "q", 1), 7);
1906
+ a.merge(b);
1907
+ let got = a.finish();
1908
+ assert_eq!(got.len(), 1);
1909
+ assert_eq!((got[0].0.row.as_slice(), got[0].1), (&b"r1"[..], 7));
1910
+ }
1911
+
1912
+ /// D308: cut a read's cells into groups at row boundaries, push each group into its own
1913
+ /// budget with its local stop, merge in a random order: the result (cells, size and
1914
+ /// overflow) equals one budget over the whole read, and the hand-cut prefix.
1915
+ /// The whole read's page, and the page of its groups (cut at `cuts`) merged in `plan`'s
1916
+ /// order: each step takes a remaining group by index, merged into the accumulator or the
1917
+ /// accumulator into it.
1918
+ fn pages<F, L>(
1919
+ make: impl Fn() -> ByteBudget<u64, F, L>,
1920
+ cells: &[(CellKey, u64)],
1921
+ cuts: &[usize],
1922
+ plan: &[(usize, bool)],
1923
+ ) -> (BytePage<u64>, BytePage<u64>)
1924
+ where
1925
+ F: Fn(&CellRef<'_>, &u64) -> u64 + Send,
1926
+ L: RowLimit,
1927
+ {
1928
+ let run = |part: &[(CellKey, u64)]| {
1929
+ let mut b = make();
1930
+ for (k, n) in part {
1931
+ if b.push(k.as_ref(), *n).is_break() {
1932
+ break;
1933
+ }
1934
+ }
1935
+ b
1936
+ };
1937
+ let whole = run(cells).into_page();
1938
+ let mut parts: Vec<_> = cuts.windows(2).map(|w| run(&cells[w[0]..w[1]])).collect();
1939
+ let mut steps = plan.iter();
1940
+ let (first, _) = steps.next().expect("a group at least");
1941
+ let mut acc = parts.swap_remove(*first);
1942
+ for (pick, into_acc) in steps {
1943
+ let next = parts.swap_remove(*pick);
1944
+ if *into_acc {
1945
+ acc.merge(next);
1946
+ } else {
1947
+ let mut other = next;
1948
+ other.merge(acc);
1949
+ acc = other;
1950
+ }
1951
+ }
1952
+ (whole, acc.into_page())
1953
+ }
1954
+
1955
+ #[test]
1956
+ fn a_byte_budget_merges_to_the_sequential_result_in_any_order() {
1957
+ struct Rng(u64);
1958
+ impl Rng {
1959
+ fn below(&mut self, n: u64) -> u64 {
1960
+ self.0 ^= self.0 << 13;
1961
+ self.0 ^= self.0 >> 7;
1962
+ self.0 ^= self.0 << 17;
1963
+ self.0 % n
1964
+ }
1965
+ }
1966
+ let seed = 0x5EED_D308;
1967
+ let mut rng = Rng(seed);
1968
+ // An item's own size: the length it carries.
1969
+ let size = |_: &CellRef<'_>, n: &u64| *n;
1970
+ for case in 0..500 {
1971
+ // Cells in cell order: rows, then two families, qualifiers, and 1 to 3 versions.
1972
+ let mut cells: Vec<(CellKey, u64)> = Vec::new();
1973
+ for r in 0..1 + rng.below(8) {
1974
+ let row = vec![b'r'; 1 + r as usize];
1975
+ for rank in 0..2 {
1976
+ for q in 0..rng.below(3) {
1977
+ let versions = 1 + rng.below(3);
1978
+ for v in 0..versions {
1979
+ cells.push((
1980
+ CellKey {
1981
+ row: row.clone(),
1982
+ family_rank: rank,
1983
+ family: FamilyId(rank),
1984
+ qualifier: vec![b'q', q as u8],
1985
+ ts: 10 - v,
1986
+ },
1987
+ 1 + rng.below(20),
1988
+ ));
1989
+ }
1990
+ }
1991
+ }
1992
+ }
1993
+ let budget = rng.below(120);
1994
+ // A row limit (a scan's `limit`, #1280) in a third of the cases.
1995
+ let row_limit = (rng.below(3) == 0).then(|| rng.below(5) as usize);
1996
+ // Groups at row boundaries, and the order they merge in.
1997
+ let mut cuts = vec![0];
1998
+ for i in 1..cells.len() {
1999
+ if cells[i].0.row != cells[i - 1].0.row && rng.below(2) == 0 {
2000
+ cuts.push(i);
2001
+ }
2002
+ }
2003
+ cuts.push(cells.len());
2004
+ let mut plan = Vec::new();
2005
+ for left in (1..cuts.len()).rev() {
2006
+ plan.push((rng.below(left as u64) as usize, rng.below(2) == 0));
2007
+ }
2008
+ let (whole, merged) = match row_limit {
2009
+ None => pages(|| ByteBudget::new(budget, size), &cells, &cuts, &plan),
2010
+ Some(n) => pages(
2011
+ || ByteBudget::new(budget, size).with_rows(n),
2012
+ &cells,
2013
+ &cuts,
2014
+ &plan,
2015
+ ),
2016
+ };
2017
+ let ctx = format!("seed {seed:#x}, case {case}, budget {budget}, rows {row_limit:?}");
2018
+ assert_eq!(rows(&merged.items), rows(&whole.items), "{ctx}");
2019
+ assert_eq!(merged.bytes, whole.bytes, "{ctx}");
2020
+ assert_eq!(merged.overflow, whole.overflow, "{ctx}");
2021
+ assert_eq!(merged.cut_by_rows, whole.cut_by_rows, "{ctx}");
2022
+ assert!(whole.bytes <= budget, "{ctx}");
2023
+ // The hand-cut prefix: whole columns while they fit and the row limit allows,
2024
+ // each row's key once.
2025
+ let (mut used, mut keep, mut i) = (0u64, 0usize, 0usize);
2026
+ let (mut over, mut cut_rows, mut kept_rows) = (None, false, 0usize);
2027
+ while i < cells.len() {
2028
+ let mut j = i + 1;
2029
+ while j < cells.len() && same_column(&cells[j].0, &cells[i].0) {
2030
+ j += 1;
2031
+ }
2032
+ let own: u64 = cells[i..j].iter().map(|c| c.1).sum();
2033
+ let row = cells[i].0.row.len() as u64;
2034
+ let new_row = keep == 0 || cells[keep - 1].0.row != cells[i].0.row;
2035
+ if new_row && row_limit == Some(kept_rows) {
2036
+ cut_rows = true;
2037
+ break;
2038
+ }
2039
+ let charge = if new_row { row } else { 0 };
2040
+ if used + own + charge > budget {
2041
+ over = Some((cells[i].0.clone(), own + row));
2042
+ break;
2043
+ }
2044
+ used += own + charge;
2045
+ kept_rows += usize::from(new_row);
2046
+ keep = j;
2047
+ i = j;
2048
+ }
2049
+ let want: Vec<CellKey> = cells[..keep].iter().map(|c| c.0.clone()).collect();
2050
+ assert_eq!(whole.cut_by_rows, cut_rows, "{ctx}");
2051
+ let got: Vec<CellKey> = whole.items.iter().map(|c| c.0.clone()).collect();
2052
+ assert_eq!(got, want, "{ctx}");
2053
+ assert_eq!(whole.bytes, used, "{ctx}");
2054
+ assert_eq!(whole.overflow.map(|o| (o.key, o.bytes)), over, "{ctx}");
2055
+ }
2056
+ }
2057
+ }