rbs 4.1.0.pre.2-java

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 (574) hide show
  1. checksums.yaml +7 -0
  2. data/.clang-format +75 -0
  3. data/.clangd +2 -0
  4. data/.github/dependabot.yml +24 -0
  5. data/.github/workflows/bundle-update.yml +63 -0
  6. data/.github/workflows/c-check.yml +61 -0
  7. data/.github/workflows/comments.yml +37 -0
  8. data/.github/workflows/dependabot.yml +30 -0
  9. data/.github/workflows/jruby.yml +67 -0
  10. data/.github/workflows/milestone.yml +83 -0
  11. data/.github/workflows/ruby.yml +158 -0
  12. data/.github/workflows/rust.yml +184 -0
  13. data/.github/workflows/truffleruby.yml +54 -0
  14. data/.github/workflows/typecheck.yml +39 -0
  15. data/.github/workflows/wasm.yml +53 -0
  16. data/.github/workflows/windows.yml +49 -0
  17. data/.gitignore +38 -0
  18. data/.rubocop.yml +72 -0
  19. data/BSDL +22 -0
  20. data/CHANGELOG.md +2292 -0
  21. data/COPYING +56 -0
  22. data/README.md +240 -0
  23. data/Rakefile +869 -0
  24. data/Steepfile +53 -0
  25. data/config.yml +913 -0
  26. data/core/array.rbs +4142 -0
  27. data/core/basic_object.rbs +376 -0
  28. data/core/binding.rbs +148 -0
  29. data/core/builtin.rbs +278 -0
  30. data/core/class.rbs +223 -0
  31. data/core/comparable.rbs +192 -0
  32. data/core/complex.rbs +812 -0
  33. data/core/constants.rbs +96 -0
  34. data/core/data.rbs +415 -0
  35. data/core/dir.rbs +993 -0
  36. data/core/encoding.rbs +1368 -0
  37. data/core/enumerable.rbs +2506 -0
  38. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  39. data/core/enumerator/product.rbs +92 -0
  40. data/core/enumerator.rbs +705 -0
  41. data/core/env.rbs +6 -0
  42. data/core/errno.rbs +682 -0
  43. data/core/errors.rbs +789 -0
  44. data/core/exception.rbs +485 -0
  45. data/core/false_class.rbs +82 -0
  46. data/core/fiber.rbs +570 -0
  47. data/core/fiber_error.rbs +11 -0
  48. data/core/file.rbs +2045 -0
  49. data/core/file_constants.rbs +463 -0
  50. data/core/file_stat.rbs +534 -0
  51. data/core/file_test.rbs +331 -0
  52. data/core/float.rbs +1316 -0
  53. data/core/gc.rbs +788 -0
  54. data/core/global_variables.rbs +184 -0
  55. data/core/hash.rbs +2183 -0
  56. data/core/integer.rbs +1374 -0
  57. data/core/io/buffer.rbs +995 -0
  58. data/core/io/wait.rbs +48 -0
  59. data/core/io.rbs +3472 -0
  60. data/core/kernel.rbs +3172 -0
  61. data/core/marshal.rbs +207 -0
  62. data/core/match_data.rbs +637 -0
  63. data/core/math.rbs +770 -0
  64. data/core/method.rbs +422 -0
  65. data/core/module.rbs +1856 -0
  66. data/core/nil_class.rbs +210 -0
  67. data/core/numeric.rbs +832 -0
  68. data/core/object.rbs +108 -0
  69. data/core/object_space/weak_key_map.rbs +166 -0
  70. data/core/object_space.rbs +197 -0
  71. data/core/pathname.rbs +1322 -0
  72. data/core/proc.rbs +905 -0
  73. data/core/process.rbs +2316 -0
  74. data/core/ractor.rbs +924 -0
  75. data/core/random.rbs +255 -0
  76. data/core/range.rbs +1209 -0
  77. data/core/rational.rbs +502 -0
  78. data/core/rb_config.rbs +88 -0
  79. data/core/rbs/ops.rbs +154 -0
  80. data/core/rbs/unnamed/argf.rbs +1236 -0
  81. data/core/rbs/unnamed/env_class.rbs +1214 -0
  82. data/core/rbs/unnamed/main_class.rbs +123 -0
  83. data/core/rbs/unnamed/random.rbs +186 -0
  84. data/core/refinement.rbs +59 -0
  85. data/core/regexp.rbs +1974 -0
  86. data/core/ruby.rbs +53 -0
  87. data/core/ruby_vm.rbs +809 -0
  88. data/core/rubygems/basic_specification.rbs +6 -0
  89. data/core/rubygems/config_file.rbs +38 -0
  90. data/core/rubygems/dependency_installer.rbs +6 -0
  91. data/core/rubygems/errors.rbs +109 -0
  92. data/core/rubygems/installer.rbs +15 -0
  93. data/core/rubygems/path_support.rbs +6 -0
  94. data/core/rubygems/platform.rbs +7 -0
  95. data/core/rubygems/request_set.rbs +49 -0
  96. data/core/rubygems/requirement.rbs +148 -0
  97. data/core/rubygems/rubygems.rbs +1105 -0
  98. data/core/rubygems/source_list.rbs +15 -0
  99. data/core/rubygems/specification.rbs +23 -0
  100. data/core/rubygems/stream_ui.rbs +5 -0
  101. data/core/rubygems/uninstaller.rbs +10 -0
  102. data/core/rubygems/version.rbs +293 -0
  103. data/core/set.rbs +751 -0
  104. data/core/signal.rbs +110 -0
  105. data/core/string.rbs +5532 -0
  106. data/core/struct.rbs +668 -0
  107. data/core/symbol.rbs +482 -0
  108. data/core/thread.rbs +1826 -0
  109. data/core/thread_group.rbs +79 -0
  110. data/core/time.rbs +1793 -0
  111. data/core/trace_point.rbs +483 -0
  112. data/core/true_class.rbs +98 -0
  113. data/core/unbound_method.rbs +337 -0
  114. data/core/warning.rbs +87 -0
  115. data/docs/CONTRIBUTING.md +107 -0
  116. data/docs/aliases.md +79 -0
  117. data/docs/architecture.md +110 -0
  118. data/docs/collection.md +192 -0
  119. data/docs/config.md +171 -0
  120. data/docs/data_and_struct.md +86 -0
  121. data/docs/encoding.md +56 -0
  122. data/docs/gem.md +56 -0
  123. data/docs/inline.md +634 -0
  124. data/docs/rbs_by_example.md +309 -0
  125. data/docs/repo.md +125 -0
  126. data/docs/rust.md +96 -0
  127. data/docs/sigs.md +167 -0
  128. data/docs/stdlib.md +147 -0
  129. data/docs/syntax.md +940 -0
  130. data/docs/tools.md +17 -0
  131. data/docs/type_fingerprint.md +21 -0
  132. data/docs/wasm_serialization.md +80 -0
  133. data/exe/rbs +7 -0
  134. data/ext/rbs_extension/ast_translation.c +1855 -0
  135. data/ext/rbs_extension/ast_translation.h +41 -0
  136. data/ext/rbs_extension/class_constants.c +187 -0
  137. data/ext/rbs_extension/class_constants.h +104 -0
  138. data/ext/rbs_extension/compat.h +10 -0
  139. data/ext/rbs_extension/extconf.rb +40 -0
  140. data/ext/rbs_extension/legacy_location.c +294 -0
  141. data/ext/rbs_extension/legacy_location.h +82 -0
  142. data/ext/rbs_extension/main.c +613 -0
  143. data/ext/rbs_extension/rbs_extension.h +16 -0
  144. data/ext/rbs_extension/rbs_string_bridging.c +9 -0
  145. data/ext/rbs_extension/rbs_string_bridging.h +24 -0
  146. data/goodcheck.yml +91 -0
  147. data/include/rbs/ast.h +1047 -0
  148. data/include/rbs/defines.h +99 -0
  149. data/include/rbs/lexer.h +207 -0
  150. data/include/rbs/location.h +40 -0
  151. data/include/rbs/parser.h +153 -0
  152. data/include/rbs/serialize.h +39 -0
  153. data/include/rbs/string.h +47 -0
  154. data/include/rbs/util/rbs_allocator.h +59 -0
  155. data/include/rbs/util/rbs_assert.h +20 -0
  156. data/include/rbs/util/rbs_buffer.h +83 -0
  157. data/include/rbs/util/rbs_constant_pool.h +155 -0
  158. data/include/rbs/util/rbs_encoding.h +282 -0
  159. data/include/rbs/util/rbs_unescape.h +24 -0
  160. data/include/rbs.h +14 -0
  161. data/lib/rbs/ancestor_graph.rb +92 -0
  162. data/lib/rbs/annotate/annotations.rb +199 -0
  163. data/lib/rbs/annotate/formatter.rb +82 -0
  164. data/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  165. data/lib/rbs/annotate/rdoc_source.rb +131 -0
  166. data/lib/rbs/annotate.rb +8 -0
  167. data/lib/rbs/ast/annotation.rb +29 -0
  168. data/lib/rbs/ast/comment.rb +29 -0
  169. data/lib/rbs/ast/declarations.rb +472 -0
  170. data/lib/rbs/ast/directives.rb +49 -0
  171. data/lib/rbs/ast/members.rb +451 -0
  172. data/lib/rbs/ast/ruby/annotations.rb +451 -0
  173. data/lib/rbs/ast/ruby/comment_block.rb +247 -0
  174. data/lib/rbs/ast/ruby/declarations.rb +291 -0
  175. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  176. data/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  177. data/lib/rbs/ast/ruby/members.rb +762 -0
  178. data/lib/rbs/ast/type_param.rb +235 -0
  179. data/lib/rbs/ast/visitor.rb +137 -0
  180. data/lib/rbs/buffer.rb +189 -0
  181. data/lib/rbs/builtin_names.rb +58 -0
  182. data/lib/rbs/cli/colored_io.rb +48 -0
  183. data/lib/rbs/cli/diff.rb +84 -0
  184. data/lib/rbs/cli/validate.rb +294 -0
  185. data/lib/rbs/cli.rb +1253 -0
  186. data/lib/rbs/collection/cleaner.rb +38 -0
  187. data/lib/rbs/collection/config/lockfile.rb +92 -0
  188. data/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  189. data/lib/rbs/collection/config.rb +81 -0
  190. data/lib/rbs/collection/installer.rb +32 -0
  191. data/lib/rbs/collection/sources/base.rb +14 -0
  192. data/lib/rbs/collection/sources/git.rb +265 -0
  193. data/lib/rbs/collection/sources/local.rb +81 -0
  194. data/lib/rbs/collection/sources/rubygems.rb +48 -0
  195. data/lib/rbs/collection/sources/stdlib.rb +50 -0
  196. data/lib/rbs/collection/sources.rb +38 -0
  197. data/lib/rbs/collection.rb +16 -0
  198. data/lib/rbs/constant.rb +28 -0
  199. data/lib/rbs/definition.rb +415 -0
  200. data/lib/rbs/definition_builder/ancestor_builder.rb +678 -0
  201. data/lib/rbs/definition_builder/method_builder.rb +295 -0
  202. data/lib/rbs/definition_builder.rb +1054 -0
  203. data/lib/rbs/diff.rb +131 -0
  204. data/lib/rbs/environment/class_entry.rb +69 -0
  205. data/lib/rbs/environment/module_entry.rb +66 -0
  206. data/lib/rbs/environment/use_map.rb +77 -0
  207. data/lib/rbs/environment.rb +1028 -0
  208. data/lib/rbs/environment_loader.rb +167 -0
  209. data/lib/rbs/environment_walker.rb +155 -0
  210. data/lib/rbs/errors.rb +634 -0
  211. data/lib/rbs/factory.rb +18 -0
  212. data/lib/rbs/file_finder.rb +28 -0
  213. data/lib/rbs/inline_parser/comment_association.rb +117 -0
  214. data/lib/rbs/inline_parser.rb +568 -0
  215. data/lib/rbs/location_aux.rb +170 -0
  216. data/lib/rbs/locator.rb +247 -0
  217. data/lib/rbs/method_type.rb +145 -0
  218. data/lib/rbs/namespace.rb +154 -0
  219. data/lib/rbs/parser/lex_result.rb +15 -0
  220. data/lib/rbs/parser/token.rb +23 -0
  221. data/lib/rbs/parser_aux.rb +142 -0
  222. data/lib/rbs/prototype/helpers.rb +197 -0
  223. data/lib/rbs/prototype/node_usage.rb +99 -0
  224. data/lib/rbs/prototype/rb.rb +816 -0
  225. data/lib/rbs/prototype/rbi.rb +625 -0
  226. data/lib/rbs/prototype/runtime/helpers.rb +59 -0
  227. data/lib/rbs/prototype/runtime/reflection.rb +19 -0
  228. data/lib/rbs/prototype/runtime/value_object_generator.rb +279 -0
  229. data/lib/rbs/prototype/runtime.rb +680 -0
  230. data/lib/rbs/repository.rb +127 -0
  231. data/lib/rbs/resolver/constant_resolver.rb +219 -0
  232. data/lib/rbs/resolver/type_name_resolver.rb +167 -0
  233. data/lib/rbs/rewriter.rb +70 -0
  234. data/lib/rbs/sorter.rb +198 -0
  235. data/lib/rbs/source.rb +99 -0
  236. data/lib/rbs/substitution.rb +83 -0
  237. data/lib/rbs/subtractor.rb +204 -0
  238. data/lib/rbs/test/errors.rb +80 -0
  239. data/lib/rbs/test/guaranteed.rb +30 -0
  240. data/lib/rbs/test/hook.rb +212 -0
  241. data/lib/rbs/test/observer.rb +19 -0
  242. data/lib/rbs/test/setup.rb +84 -0
  243. data/lib/rbs/test/setup_helper.rb +50 -0
  244. data/lib/rbs/test/tester.rb +167 -0
  245. data/lib/rbs/test/type_check.rb +457 -0
  246. data/lib/rbs/test.rb +112 -0
  247. data/lib/rbs/type_alias_dependency.rb +100 -0
  248. data/lib/rbs/type_alias_regularity.rb +126 -0
  249. data/lib/rbs/type_name.rb +122 -0
  250. data/lib/rbs/types.rb +1604 -0
  251. data/lib/rbs/unit_test/convertibles.rb +177 -0
  252. data/lib/rbs/unit_test/spy.rb +138 -0
  253. data/lib/rbs/unit_test/type_assertions.rb +383 -0
  254. data/lib/rbs/unit_test/with_aliases.rb +145 -0
  255. data/lib/rbs/unit_test.rb +6 -0
  256. data/lib/rbs/validator.rb +186 -0
  257. data/lib/rbs/variance_calculator.rb +189 -0
  258. data/lib/rbs/vendorer.rb +71 -0
  259. data/lib/rbs/version.rb +5 -0
  260. data/lib/rbs/wasm/deserializer.rb +213 -0
  261. data/lib/rbs/wasm/jars/asm-analysis.jar +0 -0
  262. data/lib/rbs/wasm/jars/asm-commons.jar +0 -0
  263. data/lib/rbs/wasm/jars/asm-tree.jar +0 -0
  264. data/lib/rbs/wasm/jars/asm-util.jar +0 -0
  265. data/lib/rbs/wasm/jars/asm.jar +0 -0
  266. data/lib/rbs/wasm/jars/compiler.jar +0 -0
  267. data/lib/rbs/wasm/jars/log.jar +0 -0
  268. data/lib/rbs/wasm/jars/runtime.jar +0 -0
  269. data/lib/rbs/wasm/jars/wasi.jar +0 -0
  270. data/lib/rbs/wasm/jars/wasm.jar +0 -0
  271. data/lib/rbs/wasm/location.rb +61 -0
  272. data/lib/rbs/wasm/parser.rb +137 -0
  273. data/lib/rbs/wasm/rbs_parser.wasm +0 -0
  274. data/lib/rbs/wasm/runtime.rb +217 -0
  275. data/lib/rbs/wasm/serialization_schema.rb +110 -0
  276. data/lib/rbs/writer.rb +424 -0
  277. data/lib/rbs.rb +117 -0
  278. data/lib/rdoc/discover.rb +20 -0
  279. data/lib/rdoc_plugin/parser.rb +163 -0
  280. data/rbs.gemspec +68 -0
  281. data/schema/annotation.json +14 -0
  282. data/schema/comment.json +26 -0
  283. data/schema/decls.json +326 -0
  284. data/schema/function.json +87 -0
  285. data/schema/location.json +56 -0
  286. data/schema/members.json +266 -0
  287. data/schema/methodType.json +50 -0
  288. data/schema/typeParam.json +52 -0
  289. data/schema/types.json +317 -0
  290. data/sig/ancestor_builder.rbs +163 -0
  291. data/sig/ancestor_graph.rbs +60 -0
  292. data/sig/annotate/annotations.rbs +102 -0
  293. data/sig/annotate/formatter.rbs +24 -0
  294. data/sig/annotate/rdoc_annotater.rbs +85 -0
  295. data/sig/annotate/rdoc_source.rbs +32 -0
  296. data/sig/annotation.rbs +27 -0
  297. data/sig/ast/ruby/annotations.rbs +470 -0
  298. data/sig/ast/ruby/comment_block.rbs +127 -0
  299. data/sig/ast/ruby/declarations.rbs +158 -0
  300. data/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  301. data/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  302. data/sig/ast/ruby/members.rbs +198 -0
  303. data/sig/buffer.rbs +108 -0
  304. data/sig/builtin_names.rbs +44 -0
  305. data/sig/cli/colored_io.rbs +15 -0
  306. data/sig/cli/diff.rbs +15 -0
  307. data/sig/cli/validate.rbs +47 -0
  308. data/sig/cli.rbs +89 -0
  309. data/sig/collection/cleaner.rbs +13 -0
  310. data/sig/collection/config/lockfile.rbs +74 -0
  311. data/sig/collection/config/lockfile_generator.rbs +68 -0
  312. data/sig/collection/config.rbs +46 -0
  313. data/sig/collection/installer.rbs +17 -0
  314. data/sig/collection/sources.rbs +214 -0
  315. data/sig/collection.rbs +4 -0
  316. data/sig/comment.rbs +26 -0
  317. data/sig/constant.rbs +21 -0
  318. data/sig/declarations.rbs +274 -0
  319. data/sig/definition.rbs +232 -0
  320. data/sig/definition_builder.rbs +181 -0
  321. data/sig/diff.rbs +28 -0
  322. data/sig/directives.rbs +77 -0
  323. data/sig/environment/class_entry.rbs +50 -0
  324. data/sig/environment/module_entry.rbs +50 -0
  325. data/sig/environment.rbs +286 -0
  326. data/sig/environment_loader.rbs +111 -0
  327. data/sig/environment_walker.rbs +65 -0
  328. data/sig/errors.rbs +408 -0
  329. data/sig/factory.rbs +5 -0
  330. data/sig/file_finder.rbs +28 -0
  331. data/sig/inline_parser/comment_association.rbs +71 -0
  332. data/sig/inline_parser.rbs +126 -0
  333. data/sig/location.rbs +135 -0
  334. data/sig/locator.rbs +56 -0
  335. data/sig/manifest.yaml +5 -0
  336. data/sig/members.rbs +258 -0
  337. data/sig/method_builder.rbs +89 -0
  338. data/sig/method_types.rbs +58 -0
  339. data/sig/namespace.rbs +161 -0
  340. data/sig/parser.rbs +164 -0
  341. data/sig/prototype/helpers.rbs +29 -0
  342. data/sig/prototype/node_usage.rbs +20 -0
  343. data/sig/prototype/rb.rbs +96 -0
  344. data/sig/prototype/rbi.rbs +75 -0
  345. data/sig/prototype/runtime.rbs +182 -0
  346. data/sig/rbs.rbs +21 -0
  347. data/sig/rdoc/rbs.rbs +67 -0
  348. data/sig/repository.rbs +85 -0
  349. data/sig/resolver/constant_resolver.rbs +92 -0
  350. data/sig/resolver/context.rbs +34 -0
  351. data/sig/resolver/type_name_resolver.rbs +61 -0
  352. data/sig/rewriter.rbs +45 -0
  353. data/sig/shims/bundler.rbs +38 -0
  354. data/sig/shims/enumerable.rbs +5 -0
  355. data/sig/shims/rubygems.rbs +19 -0
  356. data/sig/sorter.rbs +41 -0
  357. data/sig/source.rbs +48 -0
  358. data/sig/substitution.rbs +48 -0
  359. data/sig/subtractor.rbs +37 -0
  360. data/sig/test/errors.rbs +52 -0
  361. data/sig/test/guranteed.rbs +9 -0
  362. data/sig/test/type_check.rbs +19 -0
  363. data/sig/test.rbs +82 -0
  364. data/sig/type_alias_dependency.rbs +53 -0
  365. data/sig/type_alias_regularity.rbs +98 -0
  366. data/sig/type_param.rbs +115 -0
  367. data/sig/typename.rbs +89 -0
  368. data/sig/types.rbs +578 -0
  369. data/sig/unit_test/convertibles.rbs +154 -0
  370. data/sig/unit_test/spy.rbs +22 -0
  371. data/sig/unit_test/type_assertions.rbs +211 -0
  372. data/sig/unit_test/with_aliases.rbs +136 -0
  373. data/sig/use_map.rbs +35 -0
  374. data/sig/util.rbs +9 -0
  375. data/sig/validator.rbs +63 -0
  376. data/sig/variance_calculator.rbs +87 -0
  377. data/sig/vendorer.rbs +51 -0
  378. data/sig/version.rbs +3 -0
  379. data/sig/visitor.rbs +47 -0
  380. data/sig/wasm/deserializer.rbs +66 -0
  381. data/sig/wasm/serialization_schema.rbs +13 -0
  382. data/sig/writer.rbs +127 -0
  383. data/src/ast.c +1628 -0
  384. data/src/lexer.c +3217 -0
  385. data/src/lexer.re +155 -0
  386. data/src/lexstate.c +217 -0
  387. data/src/location.c +31 -0
  388. data/src/parser.c +4255 -0
  389. data/src/serialize.c +958 -0
  390. data/src/string.c +41 -0
  391. data/src/util/rbs_allocator.c +162 -0
  392. data/src/util/rbs_assert.c +19 -0
  393. data/src/util/rbs_buffer.c +54 -0
  394. data/src/util/rbs_constant_pool.c +268 -0
  395. data/src/util/rbs_encoding.c +21308 -0
  396. data/src/util/rbs_unescape.c +167 -0
  397. data/stdlib/abbrev/0/abbrev.rbs +66 -0
  398. data/stdlib/abbrev/0/array.rbs +26 -0
  399. data/stdlib/base64/0/base64.rbs +355 -0
  400. data/stdlib/benchmark/0/benchmark.rbs +452 -0
  401. data/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  402. data/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  403. data/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  404. data/stdlib/cgi/0/core.rbs +911 -0
  405. data/stdlib/cgi/0/manifest.yaml +4 -0
  406. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  407. data/stdlib/coverage/0/coverage.rbs +266 -0
  408. data/stdlib/csv/0/csv.rbs +3776 -0
  409. data/stdlib/csv/0/manifest.yaml +3 -0
  410. data/stdlib/date/0/date.rbs +1598 -0
  411. data/stdlib/date/0/date_time.rbs +617 -0
  412. data/stdlib/date/0/time.rbs +26 -0
  413. data/stdlib/dbm/0/dbm.rbs +421 -0
  414. data/stdlib/delegate/0/delegator.rbs +187 -0
  415. data/stdlib/delegate/0/kernel.rbs +47 -0
  416. data/stdlib/delegate/0/simple_delegator.rbs +96 -0
  417. data/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  418. data/stdlib/digest/0/digest.rbs +687 -0
  419. data/stdlib/erb/0/erb.rbs +933 -0
  420. data/stdlib/etc/0/etc.rbs +884 -0
  421. data/stdlib/fileutils/0/fileutils.rbs +1753 -0
  422. data/stdlib/find/0/find.rbs +49 -0
  423. data/stdlib/forwardable/0/forwardable.rbs +271 -0
  424. data/stdlib/io-console/0/io-console.rbs +414 -0
  425. data/stdlib/ipaddr/0/ipaddr.rbs +436 -0
  426. data/stdlib/json/0/json.rbs +1963 -0
  427. data/stdlib/kconv/0/kconv.rbs +166 -0
  428. data/stdlib/logger/0/formatter.rbs +45 -0
  429. data/stdlib/logger/0/log_device.rbs +100 -0
  430. data/stdlib/logger/0/logger.rbs +796 -0
  431. data/stdlib/logger/0/manifest.yaml +2 -0
  432. data/stdlib/logger/0/period.rbs +17 -0
  433. data/stdlib/logger/0/severity.rbs +34 -0
  434. data/stdlib/minitest/0/kernel.rbs +42 -0
  435. data/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  436. data/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  437. data/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  438. data/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  439. data/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  440. data/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  441. data/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  442. data/stdlib/minitest/0/minitest/compress.rbs +13 -0
  443. data/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  444. data/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  445. data/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  446. data/stdlib/minitest/0/minitest/guard.rbs +64 -0
  447. data/stdlib/minitest/0/minitest/mock.rbs +64 -0
  448. data/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  449. data/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  450. data/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  451. data/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  452. data/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  453. data/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  454. data/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  455. data/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  456. data/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  457. data/stdlib/minitest/0/minitest/result.rbs +28 -0
  458. data/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  459. data/stdlib/minitest/0/minitest/skip.rbs +6 -0
  460. data/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  461. data/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  462. data/stdlib/minitest/0/minitest/spec.rbs +11 -0
  463. data/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  464. data/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  465. data/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  466. data/stdlib/minitest/0/minitest/test.rbs +69 -0
  467. data/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  468. data/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  469. data/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  470. data/stdlib/minitest/0/minitest/unit.rbs +4 -0
  471. data/stdlib/minitest/0/minitest.rbs +115 -0
  472. data/stdlib/monitor/0/monitor.rbs +363 -0
  473. data/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  474. data/stdlib/net-http/0/manifest.yaml +3 -0
  475. data/stdlib/net-http/0/net-http.rbs +5580 -0
  476. data/stdlib/net-protocol/0/manifest.yaml +2 -0
  477. data/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  478. data/stdlib/net-smtp/0/manifest.yaml +2 -0
  479. data/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  480. data/stdlib/nkf/0/nkf.rbs +402 -0
  481. data/stdlib/objspace/0/objspace.rbs +470 -0
  482. data/stdlib/observable/0/observable.rbs +217 -0
  483. data/stdlib/open-uri/0/manifest.yaml +4 -0
  484. data/stdlib/open-uri/0/open-uri.rbs +433 -0
  485. data/stdlib/open3/0/open3.rbs +606 -0
  486. data/stdlib/openssl/0/manifest.yaml +3 -0
  487. data/stdlib/openssl/0/openssl.rbs +12231 -0
  488. data/stdlib/optparse/0/optparse.rbs +1734 -0
  489. data/stdlib/pathname/0/pathname.rbs +36 -0
  490. data/stdlib/pp/0/manifest.yaml +2 -0
  491. data/stdlib/pp/0/pp.rbs +301 -0
  492. data/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  493. data/stdlib/pstore/0/pstore.rbs +608 -0
  494. data/stdlib/psych/0/core_ext.rbs +12 -0
  495. data/stdlib/psych/0/dbm.rbs +237 -0
  496. data/stdlib/psych/0/manifest.yaml +3 -0
  497. data/stdlib/psych/0/psych.rbs +455 -0
  498. data/stdlib/psych/0/store.rbs +57 -0
  499. data/stdlib/pty/0/pty.rbs +240 -0
  500. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  501. data/stdlib/rdoc/0/code_object.rbs +52 -0
  502. data/stdlib/rdoc/0/comment.rbs +61 -0
  503. data/stdlib/rdoc/0/context.rbs +153 -0
  504. data/stdlib/rdoc/0/markup.rbs +117 -0
  505. data/stdlib/rdoc/0/options.rbs +76 -0
  506. data/stdlib/rdoc/0/parser.rbs +56 -0
  507. data/stdlib/rdoc/0/rdoc.rbs +393 -0
  508. data/stdlib/rdoc/0/ri.rbs +17 -0
  509. data/stdlib/rdoc/0/store.rbs +48 -0
  510. data/stdlib/rdoc/0/top_level.rbs +97 -0
  511. data/stdlib/resolv/0/manifest.yaml +3 -0
  512. data/stdlib/resolv/0/resolv.rbs +1787 -0
  513. data/stdlib/ripper/0/ripper.rbs +1654 -0
  514. data/stdlib/securerandom/0/manifest.yaml +2 -0
  515. data/stdlib/securerandom/0/securerandom.rbs +49 -0
  516. data/stdlib/shellwords/0/shellwords.rbs +229 -0
  517. data/stdlib/singleton/0/singleton.rbs +134 -0
  518. data/stdlib/socket/0/addrinfo.rbs +666 -0
  519. data/stdlib/socket/0/basic_socket.rbs +590 -0
  520. data/stdlib/socket/0/constants.rbs +2295 -0
  521. data/stdlib/socket/0/ip_socket.rbs +94 -0
  522. data/stdlib/socket/0/socket.rbs +4170 -0
  523. data/stdlib/socket/0/socket_error.rbs +5 -0
  524. data/stdlib/socket/0/tcp_server.rbs +192 -0
  525. data/stdlib/socket/0/tcp_socket.rbs +87 -0
  526. data/stdlib/socket/0/udp_socket.rbs +133 -0
  527. data/stdlib/socket/0/unix_server.rbs +169 -0
  528. data/stdlib/socket/0/unix_socket.rbs +172 -0
  529. data/stdlib/stringio/0/stringio.rbs +1681 -0
  530. data/stdlib/strscan/0/string_scanner.rbs +1648 -0
  531. data/stdlib/tempfile/0/tempfile.rbs +483 -0
  532. data/stdlib/time/0/time.rbs +434 -0
  533. data/stdlib/timeout/0/timeout.rbs +137 -0
  534. data/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  535. data/stdlib/tsort/0/cyclic.rbs +8 -0
  536. data/stdlib/tsort/0/interfaces.rbs +20 -0
  537. data/stdlib/tsort/0/tsort.rbs +410 -0
  538. data/stdlib/uri/0/common.rbs +621 -0
  539. data/stdlib/uri/0/file.rbs +118 -0
  540. data/stdlib/uri/0/ftp.rbs +13 -0
  541. data/stdlib/uri/0/generic.rbs +1116 -0
  542. data/stdlib/uri/0/http.rbs +104 -0
  543. data/stdlib/uri/0/https.rbs +14 -0
  544. data/stdlib/uri/0/ldap.rbs +230 -0
  545. data/stdlib/uri/0/ldaps.rbs +14 -0
  546. data/stdlib/uri/0/mailto.rbs +92 -0
  547. data/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  548. data/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  549. data/stdlib/uri/0/ws.rbs +13 -0
  550. data/stdlib/uri/0/wss.rbs +9 -0
  551. data/stdlib/yaml/0/manifest.yaml +2 -0
  552. data/stdlib/yaml/0/yaml.rbs +1 -0
  553. data/stdlib/zlib/0/buf_error.rbs +10 -0
  554. data/stdlib/zlib/0/data_error.rbs +10 -0
  555. data/stdlib/zlib/0/deflate.rbs +211 -0
  556. data/stdlib/zlib/0/error.rbs +20 -0
  557. data/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  558. data/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  559. data/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  560. data/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  561. data/stdlib/zlib/0/gzip_file.rbs +156 -0
  562. data/stdlib/zlib/0/gzip_reader.rbs +293 -0
  563. data/stdlib/zlib/0/gzip_writer.rbs +168 -0
  564. data/stdlib/zlib/0/inflate.rbs +180 -0
  565. data/stdlib/zlib/0/mem_error.rbs +10 -0
  566. data/stdlib/zlib/0/need_dict.rbs +13 -0
  567. data/stdlib/zlib/0/stream_end.rbs +11 -0
  568. data/stdlib/zlib/0/stream_error.rbs +11 -0
  569. data/stdlib/zlib/0/version_error.rbs +11 -0
  570. data/stdlib/zlib/0/zlib.rbs +449 -0
  571. data/stdlib/zlib/0/zstream.rbs +201 -0
  572. data/wasm/README.md +59 -0
  573. data/wasm/rbs_wasm.c +411 -0
  574. metadata +660 -0
@@ -0,0 +1,995 @@
1
+ %a{annotate:rdoc:skip}
2
+ class IO
3
+ # <!-- rdoc-file=io_buffer.c -->
4
+ # IO::Buffer is a efficient zero-copy buffer for input/output. There are typical
5
+ # use cases:
6
+ #
7
+ # * Create an empty buffer with ::new, fill it with buffer using #copy or
8
+ # #set_value, #set_string, get buffer with #get_string or write it directly
9
+ # to some file with #write.
10
+ # * Create a buffer mapped to some string with ::for, then it could be used
11
+ # both for reading with #get_string or #get_value, and writing (writing will
12
+ # change the source string, too).
13
+ # * Create a buffer mapped to some file with ::map, then it could be used for
14
+ # reading and writing the underlying file.
15
+ # * Create a string of a fixed size with ::string, then #read into it, or
16
+ # modify it using #set_value.
17
+ #
18
+ # Interaction with string and file memory is performed by efficient low-level C
19
+ # mechanisms like `memcpy`.
20
+ #
21
+ # The class is meant to be an utility for implementing more high-level
22
+ # mechanisms like Fiber::Scheduler#io_read and Fiber::Scheduler#io_write and
23
+ # parsing binary protocols.
24
+ #
25
+ # ## Examples of Usage
26
+ #
27
+ # Empty buffer:
28
+ #
29
+ # buffer = IO::Buffer.new(8) # create empty 8-byte buffer
30
+ # # =>
31
+ # # #<IO::Buffer 0x0000555f5d1a5c50+8 INTERNAL>
32
+ # # ...
33
+ # buffer
34
+ # # =>
35
+ # # <IO::Buffer 0x0000555f5d156ab0+8 INTERNAL>
36
+ # # 0x00000000 00 00 00 00 00 00 00 00
37
+ # buffer.set_string('test', 2) # put there bytes of the "test" string, starting from offset 2
38
+ # # => 4
39
+ # buffer.get_string # get the result
40
+ # # => "\x00\x00test\x00\x00"
41
+ #
42
+ # Buffer from string:
43
+ #
44
+ # string = 'data'
45
+ # IO::Buffer.for(string) do |buffer|
46
+ # buffer
47
+ # # =>
48
+ # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
49
+ # # 0x00000000 64 61 74 61 data
50
+ #
51
+ # buffer.get_string(2) # read content starting from offset 2
52
+ # # => "ta"
53
+ # buffer.set_string('---', 1) # write content, starting from offset 1
54
+ # # => 3
55
+ # buffer
56
+ # # =>
57
+ # # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
58
+ # # 0x00000000 64 2d 2d 2d d---
59
+ # string # original string changed, too
60
+ # # => "d---"
61
+ # end
62
+ #
63
+ # Buffer from file:
64
+ #
65
+ # File.write('test.txt', 'test data')
66
+ # # => 9
67
+ # buffer = IO::Buffer.map(File.open('test.txt'), nil, 0, IO::Buffer::READONLY)
68
+ # # =>
69
+ # # #<IO::Buffer 0x00007f3f0768c000+9 EXTERNAL MAPPED FILE SHARED READONLY>
70
+ # # ...
71
+ # buffer.get_string(5, 2) # read 2 bytes, starting from offset 5
72
+ # # => "da"
73
+ # buffer.set_string('---', 1) # attempt to write
74
+ # # in `set_string': Buffer is not writable! (IO::Buffer::AccessError)
75
+ #
76
+ # # To create writable file-mapped buffer
77
+ # # Open file for read-write, pass size, offset, and flags=0
78
+ # buffer = IO::Buffer.map(File.open('test.txt', 'r+'), 9, 0, 0)
79
+ # buffer.set_string('---', 1)
80
+ # # => 3 -- bytes written
81
+ # File.read('test.txt')
82
+ # # => "t--- data"
83
+ #
84
+ # <strong>The class is experimental and the interface is subject to change, this
85
+ # is especially true of file mappings which may be removed entirely in the
86
+ # future.</strong>
87
+ #
88
+ class Buffer
89
+ include Comparable
90
+
91
+ # <!--
92
+ # rdoc-file=io_buffer.c
93
+ # - IO::Buffer.for(string) -> readonly io_buffer
94
+ # - IO::Buffer.for(string) {|io_buffer| ... read/write io_buffer ...}
95
+ # -->
96
+ # Creates a zero-copy IO::Buffer from the given string's memory. Without a block
97
+ # a frozen internal copy of the string is created efficiently and used as the
98
+ # buffer source. When a block is provided, the buffer is associated directly
99
+ # with the string's internal buffer and updating the buffer will update the
100
+ # string.
101
+ #
102
+ # Until #free is invoked on the buffer, either explicitly or via the garbage
103
+ # collector, the source string will be locked and cannot be modified.
104
+ #
105
+ # If the string is frozen, it will create a read-only buffer which cannot be
106
+ # modified. If the string is shared, it may trigger a copy-on-write when using
107
+ # the block form.
108
+ #
109
+ # string = 'test'
110
+ # buffer = IO::Buffer.for(string)
111
+ # buffer.external? #=> true
112
+ #
113
+ # buffer.get_string(0, 1)
114
+ # # => "t"
115
+ # string
116
+ # # => "test"
117
+ #
118
+ # buffer.resize(100)
119
+ # # in `resize': Cannot resize external buffer! (IO::Buffer::AccessError)
120
+ #
121
+ # IO::Buffer.for(string) do |buffer|
122
+ # buffer.set_string("T")
123
+ # string
124
+ # # => "Test"
125
+ # end
126
+ #
127
+ def self.for: (String) -> Buffer
128
+
129
+ # <!--
130
+ # rdoc-file=io_buffer.c
131
+ # - IO::Buffer.map(file, [size, [offset, [flags]]]) -> io_buffer
132
+ # -->
133
+ # Create an IO::Buffer for reading from `file` by memory-mapping the file.
134
+ # `file` should be a `File` instance, opened for reading or reading and writing.
135
+ #
136
+ # Optional `size` and `offset` of mapping can be specified. Trying to map an
137
+ # empty file or specify `size` of 0 will raise an error. Valid values for
138
+ # `offset` are system-dependent.
139
+ #
140
+ # By default, the buffer is writable and expects the file to be writable. It is
141
+ # also shared, so several processes can use the same mapping.
142
+ #
143
+ # You can pass IO::Buffer::READONLY in `flags` argument to make a read-only
144
+ # buffer; this allows to work with files opened only for reading. Specifying
145
+ # IO::Buffer::PRIVATE in `flags` creates a private mapping, which will not
146
+ # impact other processes or the underlying file. It also allows updating a
147
+ # buffer created from a read-only file.
148
+ #
149
+ # File.write('test.txt', 'test')
150
+ #
151
+ # buffer = IO::Buffer.map(File.open('test.txt'), nil, 0, IO::Buffer::READONLY)
152
+ # # => #<IO::Buffer 0x00000001014a0000+4 EXTERNAL MAPPED FILE SHARED READONLY>
153
+ #
154
+ # buffer.readonly? # => true
155
+ #
156
+ # buffer.get_string
157
+ # # => "test"
158
+ #
159
+ # buffer.set_string('b', 0)
160
+ # # 'IO::Buffer#set_string': Buffer is not writable! (IO::Buffer::AccessError)
161
+ #
162
+ # # create read/write mapping: length 4 bytes, offset 0, flags 0
163
+ # buffer = IO::Buffer.map(File.open('test.txt', 'r+'), 4, 0)
164
+ # buffer.set_string('b', 0)
165
+ # # => 1
166
+ #
167
+ # # Check it
168
+ # File.read('test.txt')
169
+ # # => "best"
170
+ #
171
+ # Note that some operating systems may not have cache coherency between mapped
172
+ # buffers and file reads.
173
+ #
174
+ def self.map: (File file, ?Integer? size, ?Integer offset, ?Integer flags) -> Buffer
175
+
176
+ # <!--
177
+ # rdoc-file=io_buffer.c
178
+ # - IO::Buffer.string(length) {|io_buffer| ... read/write io_buffer ...} -> string
179
+ # -->
180
+ # Creates a new string of the given length and yields a zero-copy IO::Buffer
181
+ # instance to the block which uses the string as a source. The block is expected
182
+ # to write to the buffer and the string will be returned.
183
+ #
184
+ # IO::Buffer.string(4) do |buffer|
185
+ # buffer.set_string("Ruby")
186
+ # end
187
+ # # => "Ruby"
188
+ #
189
+ def self.string: (int) { (Buffer) -> void } -> String
190
+
191
+ # <!--
192
+ # rdoc-file=io_buffer.c
193
+ # - <=>(other) -> true or false
194
+ # -->
195
+ # Buffers are compared by size and exact contents of the memory they are
196
+ # referencing using `memcmp`.
197
+ #
198
+ def <=>: (Buffer) -> Integer
199
+
200
+ # <!--
201
+ # rdoc-file=io_buffer.c
202
+ # - clear(value = 0, [offset, [length]]) -> self
203
+ # -->
204
+ # Fill buffer with `value`, starting with `offset` and going for `length` bytes.
205
+ #
206
+ # buffer = IO::Buffer.for('test').dup
207
+ # # =>
208
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
209
+ # # 0x00000000 74 65 73 74 test
210
+ #
211
+ # buffer.clear
212
+ # # =>
213
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
214
+ # # 0x00000000 00 00 00 00 ....
215
+ #
216
+ # buf.clear(1) # fill with 1
217
+ # # =>
218
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
219
+ # # 0x00000000 01 01 01 01 ....
220
+ #
221
+ # buffer.clear(2, 1, 2) # fill with 2, starting from offset 1, for 2 bytes
222
+ # # =>
223
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
224
+ # # 0x00000000 01 02 02 01 ....
225
+ #
226
+ # buffer.clear(2, 1) # fill with 2, starting from offset 1
227
+ # # =>
228
+ # # <IO::Buffer 0x00007fca40087c38+4 INTERNAL>
229
+ # # 0x00000000 01 02 02 02 ....
230
+ #
231
+ def clear: (?Integer value, ?Integer offset, ?Integer length) -> self
232
+
233
+ # <!--
234
+ # rdoc-file=io_buffer.c
235
+ # - copy(source, [offset, [length, [source_offset]]]) -> size
236
+ # -->
237
+ # Efficiently copy from a source IO::Buffer into the buffer, at `offset` using
238
+ # `memmove`. For copying String instances, see #set_string.
239
+ #
240
+ # buffer = IO::Buffer.new(32)
241
+ # # =>
242
+ # # #<IO::Buffer 0x0000555f5ca22520+32 INTERNAL>
243
+ # # 0x00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
244
+ # # 0x00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ *
245
+ #
246
+ # buffer.copy(IO::Buffer.for("test"), 8)
247
+ # # => 4 -- size of buffer copied
248
+ # buffer
249
+ # # =>
250
+ # # #<IO::Buffer 0x0000555f5cf8fe40+32 INTERNAL>
251
+ # # 0x00000000 00 00 00 00 00 00 00 00 74 65 73 74 00 00 00 00 ........test....
252
+ # # 0x00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ *
253
+ #
254
+ # #copy can be used to put buffer into strings associated with buffer:
255
+ #
256
+ # string = "data: "
257
+ # # => "data: "
258
+ # buffer = IO::Buffer.for(string) do |buffer|
259
+ # buffer.copy(IO::Buffer.for("test"), 5)
260
+ # end
261
+ # # => 4
262
+ # string
263
+ # # => "data:test"
264
+ #
265
+ # Attempt to copy into a read-only buffer will fail:
266
+ #
267
+ # File.write('test.txt', 'test')
268
+ # buffer = IO::Buffer.map(File.open('test.txt'), nil, 0, IO::Buffer::READONLY)
269
+ # buffer.copy(IO::Buffer.for("test"), 8)
270
+ # # in `copy': Buffer is not writable! (IO::Buffer::AccessError)
271
+ #
272
+ # See ::map for details of creation of mutable file mappings, this will work:
273
+ #
274
+ # buffer = IO::Buffer.map(File.open('test.txt', 'r+'))
275
+ # buffer.copy(IO::Buffer.for("boom"), 0)
276
+ # # => 4
277
+ # File.read('test.txt')
278
+ # # => "boom"
279
+ #
280
+ # Attempt to copy the buffer which will need place outside of buffer's bounds
281
+ # will fail:
282
+ #
283
+ # buffer = IO::Buffer.new(2)
284
+ # buffer.copy(IO::Buffer.for('test'), 0)
285
+ # # in `copy': Specified offset+length is bigger than the buffer size! (ArgumentError)
286
+ #
287
+ # It is safe to copy between memory regions that overlaps each other. In such
288
+ # case, the data is copied as if the data was first copied from the source
289
+ # buffer to a temporary buffer, and then copied from the temporary buffer to the
290
+ # destination buffer.
291
+ #
292
+ # buffer = IO::Buffer.new(10)
293
+ # buffer.set_string("0123456789")
294
+ # buffer.copy(buffer, 3, 7)
295
+ # # => 7
296
+ # buffer
297
+ # # =>
298
+ # # #<IO::Buffer 0x000056494f8ce440+10 INTERNAL>
299
+ # # 0x00000000 30 31 32 30 31 32 33 34 35 36 0120123456
300
+ #
301
+ def copy: (Buffer source, ?Integer offset, ?Integer length, ?Integer source_offset) -> Integer
302
+
303
+ # <!--
304
+ # rdoc-file=io_buffer.c
305
+ # - empty? -> true or false
306
+ # -->
307
+ # If the buffer has 0 size: it is created by ::new with size 0, or with ::for
308
+ # from an empty string. (Note that empty files can't be mapped, so the buffer
309
+ # created with ::map will never be empty.)
310
+ #
311
+ def empty?: () -> bool
312
+
313
+ # <!--
314
+ # rdoc-file=io_buffer.c
315
+ # - external? -> true or false
316
+ # -->
317
+ # The buffer is *external* if it references the memory which is not allocated or
318
+ # mapped by the buffer itself.
319
+ #
320
+ # A buffer created using ::for has an external reference to the string's memory.
321
+ #
322
+ # External buffer can't be resized.
323
+ #
324
+ def external?: () -> bool
325
+
326
+ # <!--
327
+ # rdoc-file=io_buffer.c
328
+ # - free -> self
329
+ # -->
330
+ # If the buffer references memory, release it back to the operating system.
331
+ # * for a *mapped* buffer (e.g. from file): unmap.
332
+ # * for a buffer created from scratch: free memory.
333
+ # * for a buffer created from string: undo the association.
334
+ #
335
+ # After the buffer is freed, no further operations can't be performed on it.
336
+ #
337
+ # You can resize a freed buffer to re-allocate it.
338
+ #
339
+ # buffer = IO::Buffer.for('test')
340
+ # buffer.free
341
+ # # => #<IO::Buffer 0x0000000000000000+0 NULL>
342
+ #
343
+ # buffer.get_value(:U8, 0)
344
+ # # in `get_value': The buffer is not allocated! (IO::Buffer::AllocationError)
345
+ #
346
+ # buffer.get_string
347
+ # # in `get_string': The buffer is not allocated! (IO::Buffer::AllocationError)
348
+ #
349
+ # buffer.null?
350
+ # # => true
351
+ #
352
+ def free: () -> self
353
+
354
+ # <!--
355
+ # rdoc-file=io_buffer.c
356
+ # - get_string([offset, [length, [encoding]]]) -> string
357
+ # -->
358
+ # Read a chunk or all of the buffer into a string, in the specified `encoding`.
359
+ # If no encoding is provided <code>Encoding::BINARY</code> is used.
360
+ #
361
+ # buffer = IO::Buffer.for('test')
362
+ # buffer.get_string
363
+ # # => "test"
364
+ # buffer.get_string(2)
365
+ # # => "st"
366
+ # buffer.get_string(2, 1)
367
+ # # => "s"
368
+ #
369
+ def get_string: (?Integer offset, ?Integer length, ?Encoding encoding) -> String
370
+
371
+ # <!--
372
+ # rdoc-file=io_buffer.c
373
+ # - get_value(buffer_type, offset) -> numeric
374
+ # -->
375
+ # Read from buffer a value of `type` at `offset`. `buffer_type` should be one of
376
+ # symbols:
377
+ #
378
+ # * <code>:U8</code>: unsigned integer, 1 byte
379
+ # * <code>:S8</code>: signed integer, 1 byte
380
+ # * <code>:u16</code>: unsigned integer, 2 bytes, little-endian
381
+ # * <code>:U16</code>: unsigned integer, 2 bytes, big-endian
382
+ # * <code>:s16</code>: signed integer, 2 bytes, little-endian
383
+ # * <code>:S16</code>: signed integer, 2 bytes, big-endian
384
+ # * <code>:u32</code>: unsigned integer, 4 bytes, little-endian
385
+ # * <code>:U32</code>: unsigned integer, 4 bytes, big-endian
386
+ # * <code>:s32</code>: signed integer, 4 bytes, little-endian
387
+ # * <code>:S32</code>: signed integer, 4 bytes, big-endian
388
+ # * <code>:u64</code>: unsigned integer, 8 bytes, little-endian
389
+ # * <code>:U64</code>: unsigned integer, 8 bytes, big-endian
390
+ # * <code>:s64</code>: signed integer, 8 bytes, little-endian
391
+ # * <code>:S64</code>: signed integer, 8 bytes, big-endian
392
+ # * <code>:u128</code>: unsigned integer, 16 bytes, little-endian
393
+ # * <code>:U128</code>: unsigned integer, 16 bytes, big-endian
394
+ # * <code>:s128</code>: signed integer, 16 bytes, little-endian
395
+ # * <code>:S128</code>: signed integer, 16 bytes, big-endian
396
+ # * <code>:f32</code>: float, 4 bytes, little-endian
397
+ # * <code>:F32</code>: float, 4 bytes, big-endian
398
+ # * <code>:f64</code>: double, 8 bytes, little-endian
399
+ # * <code>:F64</code>: double, 8 bytes, big-endian
400
+ #
401
+ # A buffer type refers specifically to the type of binary buffer that is stored
402
+ # in the buffer. For example, a <code>:u32</code> buffer type is a 32-bit
403
+ # unsigned integer in little-endian format.
404
+ #
405
+ # string = [1.5].pack('f')
406
+ # # => "\x00\x00\xC0?"
407
+ # IO::Buffer.for(string).get_value(:f32, 0)
408
+ # # => 1.5
409
+ #
410
+ def get_value: (int_get_type, Integer offset) -> Integer
411
+ | (float_get_type, Integer offset) -> Float
412
+
413
+ type int_get_type = :U8 | :S8
414
+ | :u16 | :U16 | :s16 | :S16
415
+ | :u32 | :U32 | :s32 | :S32
416
+ | :u64 | :U64 | :s64 | :S64
417
+
418
+ type float_get_type = :f32 | :F32 | :f64 | :F64
419
+
420
+ # <!--
421
+ # rdoc-file=io_buffer.c
422
+ # - hexdump([offset, [length, [width]]]) -> string
423
+ # -->
424
+ # Returns a human-readable string representation of the buffer. The exact format
425
+ # is subject to change.
426
+ #
427
+ # buffer = IO::Buffer.for("Hello World")
428
+ # puts buffer.hexdump
429
+ # # 0x00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 Hello World
430
+ #
431
+ # As buffers are usually fairly big, you may want to limit the output by
432
+ # specifying the offset and length:
433
+ #
434
+ # puts buffer.hexdump(6, 5)
435
+ # # 0x00000006 57 6f 72 6c 64 World
436
+ #
437
+ def hexdump: () -> String
438
+
439
+ # <!--
440
+ # rdoc-file=io_buffer.c
441
+ # - inspect -> string
442
+ # -->
443
+ # Inspect the buffer and report useful information about it's internal state.
444
+ # Only a limited portion of the buffer will be displayed in a hexdump style
445
+ # format.
446
+ #
447
+ # buffer = IO::Buffer.for("Hello World")
448
+ # puts buffer.inspect
449
+ # # #<IO::Buffer 0x000000010198ccd8+11 EXTERNAL READONLY SLICE>
450
+ # # 0x00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 Hello World
451
+ #
452
+ def inspect: () -> String
453
+
454
+ # <!--
455
+ # rdoc-file=io_buffer.c
456
+ # - internal? -> true or false
457
+ # -->
458
+ # If the buffer is *internal*, meaning it references memory allocated by the
459
+ # buffer itself.
460
+ #
461
+ # An internal buffer is not associated with any external memory (e.g. string) or
462
+ # file mapping.
463
+ #
464
+ # Internal buffers are created using ::new and is the default when the requested
465
+ # size is less than the IO::Buffer::PAGE_SIZE and it was not requested to be
466
+ # mapped on creation.
467
+ #
468
+ # Internal buffers can be resized, and such an operation will typically
469
+ # invalidate all slices, but not always.
470
+ #
471
+ def internal?: () -> bool
472
+
473
+ # <!--
474
+ # rdoc-file=io_buffer.c
475
+ # - locked { ... }
476
+ # -->
477
+ # Allows to process a buffer in exclusive way, for concurrency-safety. While the
478
+ # block is performed, the buffer is considered locked, and no other code can
479
+ # enter the lock. Also, locked buffer can't be changed with #resize or #free.
480
+ #
481
+ # The following operations acquire a lock: #resize, #free.
482
+ #
483
+ # Locking is not thread safe. It is designed as a safety net around non-blocking
484
+ # system calls. You can only share a buffer between threads with appropriate
485
+ # synchronisation techniques.
486
+ #
487
+ # buffer = IO::Buffer.new(4)
488
+ # buffer.locked? #=> false
489
+ #
490
+ # Fiber.schedule do
491
+ # buffer.locked do
492
+ # buffer.write(io) # theoretical system call interface
493
+ # end
494
+ # end
495
+ #
496
+ # Fiber.schedule do
497
+ # # in `locked': Buffer already locked! (IO::Buffer::LockedError)
498
+ # buffer.locked do
499
+ # buffer.set_string("test", 0)
500
+ # end
501
+ # end
502
+ #
503
+ def locked: [A] () { (IO::Buffer) -> A } -> A
504
+
505
+ # <!--
506
+ # rdoc-file=io_buffer.c
507
+ # - locked? -> true or false
508
+ # -->
509
+ # If the buffer is *locked*, meaning it is inside #locked block execution.
510
+ # Locked buffer can't be resized or freed, and another lock can't be acquired on
511
+ # it.
512
+ #
513
+ # Locking is not thread safe, but is a semantic used to ensure buffers don't
514
+ # move while being used by a system call.
515
+ #
516
+ # buffer.locked do
517
+ # buffer.write(io) # theoretical system call interface
518
+ # end
519
+ #
520
+ def locked?: () -> bool
521
+
522
+ # <!--
523
+ # rdoc-file=io_buffer.c
524
+ # - mapped? -> true or false
525
+ # -->
526
+ # If the buffer is *mapped*, meaning it references memory mapped by the buffer.
527
+ #
528
+ # Mapped buffers are either anonymous, if created by ::new with the
529
+ # IO::Buffer::MAPPED flag or if the size was at least IO::Buffer::PAGE_SIZE, or
530
+ # backed by a file if created with ::map.
531
+ #
532
+ # Mapped buffers can usually be resized, and such an operation will typically
533
+ # invalidate all slices, but not always.
534
+ #
535
+ def mapped?: () -> bool
536
+
537
+ # <!--
538
+ # rdoc-file=io_buffer.c
539
+ # - null? -> true or false
540
+ # -->
541
+ # If the buffer was freed with #free, transferred with #transfer, or was never
542
+ # allocated in the first place.
543
+ #
544
+ # buffer = IO::Buffer.new(0)
545
+ # buffer.null? #=> true
546
+ #
547
+ # buffer = IO::Buffer.new(4)
548
+ # buffer.null? #=> false
549
+ # buffer.free
550
+ # buffer.null? #=> true
551
+ #
552
+ def null?: () -> bool
553
+
554
+ # <!--
555
+ # rdoc-file=io_buffer.c
556
+ # - pread(io, from, [length, [offset]]) -> read length or -errno
557
+ # -->
558
+ # Read at least `length` bytes from the `io` starting at the specified `from`
559
+ # position, into the buffer starting at `offset`. If an error occurs, return
560
+ # <code>-errno</code>.
561
+ #
562
+ # If `length` is not given or `nil`, it defaults to the size of the buffer minus
563
+ # the offset, i.e. the entire buffer.
564
+ #
565
+ # If `length` is zero, exactly one `pread` operation will occur.
566
+ #
567
+ # If `offset` is not given, it defaults to zero, i.e. the beginning of the
568
+ # buffer.
569
+ #
570
+ # IO::Buffer.for('test') do |buffer|
571
+ # p buffer
572
+ # # =>
573
+ # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
574
+ # # 0x00000000 74 65 73 74 test
575
+ #
576
+ # # take 2 bytes from the beginning of urandom,
577
+ # # put them in buffer starting from position 2
578
+ # buffer.pread(File.open('/dev/urandom', 'rb'), 0, 2, 2)
579
+ # p buffer
580
+ # # =>
581
+ # # <IO::Buffer 0x00007f3bc65f2a58+4 EXTERNAL SLICE>
582
+ # # 0x00000000 05 35 73 74 te.5
583
+ # end
584
+ #
585
+ def pread: (untyped, untyped, untyped) -> untyped
586
+
587
+ # <!--
588
+ # rdoc-file=io_buffer.c
589
+ # - pwrite(io, from, [length, [offset]]) -> written length or -errno
590
+ # -->
591
+ # Write at least `length` bytes from the buffer starting at `offset`, into the
592
+ # `io` starting at the specified `from` position. If an error occurs, return
593
+ # <code>-errno</code>.
594
+ #
595
+ # If `length` is not given or `nil`, it defaults to the size of the buffer minus
596
+ # the offset, i.e. the entire buffer.
597
+ #
598
+ # If `length` is zero, exactly one `pwrite` operation will occur.
599
+ #
600
+ # If `offset` is not given, it defaults to zero, i.e. the beginning of the
601
+ # buffer.
602
+ #
603
+ # If the `from` position is beyond the end of the file, the gap will be filled
604
+ # with null (0 value) bytes.
605
+ #
606
+ # out = File.open('output.txt', File::RDWR) # open for read/write, no truncation
607
+ # IO::Buffer.for('1234567').pwrite(out, 2, 3, 1)
608
+ #
609
+ # This leads to `234` (3 bytes, starting from position 1) being written into
610
+ # <code>output.txt</code>, starting from file position 2.
611
+ #
612
+ def pwrite: (untyped, untyped, untyped) -> untyped
613
+
614
+ # <!--
615
+ # rdoc-file=io_buffer.c
616
+ # - read(io, [length, [offset]]) -> read length or -errno
617
+ # -->
618
+ # Read at least `length` bytes from the `io`, into the buffer starting at
619
+ # `offset`. If an error occurs, return <code>-errno</code>.
620
+ #
621
+ # If `length` is not given or `nil`, it defaults to the size of the buffer minus
622
+ # the offset, i.e. the entire buffer.
623
+ #
624
+ # If `length` is zero, exactly one `read` operation will occur.
625
+ #
626
+ # If `offset` is not given, it defaults to zero, i.e. the beginning of the
627
+ # buffer.
628
+ #
629
+ # IO::Buffer.for('test') do |buffer|
630
+ # p buffer
631
+ # # =>
632
+ # # <IO::Buffer 0x00007fca40087c38+4 SLICE>
633
+ # # 0x00000000 74 65 73 74 test
634
+ # buffer.read(File.open('/dev/urandom', 'rb'), 2)
635
+ # p buffer
636
+ # # =>
637
+ # # <IO::Buffer 0x00007f3bc65f2a58+4 EXTERNAL SLICE>
638
+ # # 0x00000000 05 35 73 74 .5st
639
+ # end
640
+ #
641
+ def read: (untyped, untyped) -> untyped
642
+
643
+ # <!--
644
+ # rdoc-file=io_buffer.c
645
+ # - readonly? -> true or false
646
+ # -->
647
+ # If the buffer is *read only*, meaning the buffer cannot be modified using
648
+ # #set_value, #set_string or #copy and similar.
649
+ #
650
+ # Frozen strings and read-only files create read-only buffers.
651
+ #
652
+ def readonly?: () -> bool
653
+
654
+ # <!--
655
+ # rdoc-file=io_buffer.c
656
+ # - resize(new_size) -> self
657
+ # -->
658
+ # Resizes a buffer to a `new_size` bytes, preserving its content. Depending on
659
+ # the old and new size, the memory area associated with the buffer might be
660
+ # either extended, or rellocated at different address with content being copied.
661
+ #
662
+ # buffer = IO::Buffer.new(4)
663
+ # buffer.set_string("test", 0)
664
+ # buffer.resize(8) # resize to 8 bytes
665
+ # # =>
666
+ # # #<IO::Buffer 0x0000555f5d1a1630+8 INTERNAL>
667
+ # # 0x00000000 74 65 73 74 00 00 00 00 test....
668
+ #
669
+ # External buffer (created with ::for), and locked buffer can not be resized.
670
+ #
671
+ def resize: (Integer) -> self
672
+
673
+ # <!--
674
+ # rdoc-file=io_buffer.c
675
+ # - set_string(string, [offset, [length, [source_offset]]]) -> size
676
+ # -->
677
+ # Efficiently copy from a source String into the buffer, at `offset` using
678
+ # `memmove`.
679
+ #
680
+ # buf = IO::Buffer.new(8)
681
+ # # =>
682
+ # # #<IO::Buffer 0x0000557412714a20+8 INTERNAL>
683
+ # # 0x00000000 00 00 00 00 00 00 00 00 ........
684
+ #
685
+ # # set buffer starting from offset 1, take 2 bytes starting from string's
686
+ # # second
687
+ # buf.set_string('test', 1, 2, 1)
688
+ # # => 2
689
+ # buf
690
+ # # =>
691
+ # # #<IO::Buffer 0x0000557412714a20+8 INTERNAL>
692
+ # # 0x00000000 00 65 73 00 00 00 00 00 .es.....
693
+ #
694
+ # See also #copy for examples of how buffer writing might be used for changing
695
+ # associated strings and files.
696
+ #
697
+ def set_string: (*untyped) -> untyped
698
+
699
+ # <!--
700
+ # rdoc-file=io_buffer.c
701
+ # - set_value(type, offset, value) -> offset
702
+ # -->
703
+ # Write to a buffer a `value` of `type` at `offset`. `type` should be one of
704
+ # symbols described in #get_value.
705
+ #
706
+ # buffer = IO::Buffer.new(8)
707
+ # # =>
708
+ # # #<IO::Buffer 0x0000555f5c9a2d50+8 INTERNAL>
709
+ # # 0x00000000 00 00 00 00 00 00 00 00
710
+ #
711
+ # buffer.set_value(:U8, 1, 111)
712
+ # # => 1
713
+ #
714
+ # buffer
715
+ # # =>
716
+ # # #<IO::Buffer 0x0000555f5c9a2d50+8 INTERNAL>
717
+ # # 0x00000000 00 6f 00 00 00 00 00 00 .o......
718
+ #
719
+ # Note that if the `type` is integer and `value` is Float, the implicit
720
+ # truncation is performed:
721
+ #
722
+ # buffer = IO::Buffer.new(8)
723
+ # buffer.set_value(:U32, 0, 2.5)
724
+ #
725
+ # buffer
726
+ # # =>
727
+ # # #<IO::Buffer 0x0000555f5c9a2d50+8 INTERNAL>
728
+ # # 0x00000000 00 00 00 02 00 00 00 00
729
+ # # ^^ the same as if we'd pass just integer 2
730
+ #
731
+ def set_value: (int_get_type | float_get_type, Integer offset, Float | Integer value) -> Integer
732
+
733
+ # <!--
734
+ # rdoc-file=io_buffer.c
735
+ # - size -> integer
736
+ # -->
737
+ # Returns the size of the buffer that was explicitly set (on creation with ::new
738
+ # or on #resize), or deduced on buffer's creation from string or file.
739
+ #
740
+ def size: () -> Integer
741
+
742
+ # <!--
743
+ # rdoc-file=io_buffer.c
744
+ # - slice([offset, [length]]) -> io_buffer
745
+ # -->
746
+ # Produce another IO::Buffer which is a slice (or view into) the current one
747
+ # starting at `offset` bytes and going for `length` bytes.
748
+ #
749
+ # The slicing happens without copying of memory, and the slice keeps being
750
+ # associated with the original buffer's source (string, or file), if any.
751
+ #
752
+ # If the offset is not given, it will be zero. If the offset is negative, it
753
+ # will raise an ArgumentError.
754
+ #
755
+ # If the length is not given, the slice will be as long as the original buffer
756
+ # minus the specified offset. If the length is negative, it will raise an
757
+ # ArgumentError.
758
+ #
759
+ # Raises RuntimeError if the <code>offset+length</code> is out of the current
760
+ # buffer's bounds.
761
+ #
762
+ # string = 'test'
763
+ # buffer = IO::Buffer.for(string).dup
764
+ #
765
+ # slice = buffer.slice
766
+ # # =>
767
+ # # #<IO::Buffer 0x0000000108338e68+4 SLICE>
768
+ # # 0x00000000 74 65 73 74 test
769
+ #
770
+ # buffer.slice(2)
771
+ # # =>
772
+ # # #<IO::Buffer 0x0000000108338e6a+2 SLICE>
773
+ # # 0x00000000 73 74 st
774
+ #
775
+ # slice = buffer.slice(1, 2)
776
+ # # =>
777
+ # # #<IO::Buffer 0x00007fc3d34ebc49+2 SLICE>
778
+ # # 0x00000000 65 73 es
779
+ #
780
+ # # Put "o" into 0s position of the slice
781
+ # slice.set_string('o', 0)
782
+ # slice
783
+ # # =>
784
+ # # #<IO::Buffer 0x00007fc3d34ebc49+2 SLICE>
785
+ # # 0x00000000 6f 73 os
786
+ #
787
+ # # it is also visible at position 1 of the original buffer
788
+ # buffer
789
+ # # =>
790
+ # # #<IO::Buffer 0x00007fc3d31e2d80+4 INTERNAL>
791
+ # # 0x00000000 74 6f 73 74 tost
792
+ #
793
+ def slice: (Integer offset, Integer length) -> Buffer
794
+
795
+ # <!--
796
+ # rdoc-file=io_buffer.c
797
+ # - to_s -> string
798
+ # -->
799
+ # Short representation of the buffer. It includes the address, size and symbolic
800
+ # flags. This format is subject to change.
801
+ #
802
+ # puts IO::Buffer.new(4) # uses to_s internally
803
+ # # #<IO::Buffer 0x000055769f41b1a0+4 INTERNAL>
804
+ #
805
+ def to_s: () -> String
806
+
807
+ # <!--
808
+ # rdoc-file=io_buffer.c
809
+ # - transfer -> new_io_buffer
810
+ # -->
811
+ # Transfers ownership of the underlying memory to a new buffer, causing the
812
+ # current buffer to become uninitialized.
813
+ #
814
+ # buffer = IO::Buffer.new('test')
815
+ # other = buffer.transfer
816
+ # other
817
+ # # =>
818
+ # # #<IO::Buffer 0x00007f136a15f7b0+4 SLICE>
819
+ # # 0x00000000 74 65 73 74 test
820
+ # buffer
821
+ # # =>
822
+ # # #<IO::Buffer 0x0000000000000000+0 NULL>
823
+ # buffer.null?
824
+ # # => true
825
+ #
826
+ def transfer: () -> Buffer
827
+
828
+ # <!--
829
+ # rdoc-file=io_buffer.c
830
+ # - valid? -> true or false
831
+ # -->
832
+ # Returns whether the buffer buffer is accessible.
833
+ #
834
+ # A buffer becomes invalid if it is a slice of another buffer (or string) which
835
+ # has been freed or re-allocated at a different address.
836
+ #
837
+ def valid?: () -> bool
838
+
839
+ # <!--
840
+ # rdoc-file=io_buffer.c
841
+ # - write(io, [length, [offset]]) -> written length or -errno
842
+ # -->
843
+ # Write at least `length` bytes from the buffer starting at `offset`, into the
844
+ # `io`. If an error occurs, return <code>-errno</code>.
845
+ #
846
+ # If `length` is not given or `nil`, it defaults to the size of the buffer minus
847
+ # the offset, i.e. the entire buffer.
848
+ #
849
+ # If `length` is zero, exactly one `write` operation will occur.
850
+ #
851
+ # If `offset` is not given, it defaults to zero, i.e. the beginning of the
852
+ # buffer.
853
+ #
854
+ # out = File.open('output.txt', 'wb')
855
+ # IO::Buffer.for('1234567').write(out, 3)
856
+ #
857
+ # This leads to `123` being written into <code>output.txt</code>
858
+ #
859
+ def write: (untyped, untyped) -> untyped
860
+
861
+ private
862
+
863
+ # <!--
864
+ # rdoc-file=io_buffer.c
865
+ # - IO::Buffer.new([size = DEFAULT_SIZE, [flags = 0]]) -> io_buffer
866
+ # -->
867
+ # Create a new zero-filled IO::Buffer of `size` bytes. By default, the buffer
868
+ # will be *internal*: directly allocated chunk of the memory. But if the
869
+ # requested `size` is more than OS-specific IO::Buffer::PAGE_SIZE, the buffer
870
+ # would be allocated using the virtual memory mechanism (anonymous `mmap` on
871
+ # Unix, `VirtualAlloc` on Windows). The behavior can be forced by passing
872
+ # IO::Buffer::MAPPED as a second parameter.
873
+ #
874
+ # buffer = IO::Buffer.new(4)
875
+ # # =>
876
+ # # #<IO::Buffer 0x000055b34497ea10+4 INTERNAL>
877
+ # # 0x00000000 00 00 00 00 ....
878
+ #
879
+ # buffer.get_string(0, 1) # => "\x00"
880
+ #
881
+ # buffer.set_string("test")
882
+ # buffer
883
+ # # =>
884
+ # # #<IO::Buffer 0x000055b34497ea10+4 INTERNAL>
885
+ # # 0x00000000 74 65 73 74 test
886
+ #
887
+ def initialize: (?Integer size, ?Integer flags) -> void
888
+
889
+ # <!-- rdoc-file=io_buffer.c -->
890
+ # Refers to big endian byte order, where the most significant byte is stored
891
+ # first. See #get_value for more details.
892
+ #
893
+ BIG_ENDIAN: Integer
894
+
895
+ # <!-- rdoc-file=io_buffer.c -->
896
+ # The default buffer size, typically a (small) multiple of the PAGE_SIZE. Can be
897
+ # explicitly specified by setting the RUBY_IO_BUFFER_DEFAULT_SIZE environment
898
+ # variable.
899
+ #
900
+ DEFAULT_SIZE: Integer
901
+
902
+ # <!-- rdoc-file=io_buffer.c -->
903
+ # Indicates that the memory in the buffer is owned by someone else. See
904
+ # #external? for more details.
905
+ #
906
+ EXTERNAL: Integer
907
+
908
+ # <!-- rdoc-file=io_buffer.c -->
909
+ # Refers to the byte order of the host machine. See #get_value for more details.
910
+ #
911
+ HOST_ENDIAN: Integer
912
+
913
+ # <!-- rdoc-file=io_buffer.c -->
914
+ # Indicates that the memory in the buffer is owned by the buffer. See #internal?
915
+ # for more details.
916
+ #
917
+ INTERNAL: Integer
918
+
919
+ # <!-- rdoc-file=io_buffer.c -->
920
+ # Refers to little endian byte order, where the least significant byte is stored
921
+ # first. See #get_value for more details.
922
+ #
923
+ LITTLE_ENDIAN: Integer
924
+
925
+ # <!-- rdoc-file=io_buffer.c -->
926
+ # Indicates that the memory in the buffer is locked and cannot be resized or
927
+ # freed. See #locked? and #locked for more details.
928
+ #
929
+ LOCKED: Integer
930
+
931
+ # <!-- rdoc-file=io_buffer.c -->
932
+ # Indicates that the memory in the buffer is mapped by the operating system. See
933
+ # #mapped? for more details.
934
+ #
935
+ MAPPED: Integer
936
+
937
+ # <!-- rdoc-file=io_buffer.c -->
938
+ # Refers to network byte order, which is the same as big endian. See #get_value
939
+ # for more details.
940
+ #
941
+ NETWORK_ENDIAN: Integer
942
+
943
+ # <!-- rdoc-file=io_buffer.c -->
944
+ # The operating system page size. Used for efficient page-aligned memory
945
+ # allocations.
946
+ #
947
+ PAGE_SIZE: Integer
948
+
949
+ # <!-- rdoc-file=io_buffer.c -->
950
+ # Indicates that the memory in the buffer is mapped privately and changes won't
951
+ # be replicated to the underlying file. See #private? for more details.
952
+ #
953
+ PRIVATE: Integer
954
+
955
+ # <!-- rdoc-file=io_buffer.c -->
956
+ # Indicates that the memory in the buffer is read only, and attempts to modify
957
+ # it will fail. See #readonly? for more details.
958
+ #
959
+ READONLY: Integer
960
+
961
+ # <!-- rdoc-file=io_buffer.c -->
962
+ # Raised when an operation would resize or re-allocate a locked buffer.
963
+ #
964
+ class LockedError < RuntimeError
965
+ end
966
+
967
+ # <!-- rdoc-file=io_buffer.c -->
968
+ # Raised when the buffer cannot be allocated for some reason, or you try to use
969
+ # a buffer that's not allocated.
970
+ #
971
+ class AllocationError < RuntimeError
972
+ end
973
+
974
+ # <!-- rdoc-file=io_buffer.c -->
975
+ # Raised when you try to write to a read-only buffer, or resize an external
976
+ # buffer.
977
+ #
978
+ class AccessError < RuntimeError
979
+ end
980
+
981
+ # <!-- rdoc-file=io_buffer.c -->
982
+ # Raised if you try to access a buffer slice which no longer references a valid
983
+ # memory range of the underlying source.
984
+ #
985
+ class InvalidatedError < RuntimeError
986
+ end
987
+
988
+ # <!-- rdoc-file=io_buffer.c -->
989
+ # Raised if the mask given to a binary operation is invalid, e.g. zero length or
990
+ # overlaps the target buffer.
991
+ #
992
+ class MaskError < ArgumentError
993
+ end
994
+ end
995
+ end