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