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,1658 @@
1
+ //! Offset-linked single-writer multi-reader skiplist memtable for Pigeonhole.
2
+ //!
3
+ //! One memtable per `(tablet, family)`, written only by the owning shard thread and read
4
+ //! concurrently by any thread, and by reader processes. Nodes live in the shard's arena (a
5
+ //! part of the shared-memory region) and link by `u32` offsets relative to the arena base,
6
+ //! never by pointer, so any process that maps the region can traverse them. The writer
7
+ //! publishes each node with a release store; readers load with acquire.
8
+ //!
9
+ //! Keys are complete internal keys from `pigeonhole_format::key` and values are stored
10
+ //! values, so comparison is `memcmp` and flushing is a copy. The node and header layout is in
11
+ //! `FORMAT.md` §11.6.
12
+ //!
13
+ //! Until `shm` lands (and in unit tests) use [`ArenaRegion::heap`] as the arena.
14
+ //!
15
+ //! ```
16
+ //! use pigeonhole_format::{Cursor, Kind, encode_key};
17
+ //! use pigeonhole_memtable::{ArenaRegion, Memtable, ShardArena};
18
+ //!
19
+ //! let mut arena = ShardArena::new(ArenaRegion::heap(1 << 20), 64 * 1024);
20
+ //! let mut memtable = Memtable::create(&mut arena)?;
21
+ //!
22
+ //! let mut key = Vec::new();
23
+ //! encode_key(&mut key, b"row", b"qual", 10, 1, Kind::Put).unwrap();
24
+ //! memtable.insert(&mut arena, &key, b"\x00hello")?;
25
+ //!
26
+ //! let reader = memtable.reader(); // usable from any thread
27
+ //! let mut it = reader.iter();
28
+ //! it.seek_to_first()?;
29
+ //! assert!(it.valid());
30
+ //! assert_eq!(it.key(), &key[..]);
31
+ //! assert_eq!(it.value(), b"\x00hello");
32
+ //! # Ok::<(), pigeonhole_memtable::Error>(())
33
+ //! ```
34
+ //!
35
+ //! # Memory ordering
36
+ //!
37
+ //! The writer fully writes a node (header, tower, key, value) with plain stores, then links
38
+ //! it bottom-up with a release store into each predecessor's `next[i]`, and finally bumps the
39
+ //! header's `count` with a release store. A reader acquires `next[i]` (or `count`) and may
40
+ //! then read the node's bytes plainly: they are immutable until the memtable is retired and
41
+ //! its chunks reclaimed, which the engine does only once no view that lists the memtable is
42
+ //! pinned anywhere. The same discipline holds across processes, since a mapping of the
43
+ //! region is ordinary memory.
44
+ //!
45
+ //! # Reclamation
46
+ //!
47
+ //! A retired memtable's chunks go back to the arena through [`ShardArena::reclaim`], which
48
+ //! is safe to call at any time: reuse is deferred while any handle of that memtable created
49
+ //! in this process (a [`MemtableReader`], [`MemIter`] or [`ArenaSlice`], from
50
+ //! [`Memtable::reader`] or [`MemtableReader::open`]) is alive, so a `&[u8]` borrowed from
51
+ //! the arena can never be overwritten. Reader *processes* are protected by the shared-memory
52
+ //! protocol instead: the engine calls `reclaim` only after no reader slot pins a view that
53
+ //! lists the memtable. A reader process that nevertheless reads reused memory sees garbage
54
+ //! but never faults: every node a cursor reaches is bounds-checked, a link above a node's
55
+ //! height is rejected, and a traversal longer than the entry count is reported as a cycle,
56
+ //! all as [`Error::Corrupt`].
57
+ //!
58
+ //! Part of [Pigeonhole](https://github.com/CodingAnarchy/pigeonhole). See the crate README.
59
+ // `unsafe` is permitted in this crate; every block carries a `// SAFETY:` argument.
60
+ #![deny(unsafe_op_in_unsafe_fn)]
61
+
62
+ // Arena integers are native-endian in memory while FORMAT.md §11.6 fixes them as
63
+ // little-endian; refuse to build where the two differ (decision D56).
64
+ #[cfg(not(target_endian = "little"))]
65
+ compile_error!("pigeonhole-memtable supports little-endian targets only (FORMAT.md §11.6)");
66
+
67
+ use std::cmp::Ordering as Cmp;
68
+ use std::collections::HashMap;
69
+ use std::fmt;
70
+ use std::sync::{Arc, Mutex, Weak};
71
+
72
+ #[cfg(loom)]
73
+ use loom::sync::atomic::AtomicBool;
74
+ #[cfg(not(loom))]
75
+ use std::sync::atomic::AtomicBool;
76
+
77
+ use pigeonhole_format::key::split_suffix;
78
+ use pigeonhole_format::shm::memtable as layout;
79
+ use pigeonhole_format::version::MEMTABLE_MAGIC;
80
+ use pigeonhole_format::{Cursor, Seqno};
81
+ use pigeonhole_io::SharedRegion;
82
+
83
+ mod mem;
84
+
85
+ use mem::{Mem, Ordering};
86
+ use pigeonhole_format::key::SUFFIX_LEN;
87
+
88
+ #[cfg(all(test, loom))]
89
+ mod loom_tests;
90
+ #[cfg(all(test, not(loom)))]
91
+ mod tests;
92
+
93
+ /// Result alias for this crate.
94
+ pub type Result<T, E = Error> = std::result::Result<T, E>;
95
+
96
+ /// Memtable errors.
97
+ ///
98
+ /// ```
99
+ /// use pigeonhole_memtable::Error;
100
+ ///
101
+ /// assert_eq!(Error::ArenaFull.to_string(), "shard arena is full");
102
+ /// assert_eq!(
103
+ /// Error::Corrupt("node height").to_string(),
104
+ /// "corrupt memtable: node height"
105
+ /// );
106
+ /// ```
107
+ #[derive(Debug, Clone, PartialEq, Eq)]
108
+ #[non_exhaustive]
109
+ pub enum Error {
110
+ /// The shard arena has no chunk left: the engine must flush or stall writes.
111
+ ArenaFull,
112
+ /// One entry is larger than the arena could ever hold.
113
+ EntryTooLarge,
114
+ /// A reader found an offset or length outside the arena, or a bad header (possible
115
+ /// only with a buggy or crashed writer; checked so a reader never faults).
116
+ Corrupt(&'static str),
117
+ }
118
+
119
+ impl fmt::Display for Error {
120
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
121
+ match self {
122
+ Error::ArenaFull => f.write_str("shard arena is full"),
123
+ Error::EntryTooLarge => f.write_str("entry is larger than the arena can hold"),
124
+ Error::Corrupt(what) => write!(f, "corrupt memtable: {what}"),
125
+ }
126
+ }
127
+ }
128
+
129
+ impl std::error::Error for Error {}
130
+
131
+ /// Maximum skiplist height (the head node's height).
132
+ const MAX_HEIGHT: usize = layout::MAX_HEIGHT;
133
+
134
+ /// Levels a cursor records for its forward seeks' finger search: with towers growing by 4
135
+ /// per level, the lowest 4 reach about 64 entries ahead (a row's columns and versions, the
136
+ /// forward seeks a read makes); a forward seek farther than that searches from the top. Few
137
+ /// levels keep the cursor small: it is built and moved for every read.
138
+ const FINGER_LEVELS: usize = 4;
139
+
140
+ /// A walk's step count, against a budget that catches a link cycle.
141
+ #[derive(Debug, Default)]
142
+ struct Walk {
143
+ steps: usize,
144
+ budget: usize,
145
+ }
146
+
147
+ impl Walk {
148
+ /// Counts a step: [`Error::Corrupt`] once the walk has taken more steps than `reader`
149
+ /// has entries (plus [`STEP_SLACK`]). Entries may have been published since the last
150
+ /// check, so the count is re-read before deciding.
151
+ #[inline(always)]
152
+ fn step(&mut self, reader: &MemtableReader) -> Result<()> {
153
+ self.steps += 1;
154
+ if self.steps > self.budget {
155
+ self.budget = reader.len() + STEP_SLACK;
156
+ if self.steps > self.budget {
157
+ return Err(Error::Corrupt("link cycle"));
158
+ }
159
+ }
160
+ Ok(())
161
+ }
162
+ }
163
+ /// Bytes reserved at the start of every arena; offset `0` is null.
164
+ const RESERVED: usize = 64;
165
+ /// Length of the head node: a tower of [`MAX_HEIGHT`] links and no key or value.
166
+ const HEAD_LEN: usize = layout::N_TOWER + 4 * MAX_HEIGHT;
167
+ /// Offsets are `u32`, so an arena holds at most this many bytes.
168
+ const MAX_ARENA_LEN: usize = 1 << 32;
169
+ /// Header layout version written to every memtable header (2: nodes carry a stale-tail
170
+ /// offset, D277).
171
+ const HEADER_VERSION: u16 = 2;
172
+ /// Header flag bit: frozen.
173
+ const FLAG_FROZEN: u8 = 1;
174
+ /// Header flag bit: the writer records stale tails in this memtable's nodes (D194, D277), so
175
+ /// a reader's [`Cursor::skip_column`] can jump.
176
+ const FLAG_TAILS: u8 = 2;
177
+ /// The null offset.
178
+ const NULL: u32 = 0;
179
+ /// Extra traversal steps allowed beyond the entry count before a walk is called a cycle
180
+ /// (one level stop per level, plus nodes linked but not yet counted).
181
+ const STEP_SLACK: usize = MAX_HEIGHT + 16;
182
+
183
+ /// One strong reference per live in-process handle of a memtable (the writer, each reader,
184
+ /// cursor and slice, and the `Retired` token). `ShardArena::reclaim` reuses the chunks only
185
+ /// once the token holds the last reference.
186
+ ///
187
+ /// Also carries the writer's process-local knowledge of the memtable (ICR 0020): whether a
188
+ /// delete marker was ever inserted. A pin a reader process makes for a root it found in a
189
+ /// view has no writer behind it, so it answers "maybe" ([`MemtableReader::may_have_markers`]).
190
+ #[derive(Debug)]
191
+ struct Pin {
192
+ /// Made by this memtable's writer (`Memtable::create`), so `markers` is kept.
193
+ writer: bool,
194
+ /// A delete marker was inserted (set before the marker is linked, Release).
195
+ markers: AtomicBool,
196
+ }
197
+
198
+ impl Pin {
199
+ fn writer() -> Self {
200
+ Self {
201
+ writer: true,
202
+ markers: AtomicBool::new(false),
203
+ }
204
+ }
205
+
206
+ fn foreign() -> Self {
207
+ Self {
208
+ writer: false,
209
+ markers: AtomicBool::new(true),
210
+ }
211
+ }
212
+ }
213
+
214
+ /// Shared by every clone of an [`ArenaRegion`]: the pins of the memtables this process
215
+ /// created, by root, so a reader opened by root in the writer process pins the same memtable.
216
+ #[derive(Debug, Default)]
217
+ struct Registry {
218
+ pins: Mutex<HashMap<u32, Weak<Pin>>>,
219
+ }
220
+
221
+ impl Registry {
222
+ fn lock(&self) -> std::sync::MutexGuard<'_, HashMap<u32, Weak<Pin>>> {
223
+ self.pins.lock().unwrap_or_else(|e| e.into_inner())
224
+ }
225
+
226
+ fn register(&self, root: u32, pin: &Arc<Pin>) {
227
+ self.lock().insert(root, Arc::downgrade(pin));
228
+ }
229
+
230
+ /// The pin of the memtable at `root` if it was created in this process, else a fresh one
231
+ /// (a reader process: nothing reclaims there).
232
+ fn pin_for(&self, root: u32) -> Arc<Pin> {
233
+ self.lock()
234
+ .get(&root)
235
+ .and_then(Weak::upgrade)
236
+ .unwrap_or_else(|| Arc::new(Pin::foreign()))
237
+ }
238
+
239
+ fn forget(&self, root: u32, pin: &Arc<Pin>) {
240
+ let mut pins = self.lock();
241
+ if pins
242
+ .get(&root)
243
+ .is_some_and(|w| Weak::ptr_eq(w, &Arc::downgrade(pin)))
244
+ {
245
+ pins.remove(&root);
246
+ }
247
+ }
248
+ }
249
+
250
+ /// Offset of link `level` in the tower of the node at `node`.
251
+ #[inline]
252
+ fn tower(node: u32, level: usize) -> usize {
253
+ node as usize + layout::N_TOWER + 4 * level
254
+ }
255
+
256
+ /// A byte range of a [`SharedRegion`] holding one shard's arena. Cheap to clone; keeps the
257
+ /// mapping alive.
258
+ ///
259
+ /// ```
260
+ /// use pigeonhole_io::SharedRegion;
261
+ /// use pigeonhole_memtable::ArenaRegion;
262
+ ///
263
+ /// // The engine hands the memtable its shard's slice of the shared-memory region.
264
+ /// let region = SharedRegion::heap(4 << 20);
265
+ /// let arena = ArenaRegion::new(region, 2 << 20, 2 << 20).unwrap();
266
+ /// assert_eq!(arena.len(), 2 << 20);
267
+ ///
268
+ /// // Tests and the engine before `shm` lands use a private heap arena.
269
+ /// let mock = ArenaRegion::heap(1 << 20);
270
+ /// assert!(!mock.is_empty());
271
+ /// ```
272
+ #[derive(Debug, Clone)]
273
+ pub struct ArenaRegion {
274
+ mem: Mem,
275
+ registry: Arc<Registry>,
276
+ }
277
+
278
+ impl ArenaRegion {
279
+ /// A private heap-backed arena of `len` bytes (the mock until `shm` lands).
280
+ pub fn heap(len: usize) -> Self {
281
+ assert!(len <= MAX_ARENA_LEN, "arena longer than 4 GiB");
282
+ Self {
283
+ mem: Mem::heap(len),
284
+ registry: Arc::default(),
285
+ }
286
+ }
287
+
288
+ /// `[offset, offset + len)` of `region`. `offset` must be 64-byte aligned and `len` at
289
+ /// most 4 GiB (offsets are `u32`).
290
+ ///
291
+ /// # Errors
292
+ /// [`Error::Corrupt`] if the range is misaligned, too long or outside the region.
293
+ #[cfg(not(loom))]
294
+ pub fn new(region: SharedRegion, offset: usize, len: usize) -> Result<Self> {
295
+ if !offset.is_multiple_of(64) {
296
+ return Err(Error::Corrupt("arena offset is not 64-byte aligned"));
297
+ }
298
+ if len > MAX_ARENA_LEN {
299
+ return Err(Error::Corrupt("arena longer than 4 GiB"));
300
+ }
301
+ if !offset
302
+ .checked_add(len)
303
+ .is_some_and(|end| end <= region.len())
304
+ {
305
+ return Err(Error::Corrupt("arena extends past its region"));
306
+ }
307
+ Ok(Self {
308
+ mem: Mem::new(region, offset, len),
309
+ registry: Arc::default(),
310
+ })
311
+ }
312
+
313
+ /// Shared regions are not modeled under loom; only [`ArenaRegion::heap`] works there.
314
+ #[cfg(loom)]
315
+ pub fn new(region: SharedRegion, offset: usize, len: usize) -> Result<Self> {
316
+ let _ = (region, offset, len);
317
+ Err(Error::Corrupt("shared regions are not modeled under loom"))
318
+ }
319
+
320
+ /// Length in bytes.
321
+ pub fn len(&self) -> usize {
322
+ self.mem.len()
323
+ }
324
+
325
+ /// Whether the arena is empty.
326
+ pub fn is_empty(&self) -> bool {
327
+ self.mem.len() == 0
328
+ }
329
+
330
+ /// Whether `other` is a clone of this arena (the same mapping and pin registry).
331
+ fn is_same(&self, other: &ArenaRegion) -> bool {
332
+ Arc::ptr_eq(&self.registry, &other.registry)
333
+ }
334
+ }
335
+
336
+ /// A contiguous run of chunks: `[first, first + count)` chunk indices.
337
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
338
+ struct Run {
339
+ first: u32,
340
+ count: u32,
341
+ }
342
+
343
+ /// The writer-side chunk allocator over one shard's arena. Owned by the shard thread; its
344
+ /// free list is private memory (a restarted writer rebuilds the region anyway).
345
+ ///
346
+ /// ```
347
+ /// use pigeonhole_memtable::{ArenaRegion, Memtable, ShardArena};
348
+ ///
349
+ /// let mut arena = ShardArena::new(ArenaRegion::heap(1 << 20), ShardArena::DEFAULT_CHUNK);
350
+ /// assert_eq!(arena.free_bytes(), 1 << 20);
351
+ ///
352
+ /// let memtable = Memtable::create(&mut arena)?;
353
+ /// assert_eq!(arena.free_bytes(), (1 << 20) - ShardArena::DEFAULT_CHUNK);
354
+ ///
355
+ /// // After its flush is in the manifest and no view pins it, its chunks come back.
356
+ /// arena.reclaim(memtable.retire());
357
+ /// assert_eq!(arena.free_bytes(), 1 << 20);
358
+ ///
359
+ /// // Reuse waits for in-process readers: a cursor keeps the chunks it borrows from.
360
+ /// let mut memtable = Memtable::create(&mut arena)?;
361
+ /// let reader = memtable.reader();
362
+ /// arena.reclaim(memtable.retire());
363
+ /// assert_eq!(arena.free_bytes(), (1 << 20) - ShardArena::DEFAULT_CHUNK);
364
+ /// drop(reader);
365
+ /// let next = Memtable::create(&mut arena)?; // the deferred chunk is free again
366
+ /// assert_eq!(next.root(), 64);
367
+ /// # Ok::<(), pigeonhole_memtable::Error>(())
368
+ /// ```
369
+ #[derive(Debug)]
370
+ pub struct ShardArena {
371
+ region: ArenaRegion,
372
+ chunk_size: usize,
373
+ /// `true` for each free chunk.
374
+ free: Vec<bool>,
375
+ free_count: usize,
376
+ /// Retired memtables whose chunks some in-process handle still borrows.
377
+ deferred: Vec<Retired>,
378
+ }
379
+
380
+ impl ShardArena {
381
+ /// Default chunk size (256 KiB).
382
+ pub const DEFAULT_CHUNK: usize = 256 * 1024;
383
+
384
+ /// Smallest chunk size accepted.
385
+ const MIN_CHUNK: usize = 1024;
386
+
387
+ /// An allocator handing out `chunk_size` chunks of `region`. Entries larger than a chunk
388
+ /// take a contiguous run of chunks.
389
+ ///
390
+ /// # Panics
391
+ /// If `chunk_size` is below 1 KiB or not a multiple of 64.
392
+ pub fn new(region: ArenaRegion, chunk_size: usize) -> Self {
393
+ assert!(
394
+ chunk_size >= Self::MIN_CHUNK && chunk_size.is_multiple_of(64),
395
+ "chunk size must be a multiple of 64 and at least 1 KiB"
396
+ );
397
+ let chunks = region.len() / chunk_size;
398
+ Self {
399
+ region,
400
+ chunk_size,
401
+ free: vec![true; chunks],
402
+ free_count: chunks,
403
+ deferred: Vec::new(),
404
+ }
405
+ }
406
+
407
+ /// The region (for building readers).
408
+ pub fn region(&self) -> &ArenaRegion {
409
+ &self.region
410
+ }
411
+
412
+ /// Bytes not allocated to any memtable. Chunks of a retired memtable count once no
413
+ /// in-process handle of it is left (see [`ShardArena::reclaim`]).
414
+ pub fn free_bytes(&self) -> usize {
415
+ self.free_count * self.chunk_size
416
+ }
417
+
418
+ /// Usable bytes of the largest run of contiguous free chunks: the largest entry an
419
+ /// allocation can place now. An entry larger than a chunk needs one such run, so free
420
+ /// bytes elsewhere do not help it.
421
+ pub fn largest_free_run(&self) -> usize {
422
+ let mut best = 0;
423
+ self.free_runs_each(|first, count| best = best.max(self.usable(first, count)));
424
+ best
425
+ }
426
+
427
+ /// How many blocks of `chunks` contiguous free chunks the free runs are sure to hold
428
+ /// after any `removed` chunks are allocated: `Σ ⌊run / chunks⌋` minus the most blocks
429
+ /// that many chunks could break.
430
+ ///
431
+ /// Every allocation takes its chunks from the start of a free run (the first one long
432
+ /// enough). Taking chunks from a run's start breaks its first block only once its spare
433
+ /// chunks (`run mod chunks`) are gone, and each further block costs `chunks` more, so
434
+ /// the most blocks `removed` chunks can break is found by spending them on the cheapest
435
+ /// breaks first. While at least one block is left, an allocation of up to `chunks`
436
+ /// chunks finds a run (issue #141).
437
+ pub fn blocks_left(&self, chunks: usize, removed: usize) -> usize {
438
+ let chunks = chunks.max(1);
439
+ let mut blocks = 0;
440
+ // The cost of breaking each run's first block; later ones cost `chunks` each.
441
+ let mut first_costs = Vec::new();
442
+ self.free_runs_each(|_, count| {
443
+ if count >= chunks {
444
+ blocks += count / chunks;
445
+ first_costs.push(count % chunks + 1);
446
+ }
447
+ });
448
+ first_costs.sort_unstable();
449
+ let (mut budget, mut broken) = (removed, 0);
450
+ for cost in first_costs {
451
+ if cost > budget {
452
+ break;
453
+ }
454
+ budget -= cost;
455
+ broken += 1;
456
+ }
457
+ broken += budget / chunks;
458
+ blocks.saturating_sub(broken)
459
+ }
460
+
461
+ /// [`blocks_left`](Self::blocks_left) as if every chunk were free: whether a batch could
462
+ /// ever find its run, judged on an empty arena (one run of all its chunks). A commit
463
+ /// for which this is 0 can never be admitted, so it fails at once rather than waiting
464
+ /// for room that freeing everything still wouldn't give (#1403).
465
+ pub fn blocks_left_when_empty(&self, chunks: usize, removed: usize) -> usize {
466
+ let chunks = chunks.max(1);
467
+ let n = self.free.len();
468
+ if n < chunks {
469
+ return 0;
470
+ }
471
+ let blocks = n / chunks;
472
+ let first_cost = n % chunks + 1;
473
+ if removed < first_cost {
474
+ return blocks;
475
+ }
476
+ blocks.saturating_sub(1 + (removed - first_cost) / chunks)
477
+ }
478
+
479
+ /// Calls `f(first, count)` for each run of free chunks.
480
+ fn free_runs_each(&self, mut f: impl FnMut(usize, usize)) {
481
+ let n = self.free.len();
482
+ let mut first = 0;
483
+ while first < n {
484
+ if !self.free[first] {
485
+ first += 1;
486
+ continue;
487
+ }
488
+ let mut count = 1;
489
+ while first + count < n && self.free[first + count] {
490
+ count += 1;
491
+ }
492
+ f(first, count);
493
+ first += count;
494
+ }
495
+ }
496
+
497
+ /// Returns a retired memtable's chunks to the free list. Call only once no reader slot
498
+ /// pins a view that lists it (reader processes have no other protection). Handles in
499
+ /// this process need no care: while any [`MemtableReader`], [`MemIter`] or
500
+ /// [`ArenaSlice`] of the memtable is alive, its chunks stay out of use and become free
501
+ /// on a later `reclaim` or allocation, after the last handle is dropped.
502
+ ///
503
+ /// # Panics
504
+ /// If a chunk is already free (a double reclaim, or a token from another arena).
505
+ pub fn reclaim(&mut self, retired: Retired) {
506
+ self.deferred.push(retired);
507
+ self.release_unreferenced();
508
+ }
509
+
510
+ /// Frees every deferred memtable whose token holds the last in-process reference.
511
+ fn release_unreferenced(&mut self) {
512
+ let mut i = 0;
513
+ while i < self.deferred.len() {
514
+ if Arc::strong_count(&self.deferred[i].pin) == 1 {
515
+ // Pairs with the release decrement of the last handle's drop, so its reads
516
+ // of the chunks happen before the writer reuses them.
517
+ mem::acquire_fence();
518
+ let retired = self.deferred.swap_remove(i);
519
+ self.free_runs(&retired);
520
+ } else {
521
+ i += 1;
522
+ }
523
+ }
524
+ }
525
+
526
+ fn free_runs(&mut self, retired: &Retired) {
527
+ for run in &retired.runs {
528
+ for c in run.first..run.first + run.count {
529
+ let slot = &mut self.free[c as usize];
530
+ assert!(!*slot, "chunk {c} reclaimed twice");
531
+ *slot = true;
532
+ self.free_count += 1;
533
+ }
534
+ }
535
+ self.region.registry.forget(retired.root, &retired.pin);
536
+ }
537
+
538
+ /// Usable bytes of a run of `count` chunks starting at chunk `first` (the arena's first
539
+ /// 64 bytes are reserved).
540
+ fn usable(&self, first: usize, count: usize) -> usize {
541
+ let bytes = count * self.chunk_size;
542
+ if first == 0 { bytes - RESERVED } else { bytes }
543
+ }
544
+
545
+ /// Allocates the lowest run of chunks with at least `bytes` usable bytes.
546
+ fn allocate(&mut self, bytes: usize) -> Result<Run> {
547
+ self.release_unreferenced();
548
+ let n = self.free.len();
549
+ if n == 0 || bytes > self.usable(0, n) {
550
+ return Err(Error::EntryTooLarge);
551
+ }
552
+ let mut first = 0;
553
+ while first < n {
554
+ if !self.free[first] {
555
+ first += 1;
556
+ continue;
557
+ }
558
+ let mut count = 1;
559
+ while self.usable(first, count) < bytes && first + count < n && self.free[first + count]
560
+ {
561
+ count += 1;
562
+ }
563
+ if self.usable(first, count) >= bytes {
564
+ for c in first..first + count {
565
+ self.free[c] = false;
566
+ }
567
+ self.free_count -= count;
568
+ return Ok(Run {
569
+ first: first as u32,
570
+ count: count as u32,
571
+ });
572
+ }
573
+ first += count;
574
+ }
575
+ Err(Error::ArenaFull)
576
+ }
577
+
578
+ /// Byte range `[start, end)` of `run`, excluding the reserved prefix.
579
+ fn span(&self, run: Run) -> (usize, usize) {
580
+ let start = run.first as usize * self.chunk_size;
581
+ let end = start + run.count as usize * self.chunk_size;
582
+ (start.max(RESERVED), end)
583
+ }
584
+ }
585
+
586
+ /// The writer's handle to one memtable.
587
+ ///
588
+ /// ```
589
+ /// use pigeonhole_format::{Kind, encode_key};
590
+ /// use pigeonhole_memtable::{ArenaRegion, Memtable, ShardArena};
591
+ ///
592
+ /// let mut arena = ShardArena::new(ArenaRegion::heap(1 << 20), 64 * 1024);
593
+ /// let mut memtable = Memtable::create(&mut arena)?;
594
+ ///
595
+ /// let mut key = Vec::new();
596
+ /// for seqno in 1..=3 {
597
+ /// key.clear();
598
+ /// encode_key(&mut key, b"row", b"q", 100 + seqno, seqno, Kind::Put).unwrap();
599
+ /// memtable.insert(&mut arena, &key, b"\x00v")?;
600
+ /// }
601
+ /// assert_eq!(memtable.len(), 3);
602
+ /// assert_eq!(memtable.seqno_range(), Some((1, 3)));
603
+ /// assert_eq!(memtable.allocated_bytes(), 64 * 1024); // one chunk so far
604
+ ///
605
+ /// memtable.freeze();
606
+ /// assert!(memtable.is_frozen());
607
+ /// let root = memtable.root(); // goes into the published view
608
+ /// let retired = memtable.retire(); // once its SST is in the manifest
609
+ /// arena.reclaim(retired); // once no view listing `root` is pinned
610
+ /// # Ok::<(), pigeonhole_memtable::Error>(())
611
+ /// ```
612
+ #[derive(Debug)]
613
+ pub struct Memtable {
614
+ region: ArenaRegion,
615
+ root: u32,
616
+ head: u32,
617
+ /// Chunk runs owned, in allocation order.
618
+ runs: Vec<Run>,
619
+ /// Next free byte of the current run and its end.
620
+ bump: usize,
621
+ limit: usize,
622
+ count: u32,
623
+ /// Node and header bytes used (the header's `bytes` field).
624
+ used: u64,
625
+ /// Bytes of chunks owned.
626
+ allocated: usize,
627
+ min_seqno: Seqno,
628
+ max_seqno: Seqno,
629
+ frozen: bool,
630
+ rng: u64,
631
+ /// The insert splice: per level, the node a key sorting right after the last one
632
+ /// inserted links behind. Below the last inserted node's height it is that node itself;
633
+ /// at and above it, the last node at that level that sorts before it (the head when
634
+ /// none does, and at every level before any insert). A key between the last node and its
635
+ /// level-0 successor has exactly these predecessors, so inserts in key order (a row's
636
+ /// cells, rising row keys) skip the search. Only this writer links nodes and none is
637
+ /// removed, so the splice stays exact.
638
+ splice: [u32; MAX_HEIGHT],
639
+ pin: Arc<Pin>,
640
+ /// The writer records stale tails (D194, D277): set by [`Memtable::with_tail_index`].
641
+ tails: bool,
642
+ }
643
+
644
+ impl Memtable {
645
+ /// Creates an empty memtable in `arena`.
646
+ ///
647
+ /// # Errors
648
+ /// [`Error::ArenaFull`] if no chunk is free.
649
+ pub fn create(arena: &mut ShardArena) -> Result<Memtable> {
650
+ let run = arena.allocate(layout::HEADER_LEN + HEAD_LEN)?;
651
+ let (start, end) = arena.span(run);
652
+ let region = arena.region.clone();
653
+ let mem = &region.mem;
654
+ let root = start;
655
+ let head = root + layout::HEADER_LEN;
656
+ debug_assert!(root.is_multiple_of(64));
657
+
658
+ // Header. Plain writes: the root is not published until this returns.
659
+ mem.write_u32(root + layout::H_MAGIC, MEMTABLE_MAGIC);
660
+ let [v0, v1] = HEADER_VERSION.to_le_bytes();
661
+ mem.write(root + layout::H_VERSION, &[v0, v1, 0, 0]);
662
+ mem.write_u32(root + layout::H_HEAD, head as u32);
663
+ mem.store_u32(root + layout::H_COUNT, 0, Ordering::Relaxed);
664
+ let used = (layout::HEADER_LEN + HEAD_LEN) as u64;
665
+ mem.store_u64(root + layout::H_BYTES, used, Ordering::Relaxed);
666
+ mem.store_u64(root + layout::H_MAX_SEQNO, 0, Ordering::Relaxed);
667
+ mem.store_u64(root + layout::H_MIN_SEQNO, 0, Ordering::Relaxed);
668
+ mem.write(
669
+ root + layout::H_MIN_SEQNO + 8,
670
+ &[0; layout::HEADER_LEN - 40],
671
+ );
672
+
673
+ // Head node: no key or value, a tower of null links (the chunk may be reused memory).
674
+ mem.write_u32(head + layout::N_KEY_LEN, 0);
675
+ mem.write_u32(head + layout::N_VALUE_LEN, 0);
676
+ mem.write(head + layout::N_HEIGHT, &[MAX_HEIGHT as u8, 0, 0, 0]);
677
+ mem.write_u32(head + layout::N_TAIL, NULL);
678
+ for level in 0..MAX_HEIGHT {
679
+ mem.write_u32(tower(head as u32, level), NULL);
680
+ }
681
+
682
+ let pin = Arc::new(Pin::writer());
683
+ region.registry.register(root as u32, &pin);
684
+ Ok(Memtable {
685
+ region,
686
+ root: root as u32,
687
+ head: head as u32,
688
+ runs: vec![run],
689
+ bump: head + HEAD_LEN,
690
+ limit: end,
691
+ count: 0,
692
+ used,
693
+ allocated: run.count as usize * arena.chunk_size,
694
+ min_seqno: 0,
695
+ max_seqno: 0,
696
+ frozen: false,
697
+ rng: 0x9E37_79B9_7F4A_7C15 ^ (root as u64),
698
+ splice: [head as u32; MAX_HEIGHT],
699
+ pin,
700
+ tails: false,
701
+ })
702
+ }
703
+
704
+ /// Records stale tails (D194, ICR 0013; in the node since D277): for each entry inserted
705
+ /// in front of an older entry of its column, a later entry of that column, so a reader
706
+ /// that has finished the column passes its superseded versions in one jump
707
+ /// ([`Cursor::skip_column`]). The tail is a field of the node in the arena (FORMAT
708
+ /// §11.6), so readers from [`Memtable::reader`] and from [`MemtableReader::open`] (other
709
+ /// processes) jump alike; the header's flag tells them the tails are recorded. Call
710
+ /// before the first insert.
711
+ ///
712
+ /// ```
713
+ /// use pigeonhole_format::{Cursor, Kind, encode_key};
714
+ /// use pigeonhole_memtable::{ArenaRegion, Memtable, ShardArena};
715
+ ///
716
+ /// let mut arena = ShardArena::new(ArenaRegion::heap(1 << 20), 64 * 1024);
717
+ /// let mut m = Memtable::create(&mut arena)?.with_tail_index();
718
+ /// let key = |q: &[u8], ts| {
719
+ /// let mut k = Vec::new();
720
+ /// encode_key(&mut k, b"row", q, ts, ts, Kind::Put).unwrap();
721
+ /// k
722
+ /// };
723
+ /// for ts in 1..=5 {
724
+ /// m.insert(&mut arena, &key(b"a", ts), b"\x00v")?;
725
+ /// }
726
+ /// m.insert(&mut arena, &key(b"b", 1), b"\x00v")?;
727
+ /// let column = &key(b"a", 0)[..key(b"a", 0).len() - 17];
728
+ /// let mut it = m.reader().iter();
729
+ /// it.seek_to_first()?;
730
+ /// it.next()?; // on version 4 of `a`, after reading version 5
731
+ /// assert!(it.skip_column(column)?); // past versions 4..1 in one jump
732
+ /// assert_eq!(it.key(), &key(b"b", 1)[..]);
733
+ /// # Ok::<(), pigeonhole_memtable::Error>(())
734
+ /// ```
735
+ ///
736
+ /// # Panics
737
+ /// If the memtable already holds entries.
738
+ pub fn with_tail_index(mut self) -> Self {
739
+ assert_eq!(self.count, 0, "with_tail_index on a memtable with entries");
740
+ self.tails = true;
741
+ // Before the memtable is published (its root reaches a view only after this).
742
+ self.region.mem.fetch_or_u8(
743
+ self.root as usize + layout::H_FLAGS,
744
+ FLAG_TAILS,
745
+ Ordering::Release,
746
+ );
747
+ self
748
+ }
749
+
750
+ /// Inserts one entry. `key` is a full internal key (unique: it contains the seqno);
751
+ /// `value` is a stored value. Visible to readers when this returns.
752
+ ///
753
+ /// A duplicate key is linked as another entry; readers see both, in unspecified order.
754
+ ///
755
+ /// # Errors
756
+ /// [`Error::ArenaFull`] if the entry does not fit in the chunks left,
757
+ /// [`Error::EntryTooLarge`] if it could never fit, [`Error::Corrupt`] if `key` is shorter
758
+ /// than an internal key suffix.
759
+ ///
760
+ /// # Panics
761
+ /// If the memtable is frozen, or `arena` is not the arena it was created in.
762
+ pub fn insert(&mut self, arena: &mut ShardArena, key: &[u8], value: &[u8]) -> Result<()> {
763
+ assert!(!self.frozen, "insert into a frozen memtable");
764
+ assert!(
765
+ self.region.is_same(&arena.region),
766
+ "memtable inserted through a different shard arena"
767
+ );
768
+ let (_, _, seqno, _) =
769
+ split_suffix(key).map_err(|_| Error::Corrupt("insert key is not an internal key"))?;
770
+ let key_len = u32::try_from(key.len()).map_err(|_| Error::EntryTooLarge)?;
771
+ let value_len = u32::try_from(value.len()).map_err(|_| Error::EntryTooLarge)?;
772
+ let height = self.random_height();
773
+ let node_len = (layout::N_TOWER + 4 * height)
774
+ .checked_add(key.len())
775
+ .and_then(|n| n.checked_add(value.len()))
776
+ .ok_or(Error::EntryTooLarge)?
777
+ .next_multiple_of(4);
778
+
779
+ if self.limit - self.bump < node_len {
780
+ let run = arena.allocate(node_len)?;
781
+ let (start, end) = arena.span(run);
782
+ self.runs.push(run);
783
+ self.allocated += run.count as usize * arena.chunk_size;
784
+ self.bump = start;
785
+ self.limit = end;
786
+ }
787
+ let node = self.bump as u32;
788
+ debug_assert!(
789
+ node != NULL && node.is_multiple_of(4) && (node as usize) < self.region.len()
790
+ );
791
+
792
+ // Predecessors at every level, kept in the splice itself: the last insert's when the
793
+ // key sorts right after the last key inserted (between it and its successor, two
794
+ // comparisons), else from a search down from the top of the head tower, which
795
+ // replaces them. Kept nowhere else: a copy cost the search path a second write per
796
+ // level (perf287 on #1315).
797
+ let mem = &self.region.mem;
798
+ let after_last = {
799
+ let last = self.splice[0];
800
+ (last == self.head || self.key_cmp(last, key) == Cmp::Less) && {
801
+ let next = mem.load_u32(tower(last, 0), Ordering::Relaxed);
802
+ next == NULL || self.key_cmp(next, key) != Cmp::Less
803
+ }
804
+ };
805
+ if !after_last {
806
+ let mut cur = self.head;
807
+ for level in (0..MAX_HEIGHT).rev() {
808
+ loop {
809
+ let next = mem.load_u32(tower(cur, level), Ordering::Relaxed);
810
+ if next == NULL || self.key_cmp(next, key) != Cmp::Less {
811
+ break;
812
+ }
813
+ cur = next;
814
+ }
815
+ self.splice[level] = cur;
816
+ }
817
+ }
818
+
819
+ // Fill the node; nothing links to it yet, so these are plain writes.
820
+ let off = node as usize;
821
+ mem.write_u32(off + layout::N_KEY_LEN, key_len);
822
+ mem.write_u32(off + layout::N_VALUE_LEN, value_len);
823
+ mem.write(off + layout::N_HEIGHT, &[height as u8, 0, 0, 0]);
824
+ // Always written, tails recorded or not: the chunk may hold an older memtable's bytes
825
+ // (D277, perf287's P2). `record_tail` overwrites it below when the node has one.
826
+ mem.write_u32(off + layout::N_TAIL, NULL);
827
+ // Level 0 first: its successor is the stale tail's too.
828
+ let next0 = mem.load_u32(tower(self.splice[0], 0), Ordering::Relaxed);
829
+ mem.write_u32(tower(node, 0), next0);
830
+ // An index loop: the iterator form (`enumerate().take(height).skip(1)` over the
831
+ // array) compiled to an out-of-line adapter, about 38 instructions per insert.
832
+ #[allow(clippy::needless_range_loop)]
833
+ for level in 1..height {
834
+ let next = mem.load_u32(tower(self.splice[level], level), Ordering::Relaxed);
835
+ mem.write_u32(tower(node, level), next);
836
+ }
837
+ let key_off = off + layout::N_TOWER + 4 * height;
838
+ mem.write(key_off, key);
839
+ mem.write(key_off + key.len(), value);
840
+ // Before the node is linked, so a reader that reaches it (an Acquire of the link)
841
+ // sees its tail, as it sees its key (D277). An insert in key order (no successor)
842
+ // tests one word.
843
+ if next0 != NULL && self.tails {
844
+ self.record_tail(node, next0, key);
845
+ }
846
+
847
+ // Publish: link bottom-up, each with release so a reader that acquires the link
848
+ // sees the whole node.
849
+ for (level, &p) in self.splice.iter().enumerate().take(height) {
850
+ debug_assert!(p != NULL && p.is_multiple_of(4) && (p as usize) < self.region.len());
851
+ mem.store_u32(tower(p, level), node, Ordering::Release);
852
+ }
853
+
854
+ // The next insert's predecessors: this node below its height, the ones found above
855
+ // it. Only the node's own levels change (every level was rewritten per insert before,
856
+ // about 30 instructions, #1206).
857
+ self.splice[..height].fill(node);
858
+ self.bump += node_len;
859
+ self.used += node_len as u64;
860
+ self.count += 1;
861
+ if self.count == 1 || seqno < self.min_seqno {
862
+ self.min_seqno = seqno;
863
+ mem.store_u64(
864
+ self.root as usize + layout::H_MIN_SEQNO,
865
+ seqno,
866
+ Ordering::Relaxed,
867
+ );
868
+ }
869
+ if seqno > self.max_seqno {
870
+ self.max_seqno = seqno;
871
+ mem.store_u64(
872
+ self.root as usize + layout::H_MAX_SEQNO,
873
+ seqno,
874
+ Ordering::Relaxed,
875
+ );
876
+ }
877
+ mem.store_u64(
878
+ self.root as usize + layout::H_BYTES,
879
+ self.used,
880
+ Ordering::Relaxed,
881
+ );
882
+ // Release: a reader that sees this count sees every node counted.
883
+ mem.store_u32(
884
+ self.root as usize + layout::H_COUNT,
885
+ self.count,
886
+ Ordering::Release,
887
+ );
888
+ Ok(())
889
+ }
890
+
891
+ /// Compares the key of the (writer-trusted) node at `node` with `key`.
892
+ #[inline]
893
+ fn key_cmp(&self, node: u32, key: &[u8]) -> Cmp {
894
+ let mem = &self.region.mem;
895
+ let off = node as usize;
896
+ let height = mem.read_u8(off + layout::N_HEIGHT) as usize;
897
+ let key_len = mem.read_u32(off + layout::N_KEY_LEN) as usize;
898
+ mem.cmp(off + layout::N_TOWER + 4 * height, key_len, key)
899
+ }
900
+
901
+ /// Records `node`'s stale tail (D194) when its successor `next` is in its column. Out of
902
+ /// line, so `insert` keeps its shape for the inserts that need none.
903
+ #[inline(never)]
904
+ fn record_tail(&self, node: u32, next: u32, key: &[u8]) {
905
+ if self.same_column(next, key) {
906
+ let mem = &self.region.mem;
907
+ // `next` is linked already, so its tail (and the tail's target) are published.
908
+ let tail = match mem.read_u32(next as usize + layout::N_TAIL) {
909
+ NULL => next,
910
+ t => t,
911
+ };
912
+ mem.write_u32(node as usize + layout::N_TAIL, tail);
913
+ }
914
+ }
915
+
916
+ /// Whether the (writer-trusted) node at `node` is in the column of internal key `key`.
917
+ fn same_column(&self, node: u32, key: &[u8]) -> bool {
918
+ let mem = &self.region.mem;
919
+ let off = node as usize;
920
+ let height = mem.read_u8(off + layout::N_HEIGHT) as usize;
921
+ let key_len = mem.read_u32(off + layout::N_KEY_LEN) as usize;
922
+ let column = key.len() - SUFFIX_LEN;
923
+ if key_len != key.len() {
924
+ return false;
925
+ }
926
+ let start = off + layout::N_TOWER + 4 * height;
927
+ // Neighbouring rows usually differ near the end of the row (sequential ids, time
928
+ // keys), past a long shared prefix: the column's last word settles most misses.
929
+ if column >= 8 && mem.cmp(start + column - 8, 8, &key[column - 8..column]) != Cmp::Equal {
930
+ return false;
931
+ }
932
+ mem.cmp(start, column, &key[..column]) == Cmp::Equal
933
+ }
934
+
935
+ /// A geometric height with ratio 1/4, from a private xorshift generator.
936
+ fn random_height(&mut self) -> usize {
937
+ let mut x = self.rng;
938
+ x ^= x << 13;
939
+ x ^= x >> 7;
940
+ x ^= x << 17;
941
+ self.rng = x;
942
+ let mut height = 1;
943
+ while height < MAX_HEIGHT && x & 3 == 0 {
944
+ height += 1;
945
+ x >>= 2;
946
+ }
947
+ height
948
+ }
949
+
950
+ /// Marks the memtable immutable (sets the frozen flag readers can see).
951
+ pub fn freeze(&mut self) {
952
+ self.frozen = true;
953
+ self.region.mem.fetch_or_u8(
954
+ self.root as usize + layout::H_FLAGS,
955
+ FLAG_FROZEN,
956
+ Ordering::Release,
957
+ );
958
+ }
959
+
960
+ /// Whether frozen.
961
+ pub fn is_frozen(&self) -> bool {
962
+ self.frozen
963
+ }
964
+
965
+ /// Entries inserted.
966
+ pub fn len(&self) -> usize {
967
+ self.count as usize
968
+ }
969
+
970
+ /// Whether no entry was inserted.
971
+ pub fn is_empty(&self) -> bool {
972
+ self.count == 0
973
+ }
974
+
975
+ /// Bytes allocated in the arena (drives freezing): the chunks this memtable owns, which
976
+ /// is what the shard's arena budget loses to it. The header's `bytes` field counts the
977
+ /// bytes actually written.
978
+ pub fn allocated_bytes(&self) -> usize {
979
+ self.allocated
980
+ }
981
+
982
+ /// Smallest and largest seqno inserted, or `None` if empty.
983
+ pub fn seqno_range(&self) -> Option<(Seqno, Seqno)> {
984
+ (self.count > 0).then_some((self.min_seqno, self.max_seqno))
985
+ }
986
+
987
+ /// Offset of the header within the arena; published in views.
988
+ pub fn root(&self) -> u32 {
989
+ self.root
990
+ }
991
+
992
+ /// Records that a delete marker (a family or row delete) is about to be inserted. Call
993
+ /// it before the marker's [`Memtable::insert`]: the store (Release) comes before the
994
+ /// marker is linked, so a reader that can see the marker sees this too
995
+ /// ([`MemtableReader::may_have_markers`], ICR 0020).
996
+ pub fn note_marker(&self) {
997
+ self.pin.markers.store(true, Ordering::Release);
998
+ }
999
+
1000
+ /// A reader for other threads. While it (or a cursor or slice taken from it) is alive,
1001
+ /// the memtable's chunks are not reused. The only reader that trusts the stale tails
1002
+ /// (D277): this process wrote them, so its column skips follow them unchecked, as D194's
1003
+ /// process-local index did. A reader from [`MemtableReader::open`] checks every tail.
1004
+ pub fn reader(&self) -> MemtableReader {
1005
+ MemtableReader {
1006
+ region: self.region.clone(),
1007
+ root: self.root,
1008
+ head: self.head,
1009
+ pin: Arc::clone(&self.pin),
1010
+ tails: self.tails,
1011
+ trusted: true,
1012
+ }
1013
+ }
1014
+
1015
+ /// Stops using the memtable after its flush is in the manifest. The returned token goes
1016
+ /// to [`ShardArena::reclaim`] when no reader slot pins a view that lists it.
1017
+ pub fn retire(self) -> Retired {
1018
+ Retired {
1019
+ runs: self.runs,
1020
+ root: self.root,
1021
+ pin: self.pin,
1022
+ }
1023
+ }
1024
+ }
1025
+
1026
+ /// A retired memtable's chunks, awaiting reclamation.
1027
+ #[derive(Debug)]
1028
+ #[must_use = "retired chunks leak unless passed to ShardArena::reclaim"]
1029
+ pub struct Retired {
1030
+ runs: Vec<Run>,
1031
+ root: u32,
1032
+ pin: Arc<Pin>,
1033
+ }
1034
+
1035
+ /// A validated node: where its parts are.
1036
+ #[derive(Debug, Clone, Copy)]
1037
+ struct Node {
1038
+ off: u32,
1039
+ height: usize,
1040
+ key_off: usize,
1041
+ key_len: usize,
1042
+ value_off: usize,
1043
+ value_len: usize,
1044
+ }
1045
+
1046
+ /// A read handle to a memtable, usable from any thread or process. Cheap to clone.
1047
+ ///
1048
+ /// ```
1049
+ /// use pigeonhole_format::{Cursor, Kind, encode_key};
1050
+ /// use pigeonhole_memtable::{ArenaRegion, Memtable, MemtableReader, ShardArena};
1051
+ ///
1052
+ /// let mut arena = ShardArena::new(ArenaRegion::heap(1 << 20), 64 * 1024);
1053
+ /// let mut memtable = Memtable::create(&mut arena)?;
1054
+ /// let mut key = Vec::new();
1055
+ /// encode_key(&mut key, b"row", b"q", 1, 1, Kind::Put).unwrap();
1056
+ /// memtable.insert(&mut arena, &key, b"\x00v")?;
1057
+ ///
1058
+ /// // A reader process opens the root it finds in the published view.
1059
+ /// let reader = MemtableReader::open(arena.region().clone(), memtable.root())?;
1060
+ /// assert_eq!(reader.len(), 1);
1061
+ /// let mut it = reader.iter();
1062
+ /// it.seek(&key)?;
1063
+ /// assert!(it.valid() && it.key() == &key[..]);
1064
+ /// # Ok::<(), pigeonhole_memtable::Error>(())
1065
+ /// ```
1066
+ #[derive(Debug, Clone)]
1067
+ pub struct MemtableReader {
1068
+ region: ArenaRegion,
1069
+ root: u32,
1070
+ head: u32,
1071
+ /// Keeps the memtable's chunks from being reused while this handle lives (writer
1072
+ /// process only; in a reader process it pins nothing).
1073
+ pin: Arc<Pin>,
1074
+ /// The writer records stale tails in the nodes (the header's `FLAG_TAILS`, D277).
1075
+ tails: bool,
1076
+ /// The tails were written by this process: set only by [`Memtable::reader`], kept by
1077
+ /// clones and cursors, never set on a reader from [`MemtableReader::open`] (in the writer
1078
+ /// process too, whose `open` also gets a writer pin). A trusted skip follows a tail
1079
+ /// unchecked; an untrusted one validates it first (M1, P1).
1080
+ trusted: bool,
1081
+ }
1082
+
1083
+ impl MemtableReader {
1084
+ /// Whether this handle reads `table`: the same memtable, not one that later took its
1085
+ /// root after its chunks were reclaimed (#1228's publish cache compares by this).
1086
+ pub fn reads(&self, table: &Memtable) -> bool {
1087
+ Arc::ptr_eq(&self.pin, &table.pin)
1088
+ }
1089
+
1090
+ /// Whether the memtable may hold a delete marker (ICR 0020). `false` only in the writer
1091
+ /// process, for a memtable whose writer never called [`Memtable::note_marker`]. Load it
1092
+ /// after taking the read point: a marker visible at that point was linked after its
1093
+ /// note (Acquire pairs with the note's Release), so it is never missed.
1094
+ #[inline]
1095
+ pub fn may_have_markers(&self) -> bool {
1096
+ !self.pin.writer || self.pin.markers.load(Ordering::Acquire)
1097
+ }
1098
+
1099
+ /// Opens the memtable whose header is at `root` in `region` (reader processes use the
1100
+ /// root from the published view). Validates the header. In the writer process the
1101
+ /// reader pins the memtable like [`Memtable::reader`] does, provided `region` is a clone
1102
+ /// of the arena the memtable was created in.
1103
+ ///
1104
+ /// # Errors
1105
+ /// [`Error::Corrupt`] if the header is misplaced, has the wrong magic or version, or
1106
+ /// names an invalid head node.
1107
+ pub fn open(region: ArenaRegion, root: u32) -> Result<MemtableReader> {
1108
+ let off = root as usize;
1109
+ if root == NULL || !off.is_multiple_of(8) {
1110
+ return Err(Error::Corrupt("memtable root is misaligned"));
1111
+ }
1112
+ if off + layout::HEADER_LEN > region.len() {
1113
+ return Err(Error::Corrupt("memtable header outside arena"));
1114
+ }
1115
+ let mem = &region.mem;
1116
+ if mem.read_u32(off + layout::H_MAGIC) != MEMTABLE_MAGIC {
1117
+ return Err(Error::Corrupt("memtable header magic"));
1118
+ }
1119
+ let version = u16::from_le_bytes([
1120
+ mem.read_u8(off + layout::H_VERSION),
1121
+ mem.read_u8(off + layout::H_VERSION + 1),
1122
+ ]);
1123
+ if version != HEADER_VERSION {
1124
+ return Err(Error::Corrupt("memtable header version"));
1125
+ }
1126
+ let head = mem.read_u32(off + layout::H_HEAD);
1127
+ let pin = region.registry.pin_for(root);
1128
+ // Set before the memtable was published (`with_tail_index`); the frozen bit beside
1129
+ // it may change concurrently, hence an atomic load.
1130
+ let tails = mem.load_u8(off + layout::H_FLAGS, Ordering::Acquire) & FLAG_TAILS != 0;
1131
+ let reader = MemtableReader {
1132
+ region,
1133
+ root,
1134
+ head,
1135
+ pin,
1136
+ tails,
1137
+ trusted: false,
1138
+ };
1139
+ let node = reader.node(head)?;
1140
+ if node.height != MAX_HEIGHT || node.key_len != 0 || node.value_len != 0 {
1141
+ return Err(Error::Corrupt("memtable head node"));
1142
+ }
1143
+ Ok(reader)
1144
+ }
1145
+
1146
+ /// Entries visible now.
1147
+ pub fn len(&self) -> usize {
1148
+ self.region
1149
+ .mem
1150
+ .load_u32(self.root as usize + layout::H_COUNT, Ordering::Acquire) as usize
1151
+ }
1152
+
1153
+ /// Whether no entry is visible.
1154
+ pub fn is_empty(&self) -> bool {
1155
+ self.len() == 0
1156
+ }
1157
+
1158
+ /// A cursor, initially unpositioned. Holds its own clone of the reader, so it can be
1159
+ /// stored beside the view that keeps the arena memory alive.
1160
+ pub fn iter(&self) -> MemIter {
1161
+ MemIter {
1162
+ reader: self.clone(),
1163
+ node: None,
1164
+ preds: [NULL; FINGER_LEVELS],
1165
+ walk: Walk::default(),
1166
+ #[cfg(loom)]
1167
+ key_buf: Vec::new(),
1168
+ #[cfg(loom)]
1169
+ value_buf: Vec::new(),
1170
+ }
1171
+ }
1172
+
1173
+ /// The arena this memtable lives in.
1174
+ pub fn region(&self) -> &ArenaRegion {
1175
+ &self.region
1176
+ }
1177
+
1178
+ /// Validates the node at `off` (which must be non-null) and locates its parts, so that
1179
+ /// a bad link from a buggy or crashed writer surfaces as [`Error::Corrupt`], never as a
1180
+ /// fault.
1181
+ #[inline]
1182
+ fn node(&self, off: u32) -> Result<Node> {
1183
+ let len = self.region.len() as u64;
1184
+ let start = u64::from(off);
1185
+ if off == NULL || !off.is_multiple_of(4) {
1186
+ return Err(Error::Corrupt("node offset"));
1187
+ }
1188
+ if start + layout::N_TOWER as u64 > len {
1189
+ return Err(Error::Corrupt("node header outside arena"));
1190
+ }
1191
+ let mem = &self.region.mem;
1192
+ let height = mem.read_u8(off as usize + layout::N_HEIGHT) as usize;
1193
+ if height == 0 || height > MAX_HEIGHT {
1194
+ return Err(Error::Corrupt("node height"));
1195
+ }
1196
+ let key_len = mem.read_u32(off as usize + layout::N_KEY_LEN);
1197
+ let value_len = mem.read_u32(off as usize + layout::N_VALUE_LEN);
1198
+ let key_off = start + (layout::N_TOWER + 4 * height) as u64;
1199
+ let value_off = key_off + u64::from(key_len);
1200
+ if value_off + u64::from(value_len) > len {
1201
+ return Err(Error::Corrupt("node outside arena"));
1202
+ }
1203
+ Ok(Node {
1204
+ off,
1205
+ height,
1206
+ key_off: key_off as usize,
1207
+ key_len: key_len as usize,
1208
+ value_off: value_off as usize,
1209
+ value_len: value_len as usize,
1210
+ })
1211
+ }
1212
+
1213
+ /// The first node whose key is `>= target`, or `None`, recording in `preds` the last
1214
+ /// node before `target` at each of the lowest [`FINGER_LEVELS`] levels. With `finger`,
1215
+ /// `preds` holds those of an earlier search, used when they are all before `target` (a
1216
+ /// finger search, for a forward seek; otherwise a full search): it climbs from level 0 to the first level whose next
1217
+ /// node is at or past `target`, and descends from there, so its cost grows with how far
1218
+ /// the target is, not with the memtable's size; a target past the reach of the recorded
1219
+ /// levels gets a full search. Only reads: nodes are never unlinked, so `preds` stay
1220
+ /// valid lower bounds while writers insert, and a node linked after the climb read its
1221
+ /// predecessor's link is met by the descent like any other.
1222
+ ///
1223
+ /// Returns the level-0 node it stopped at rather than re-reading the predecessor's link:
1224
+ /// the writer may link a new node below `target` there between the two loads.
1225
+ fn search(
1226
+ &self,
1227
+ target: &[u8],
1228
+ preds: &mut [u32; FINGER_LEVELS],
1229
+ finger: bool,
1230
+ ) -> Result<Option<Node>> {
1231
+ let mut walk = Walk {
1232
+ steps: 0,
1233
+ budget: self.len() + STEP_SLACK,
1234
+ };
1235
+ // The recorded predecessors are lower bounds only if they are all before `target`:
1236
+ // the level-0 one is the last of them, so it alone is compared. A target before the
1237
+ // last seek's (allowed when the cursor has moved off its current key or run out)
1238
+ // gets a full search.
1239
+ if finger && self.before(preds[0], target)? {
1240
+ // The lowest recorded level whose next node is at or past `target`.
1241
+ let mut start = None;
1242
+ for (l, &pred) in preds.iter().enumerate() {
1243
+ let next = self.region.mem.load_u32(tower(pred, l), Ordering::Acquire);
1244
+ let past = next == NULL || {
1245
+ let n = self.node(next)?;
1246
+ walk.steps += 1;
1247
+ self.region.mem.cmp(n.key_off, n.key_len, target) != Cmp::Less
1248
+ };
1249
+ if past {
1250
+ start = Some(l);
1251
+ break;
1252
+ }
1253
+ }
1254
+ if let Some(top) = start {
1255
+ // Each level starts from its recorded predecessor (every node between is
1256
+ // before the earlier target) until the walk first moves forward, after which
1257
+ // it is past every recorded predecessor below.
1258
+ let mut cur = preds[top];
1259
+ let mut moved = false;
1260
+ for level in (1..=top).rev() {
1261
+ if !moved {
1262
+ cur = preds[level];
1263
+ }
1264
+ let from = cur;
1265
+ self.walk_level(&mut walk, &mut cur, level, target)?;
1266
+ moved |= cur != from;
1267
+ preds[level] = cur;
1268
+ }
1269
+ if !moved {
1270
+ cur = preds[0];
1271
+ }
1272
+ let found = self.walk_level(&mut walk, &mut cur, 0, target)?;
1273
+ preds[0] = cur;
1274
+ return Ok(found);
1275
+ }
1276
+ // Farther than the recorded levels reach: a full search.
1277
+ }
1278
+ let mut cur = self.head;
1279
+ for level in (FINGER_LEVELS..MAX_HEIGHT).rev() {
1280
+ self.walk_level(&mut walk, &mut cur, level, target)?;
1281
+ }
1282
+ for level in (1..FINGER_LEVELS).rev() {
1283
+ self.walk_level(&mut walk, &mut cur, level, target)?;
1284
+ preds[level] = cur;
1285
+ }
1286
+ let found = self.walk_level(&mut walk, &mut cur, 0, target)?;
1287
+ preds[0] = cur;
1288
+ Ok(found)
1289
+ }
1290
+
1291
+ /// Whether node `off` (the head, or a linked node) sorts before `target`.
1292
+ fn before(&self, off: u32, target: &[u8]) -> Result<bool> {
1293
+ if off == self.head {
1294
+ return Ok(true);
1295
+ }
1296
+ let n = self.node(off)?;
1297
+ Ok(self.region.mem.cmp(n.key_off, n.key_len, target) == Cmp::Less)
1298
+ }
1299
+
1300
+ /// Advances `cur` along `level` while the next node is before `target`; returns that
1301
+ /// next node (the first at or past `target` on this level), or `None` at the level's end.
1302
+ #[inline(always)]
1303
+ fn walk_level(
1304
+ &self,
1305
+ walk: &mut Walk,
1306
+ cur: &mut u32,
1307
+ level: usize,
1308
+ target: &[u8],
1309
+ ) -> Result<Option<Node>> {
1310
+ let mem = &self.region.mem;
1311
+ loop {
1312
+ let next = mem.load_u32(tower(*cur, level), Ordering::Acquire);
1313
+ if next == NULL {
1314
+ return Ok(None);
1315
+ }
1316
+ let n = self.node(next)?;
1317
+ if level >= n.height {
1318
+ return Err(Error::Corrupt("node linked above its height"));
1319
+ }
1320
+ walk.step(self)?;
1321
+ if mem.cmp(n.key_off, n.key_len, target) == Cmp::Less {
1322
+ *cur = next;
1323
+ } else {
1324
+ return Ok(Some(n));
1325
+ }
1326
+ }
1327
+ }
1328
+
1329
+ /// The node after `node` at level 0, or `None`.
1330
+ #[inline]
1331
+ fn successor(&self, node: u32) -> Result<Option<Node>> {
1332
+ let next = self.region.mem.load_u32(tower(node, 0), Ordering::Acquire);
1333
+ if next == NULL {
1334
+ Ok(None)
1335
+ } else {
1336
+ self.node(next).map(Some)
1337
+ }
1338
+ }
1339
+
1340
+ /// Whether the validated node `n` is in `column` (an internal key without its suffix).
1341
+ #[inline]
1342
+ fn in_column(&self, n: &Node, column: &[u8]) -> bool {
1343
+ n.key_len == column.len() + SUFFIX_LEN
1344
+ && self.region.mem.cmp(n.key_off, column.len(), column) == Cmp::Equal
1345
+ }
1346
+ }
1347
+
1348
+ /// A zero-copy cursor over a memtable: keys and values borrow arena memory, which the view
1349
+ /// pin keeps alive. Owns a [`MemtableReader`] clone. Sees every entry published before each
1350
+ /// move.
1351
+ ///
1352
+ /// ```
1353
+ /// use pigeonhole_format::{Cursor, Kind, encode_key};
1354
+ /// use pigeonhole_memtable::{ArenaRegion, Memtable, ShardArena};
1355
+ ///
1356
+ /// let mut arena = ShardArena::new(ArenaRegion::heap(1 << 20), 64 * 1024);
1357
+ /// let mut memtable = Memtable::create(&mut arena)?;
1358
+ /// let mut keys = Vec::new();
1359
+ /// for (row, seqno) in [(b"b", 1), (b"a", 2), (b"c", 3)] {
1360
+ /// let mut key = Vec::new();
1361
+ /// encode_key(&mut key, row, b"q", 0, seqno, Kind::Put).unwrap();
1362
+ /// memtable.insert(&mut arena, &key, row)?;
1363
+ /// keys.push(key);
1364
+ /// }
1365
+ ///
1366
+ /// let mut it = memtable.reader().iter();
1367
+ /// it.seek(&keys[0])?; // row "b"
1368
+ /// assert_eq!(it.value(), b"b");
1369
+ /// it.next()?;
1370
+ /// assert_eq!(it.value(), b"c");
1371
+ /// it.next()?;
1372
+ /// assert!(!it.valid());
1373
+ ///
1374
+ /// it.seek_to_first()?;
1375
+ /// let big = it.value_slice(); // outlives the cursor
1376
+ /// drop(it);
1377
+ /// assert_eq!(&*big, b"a");
1378
+ /// # Ok::<(), pigeonhole_memtable::Error>(())
1379
+ /// ```
1380
+ #[derive(Debug)]
1381
+ pub struct MemIter {
1382
+ reader: MemtableReader,
1383
+ /// The current node, or `None` when unpositioned or past the end.
1384
+ node: Option<Node>,
1385
+ /// The last node before the last seek's target at each of the lowest levels, where a
1386
+ /// forward seek starts its finger search; `NULL` at level 0 until a seek sets them.
1387
+ preds: [u32; FINGER_LEVELS],
1388
+ /// Nodes stepped to since the last seek, and how many are plausible before the walk is
1389
+ /// declared a cycle.
1390
+ walk: Walk,
1391
+ #[cfg(loom)]
1392
+ key_buf: Vec<u8>,
1393
+ #[cfg(loom)]
1394
+ value_buf: Vec<u8>,
1395
+ }
1396
+
1397
+ impl MemIter {
1398
+ /// Whether [`Cursor::skip_column`] can jump here: the memtable has a stale-tail index
1399
+ /// (D194) and holds entries. A reader can leave the skip off for a read whose sources
1400
+ /// have no such memtable, so it never pays for a try that cannot succeed.
1401
+ pub fn skips_columns(&self) -> bool {
1402
+ self.reader.tails && !self.reader.is_empty()
1403
+ }
1404
+
1405
+ /// [`Cursor::skip_column`]'s jump: from the tail `at`, steps while the key is still in
1406
+ /// `column` (following later tails), and stops on the first entry past it.
1407
+ ///
1408
+ /// A tail is an offset read from the arena, untrusted in a reader process (D277,
1409
+ /// perf287's M1): each one is validated as a node ([`MemtableReader::node`]) before its
1410
+ /// link is loaded, and must be in `column` (P1), so a bad tail (reused memory, a writer
1411
+ /// bug) is [`Error::Corrupt`], never a fault or a silent skip of live entries.
1412
+ fn jump(&mut self, mut at: u32, column: &[u8]) -> Result<bool> {
1413
+ loop {
1414
+ self.walk.step(&self.reader)?;
1415
+ if self.reader.trusted {
1416
+ // This process wrote the tail: checked in debug builds only, so a
1417
+ // `record_tail` bug still fails the tests.
1418
+ debug_assert!(
1419
+ self.reader
1420
+ .node(at)
1421
+ .is_ok_and(|t| self.reader.in_column(&t, column)),
1422
+ "stale tail {at} outside its column"
1423
+ );
1424
+ } else {
1425
+ // From shared memory: validated before its link is loaded (M1), and in the
1426
+ // column (P1).
1427
+ let t = self.reader.node(at)?;
1428
+ if !self.reader.in_column(&t, column) {
1429
+ return Err(Error::Corrupt("stale tail outside its column"));
1430
+ }
1431
+ }
1432
+ let next = self.reader.successor(at)?;
1433
+ match next {
1434
+ Some(n) if self.reader.in_column(&n, column) => {
1435
+ at = match self
1436
+ .reader
1437
+ .region
1438
+ .mem
1439
+ .read_u32(n.off as usize + layout::N_TAIL)
1440
+ {
1441
+ NULL => n.off,
1442
+ t => t,
1443
+ };
1444
+ }
1445
+ _ => {
1446
+ self.set(next);
1447
+ return Ok(true);
1448
+ }
1449
+ }
1450
+ }
1451
+ }
1452
+
1453
+ /// The current value as an [`ArenaSlice`] that outlives the cursor, so a caller can hand
1454
+ /// out a large value without copying it (it must also hold the view pin that keeps the
1455
+ /// memtable from being reclaimed).
1456
+ ///
1457
+ /// # Panics
1458
+ /// If the cursor is not valid.
1459
+ pub fn value_slice(&self) -> ArenaSlice {
1460
+ let node = self.node.expect("value_slice on an invalid cursor");
1461
+ ArenaSlice {
1462
+ region: self.reader.region.clone(),
1463
+ offset: node.value_off,
1464
+ len: node.value_len,
1465
+ _pin: Arc::clone(&self.reader.pin),
1466
+ #[cfg(loom)]
1467
+ bytes: self.value_buf.clone(),
1468
+ }
1469
+ }
1470
+
1471
+ #[inline]
1472
+ fn set(&mut self, node: Option<Node>) {
1473
+ self.node = node;
1474
+ #[cfg(loom)]
1475
+ if let Some(n) = node {
1476
+ self.key_buf = self.reader.region.mem.copy(n.key_off, n.key_len);
1477
+ self.value_buf = self.reader.region.mem.copy(n.value_off, n.value_len);
1478
+ }
1479
+ }
1480
+ }
1481
+
1482
+ /// A byte range of an arena, readable as `&[u8]`. Holds an [`ArenaRegion`] clone (keeping the
1483
+ /// mapping alive); the memory stays meaningful only while a view listing its memtable is
1484
+ /// pinned, which the holder guarantees.
1485
+ ///
1486
+ /// ```
1487
+ /// use pigeonhole_format::{Cursor, Kind, encode_key};
1488
+ /// use pigeonhole_memtable::{ArenaRegion, ArenaSlice, Memtable, ShardArena};
1489
+ ///
1490
+ /// let mut arena = ShardArena::new(ArenaRegion::heap(1 << 20), 64 * 1024);
1491
+ /// let mut memtable = Memtable::create(&mut arena)?;
1492
+ /// let mut key = Vec::new();
1493
+ /// encode_key(&mut key, b"row", b"q", 0, 1, Kind::Put).unwrap();
1494
+ /// let value = vec![7u8; 4096];
1495
+ /// memtable.insert(&mut arena, &key, &value)?;
1496
+ ///
1497
+ /// let slice: ArenaSlice = {
1498
+ /// let mut it = memtable.reader().iter();
1499
+ /// it.seek_to_first()?;
1500
+ /// it.value_slice()
1501
+ /// };
1502
+ /// assert_eq!(slice.len(), 4096);
1503
+ /// assert_eq!(&slice[..3], &[7, 7, 7]);
1504
+ /// # Ok::<(), pigeonhole_memtable::Error>(())
1505
+ /// ```
1506
+ #[derive(Debug, Clone)]
1507
+ pub struct ArenaSlice {
1508
+ region: ArenaRegion,
1509
+ offset: usize,
1510
+ len: usize,
1511
+ /// Keeps the memtable's chunks from being reused while the slice lives (held for its
1512
+ /// drop).
1513
+ _pin: Arc<Pin>,
1514
+ #[cfg(loom)]
1515
+ bytes: Vec<u8>,
1516
+ }
1517
+
1518
+ impl std::ops::Deref for ArenaSlice {
1519
+ type Target = [u8];
1520
+
1521
+ #[cfg(not(loom))]
1522
+ fn deref(&self) -> &[u8] {
1523
+ self.region.mem.slice(self.offset, self.len)
1524
+ }
1525
+
1526
+ #[cfg(loom)]
1527
+ fn deref(&self) -> &[u8] {
1528
+ let _ = (&self.region, self.offset, self.len);
1529
+ &self.bytes
1530
+ }
1531
+ }
1532
+
1533
+ /// Entries [`MemIter::skip_row`] steps before it seeks past the row: a narrow row ends
1534
+ /// within them, and a step costs less than a search.
1535
+ const ROW_SKIP_STEPS: usize = 8;
1536
+
1537
+ impl Cursor for MemIter {
1538
+ type Error = Error;
1539
+
1540
+ #[inline]
1541
+ fn valid(&self) -> bool {
1542
+ self.node.is_some()
1543
+ }
1544
+
1545
+ #[cfg(not(loom))]
1546
+ #[inline]
1547
+ fn key(&self) -> &[u8] {
1548
+ let node = self.node.expect("key on an invalid cursor");
1549
+ self.reader.region.mem.slice(node.key_off, node.key_len)
1550
+ }
1551
+
1552
+ #[cfg(loom)]
1553
+ fn key(&self) -> &[u8] {
1554
+ assert!(self.node.is_some(), "key on an invalid cursor");
1555
+ &self.key_buf
1556
+ }
1557
+
1558
+ #[cfg(not(loom))]
1559
+ #[inline]
1560
+ fn value(&self) -> &[u8] {
1561
+ let node = self.node.expect("value on an invalid cursor");
1562
+ self.reader.region.mem.slice(node.value_off, node.value_len)
1563
+ }
1564
+
1565
+ #[cfg(loom)]
1566
+ fn value(&self) -> &[u8] {
1567
+ assert!(self.node.is_some(), "value on an invalid cursor");
1568
+ &self.value_buf
1569
+ }
1570
+
1571
+ fn seek_to_first(&mut self) -> Result<()> {
1572
+ let first = self.reader.successor(self.reader.head)?;
1573
+ self.walk.steps = 0;
1574
+ self.preds[0] = NULL;
1575
+ self.set(first);
1576
+ Ok(())
1577
+ }
1578
+
1579
+ fn seek(&mut self, target: &[u8]) -> Result<()> {
1580
+ let found = self.reader.search(target, &mut self.preds, false)?;
1581
+ self.walk.steps = 0;
1582
+ self.set(found);
1583
+ Ok(())
1584
+ }
1585
+
1586
+ /// A finger search from the last seek's position: cost grows with the distance to
1587
+ /// `target`. Any `target` gives the first entry `>= target`, as [`Cursor::seek`] does: one
1588
+ /// before the last seek's (the cursor exhausted, or moved past it) gets a full search.
1589
+ fn seek_forward(&mut self, target: &[u8]) -> Result<()> {
1590
+ let finger = self.preds[0] != NULL;
1591
+ let found = self.reader.search(target, &mut self.preds, finger)?;
1592
+ self.walk.steps = 0;
1593
+ self.set(found);
1594
+ Ok(())
1595
+ }
1596
+
1597
+ /// Steps a few entries, as most rows end within them, then finger-searches past the
1598
+ /// row: `escaped row ++ 00 02` sorts after every key of the row and before every later
1599
+ /// row, as the SST's row skip seeks (#1426). The default steps through the whole row, so
1600
+ /// a filter's `SkipRow` in a wide row (a qualifier prefix in the middle of 100,000
1601
+ /// cells) walked the rest of it.
1602
+ fn skip_row(&mut self) -> Result<()> {
1603
+ if !self.valid() {
1604
+ return Ok(());
1605
+ }
1606
+ let Ok(n) = pigeonhole_format::key::row_prefix_len(self.key()) else {
1607
+ return self.next();
1608
+ };
1609
+ // Copied to the stack, which holds most row prefixes (no allocation per skip).
1610
+ let mut inline = [0u8; 64];
1611
+ let mut heap = Vec::new();
1612
+ let row: &mut [u8] = if let Some(buf) = inline.get_mut(..n) {
1613
+ buf.copy_from_slice(&self.key()[..n]);
1614
+ buf
1615
+ } else {
1616
+ heap.extend_from_slice(&self.key()[..n]);
1617
+ &mut heap
1618
+ };
1619
+ for _ in 0..ROW_SKIP_STEPS {
1620
+ self.next()?;
1621
+ if !self.valid() || !self.key().starts_with(row) {
1622
+ return Ok(());
1623
+ }
1624
+ }
1625
+ if let Some(last) = row.last_mut() {
1626
+ *last = 0x02;
1627
+ }
1628
+ self.seek_forward(row)
1629
+ }
1630
+
1631
+ /// With a stale-tail index (D194): jumps to the tail recorded for the current entry,
1632
+ /// then steps inside the memtable while the key is still in `column`.
1633
+ #[inline]
1634
+ fn skip_column(&mut self, column: &[u8]) -> Result<bool> {
1635
+ let Some(node) = self.node.filter(|_| self.reader.tails) else {
1636
+ return Ok(false);
1637
+ };
1638
+ let at = self
1639
+ .reader
1640
+ .region
1641
+ .mem
1642
+ .read_u32(node.off as usize + layout::N_TAIL);
1643
+ if at == NULL {
1644
+ return Ok(false);
1645
+ }
1646
+ self.jump(at, column)
1647
+ }
1648
+
1649
+ fn next(&mut self) -> Result<()> {
1650
+ let Some(node) = self.node else {
1651
+ return Ok(());
1652
+ };
1653
+ self.walk.step(&self.reader)?;
1654
+ let next = self.reader.successor(node.off)?;
1655
+ self.set(next);
1656
+ Ok(())
1657
+ }
1658
+ }