rbs 3.0.0.dev.2 → 3.0.0.dev.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/comments.yml +2 -1
- data/.github/workflows/ruby.yml +4 -0
- data/Gemfile.lock +11 -11
- data/Rakefile +2 -2
- data/Steepfile +1 -1
- data/core/array.rbs +573 -423
- data/core/basic_object.rbs +11 -39
- data/core/binding.rbs +1 -1
- data/core/builtin.rbs +8 -0
- data/core/class.rbs +37 -0
- data/core/comparable.rbs +7 -18
- data/core/complex.rbs +2 -2
- data/core/data.rbs +419 -0
- data/core/dir.rbs +52 -104
- data/core/encoding.rbs +22 -181
- data/core/enumerable.rbs +212 -175
- data/core/enumerator/product.rbs +96 -0
- data/core/enumerator.rbs +57 -8
- data/core/errors.rbs +8 -2
- data/core/exception.rbs +41 -0
- data/core/fiber.rbs +95 -12
- data/core/file.rbs +840 -275
- data/core/file_test.rbs +34 -19
- data/core/float.rbs +40 -96
- data/core/gc.rbs +15 -3
- data/core/hash.rbs +113 -175
- data/core/integer.rbs +85 -145
- data/core/io/buffer.rbs +187 -60
- data/core/io/wait.rbs +28 -16
- data/core/io.rbs +1859 -1389
- data/core/kernel.rbs +525 -961
- data/core/match_data.rbs +306 -142
- data/core/math.rbs +506 -234
- data/core/method.rbs +0 -24
- data/core/module.rbs +110 -17
- data/core/nil_class.rbs +2 -0
- data/core/numeric.rbs +76 -144
- data/core/object.rbs +88 -212
- data/core/proc.rbs +17 -5
- data/core/process.rbs +22 -5
- data/core/ractor.rbs +1 -1
- data/core/random.rbs +20 -3
- data/core/range.rbs +91 -89
- data/core/rational.rbs +2 -3
- data/core/rbs/unnamed/argf.rbs +177 -120
- data/core/rbs/unnamed/env_class.rbs +89 -163
- data/core/rbs/unnamed/random.rbs +36 -12
- data/core/refinement.rbs +8 -0
- data/core/regexp.rbs +462 -272
- data/core/ruby_vm.rbs +210 -0
- data/{stdlib/set/0 → core}/set.rbs +43 -47
- data/core/string.rbs +1403 -1332
- data/core/string_io.rbs +191 -107
- data/core/struct.rbs +67 -63
- data/core/symbol.rbs +187 -201
- data/core/thread.rbs +40 -35
- data/core/time.rbs +902 -826
- data/core/trace_point.rbs +55 -6
- data/core/unbound_method.rbs +48 -24
- data/docs/collection.md +4 -0
- data/docs/syntax.md +55 -0
- data/ext/rbs_extension/parser.c +5 -6
- data/lib/rbs/cli.rb +6 -1
- data/lib/rbs/collection/cleaner.rb +8 -1
- data/lib/rbs/collection/config/lockfile.rb +3 -1
- data/lib/rbs/collection/config/lockfile_generator.rb +16 -14
- data/lib/rbs/collection/config.rb +1 -1
- data/lib/rbs/collection/sources/git.rb +9 -2
- data/lib/rbs/collection/sources/local.rb +79 -0
- data/lib/rbs/collection/sources.rb +8 -1
- data/lib/rbs/environment.rb +6 -5
- data/lib/rbs/environment_loader.rb +3 -2
- data/lib/rbs/errors.rb +18 -0
- data/lib/rbs/locator.rb +26 -7
- data/lib/rbs/sorter.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/sig/collection/sources.rbs +32 -3
- data/sig/environment.rbs +2 -3
- data/sig/locator.rbs +14 -2
- data/sig/shims/{abstract_syntax_tree.rbs → _abstract_syntax_tree.rbs} +0 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +16 -13
- data/stdlib/cgi/0/core.rbs +16 -0
- data/stdlib/coverage/0/coverage.rbs +50 -8
- data/stdlib/csv/0/csv.rbs +1 -1
- data/stdlib/date/0/date.rbs +856 -726
- data/stdlib/date/0/date_time.rbs +83 -210
- data/stdlib/erb/0/erb.rbs +13 -36
- data/stdlib/etc/0/etc.rbs +127 -20
- data/stdlib/fileutils/0/fileutils.rbs +1290 -381
- data/stdlib/logger/0/logger.rbs +466 -316
- data/stdlib/net-http/0/net-http.rbs +2211 -534
- data/stdlib/nkf/0/nkf.rbs +5 -5
- data/stdlib/objspace/0/objspace.rbs +31 -14
- data/stdlib/openssl/0/openssl.rbs +11 -7
- data/stdlib/optparse/0/optparse.rbs +20 -17
- data/stdlib/pathname/0/pathname.rbs +21 -4
- data/stdlib/pstore/0/pstore.rbs +378 -154
- data/stdlib/pty/0/pty.rbs +24 -8
- data/stdlib/ripper/0/ripper.rbs +1650 -0
- data/stdlib/socket/0/addrinfo.rbs +9 -15
- data/stdlib/socket/0/socket.rbs +36 -3
- data/stdlib/strscan/0/string_scanner.rbs +7 -5
- data/stdlib/tempfile/0/tempfile.rbs +104 -44
- data/stdlib/time/0/time.rbs +2 -2
- data/stdlib/uri/0/file.rbs +5 -0
- data/stdlib/uri/0/generic.rbs +2 -2
- data/stdlib/yaml/0/yaml.rbs +2 -2
- data/stdlib/zlib/0/zlib.rbs +1 -1
- metadata +8 -6
- data/core/deprecated.rbs +0 -9
- data/sig/shims/ripper.rbs +0 -8
data/core/io/buffer.rbs
CHANGED
@@ -25,11 +25,11 @@ class IO
|
|
25
25
|
# Empty buffer:
|
26
26
|
#
|
27
27
|
# buffer = IO::Buffer.new(8) # create empty 8-byte buffer
|
28
|
-
# #
|
28
|
+
# # =>
|
29
29
|
# # #<IO::Buffer 0x0000555f5d1a5c50+8 INTERNAL>
|
30
30
|
# # ...
|
31
31
|
# buffer
|
32
|
-
# #
|
32
|
+
# # =>
|
33
33
|
# # <IO::Buffer 0x0000555f5d156ab0+8 INTERNAL>
|
34
34
|
# # 0x00000000 00 00 00 00 00 00 00 00
|
35
35
|
# buffer.set_string('test', 2) # put there bytes of the "test" string, starting from offset 2
|
@@ -40,12 +40,12 @@ class IO
|
|
40
40
|
# Buffer from string:
|
41
41
|
#
|
42
42
|
# string = 'data'
|
43
|
-
# buffer = IO::Buffer.for(
|
44
|
-
# #
|
43
|
+
# buffer = IO::Buffer.for(string)
|
44
|
+
# # =>
|
45
45
|
# # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
|
46
46
|
# # ...
|
47
47
|
# buffer
|
48
|
-
# #
|
48
|
+
# # =>
|
49
49
|
# # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
|
50
50
|
# # 0x00000000 64 61 74 61 data
|
51
51
|
#
|
@@ -54,7 +54,7 @@ class IO
|
|
54
54
|
# buffer.set_string('---', 1) # write content, starting from offset 1
|
55
55
|
# # => 3
|
56
56
|
# buffer
|
57
|
-
# #
|
57
|
+
# # =>
|
58
58
|
# # #<IO::Buffer 0x00007f3f02be9b18+4 SLICE>
|
59
59
|
# # 0x00000000 64 2d 2d 2d d---
|
60
60
|
# string # original string changed, too
|
@@ -65,7 +65,7 @@ class IO
|
|
65
65
|
# File.write('test.txt', 'test data')
|
66
66
|
# # => 9
|
67
67
|
# buffer = IO::Buffer.map(File.open('test.txt'))
|
68
|
-
# #
|
68
|
+
# # =>
|
69
69
|
# # #<IO::Buffer 0x00007f3f0768c000+9 MAPPED IMMUTABLE>
|
70
70
|
# # ...
|
71
71
|
# buffer.get_string(5, 2) # read 2 bytes, starting from offset 5
|
@@ -135,6 +135,8 @@ class IO
|
|
135
135
|
# mapping, you need to open a file in read-write mode, and explicitly pass
|
136
136
|
# `flags` argument without IO::Buffer::IMMUTABLE.
|
137
137
|
#
|
138
|
+
# Example:
|
139
|
+
#
|
138
140
|
# File.write('test.txt', 'test')
|
139
141
|
#
|
140
142
|
# buffer = IO::Buffer.map(File.open('test.txt'), nil, 0, IO::Buffer::READONLY)
|
@@ -214,7 +216,7 @@ class IO
|
|
214
216
|
# using `memcpy`. For copying String instances, see #set_string.
|
215
217
|
#
|
216
218
|
# buffer = IO::Buffer.new(32)
|
217
|
-
# #
|
219
|
+
# # =>
|
218
220
|
# # #<IO::Buffer 0x0000555f5ca22520+32 INTERNAL>
|
219
221
|
# # 0x00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
220
222
|
# # 0x00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ *
|
@@ -222,7 +224,7 @@ class IO
|
|
222
224
|
# buffer.copy(IO::Buffer.for("test"), 8)
|
223
225
|
# # => 4 -- size of data copied
|
224
226
|
# buffer
|
225
|
-
# #
|
227
|
+
# # =>
|
226
228
|
# # #<IO::Buffer 0x0000555f5cf8fe40+32 INTERNAL>
|
227
229
|
# # 0x00000000 00 00 00 00 00 00 00 00 74 65 73 74 00 00 00 00 ........test....
|
228
230
|
# # 0x00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ *
|
@@ -231,7 +233,7 @@ class IO
|
|
231
233
|
#
|
232
234
|
# string= "data: "
|
233
235
|
# # => "data: "
|
234
|
-
# buffer = IO::Buffer.for(
|
236
|
+
# buffer = IO::Buffer.for(string)
|
235
237
|
# buffer.copy(IO::Buffer.for("test"), 5)
|
236
238
|
# # => 4
|
237
239
|
# string
|
@@ -247,7 +249,7 @@ class IO
|
|
247
249
|
# See ::map for details of creation of mutable file mappings, this will work:
|
248
250
|
#
|
249
251
|
# buffer = IO::Buffer.map(File.open('test.txt', 'r+'))
|
250
|
-
# buffer.copy("boom", 0)
|
252
|
+
# buffer.copy(IO::Buffer.for("boom"), 0)
|
251
253
|
# # => 4
|
252
254
|
# File.read('test.txt')
|
253
255
|
# # => "boom"
|
@@ -256,29 +258,31 @@ class IO
|
|
256
258
|
# fail:
|
257
259
|
#
|
258
260
|
# buffer = IO::Buffer.new(2)
|
259
|
-
# buffer.copy('test', 0)
|
261
|
+
# buffer.copy(IO::Buffer.for('test'), 0)
|
260
262
|
# # in `copy': Specified offset+length exceeds source size! (ArgumentError)
|
261
263
|
#
|
262
264
|
def copy: (Buffer source, ?Integer offset, ?Integer length, ?Integer source_offset) -> Integer
|
263
265
|
|
264
266
|
# <!--
|
265
267
|
# rdoc-file=io_buffer.c
|
266
|
-
# -
|
268
|
+
# - empty? -> true or false
|
267
269
|
# -->
|
268
|
-
# If the buffer
|
269
|
-
#
|
270
|
-
#
|
271
|
-
# A buffer created using ::for has an external reference to the string's
|
272
|
-
# memory.
|
273
|
-
#
|
274
|
-
# External buffer can't be resized.
|
270
|
+
# If the buffer has 0 size: it is created by ::new with size 0, or with ::for
|
271
|
+
# from an empty string. (Note that empty files can't be mapped, so the buffer
|
272
|
+
# created with ::map will never be empty.)
|
275
273
|
#
|
276
274
|
def empty?: () -> bool
|
277
275
|
|
278
276
|
# <!--
|
279
277
|
# rdoc-file=io_buffer.c
|
280
|
-
# - external?
|
278
|
+
# - external? -> true or false
|
281
279
|
# -->
|
280
|
+
# The buffer is *external* if it references the memory which is not allocated or
|
281
|
+
# mapped by the buffer itself.
|
282
|
+
#
|
283
|
+
# A buffer created using ::for has an external reference to the string's memory.
|
284
|
+
#
|
285
|
+
# External buffer can't be resized.
|
282
286
|
#
|
283
287
|
def external?: () -> bool
|
284
288
|
|
@@ -294,6 +298,10 @@ class IO
|
|
294
298
|
#
|
295
299
|
# After the buffer is freed, no further operations can't be performed on it.
|
296
300
|
#
|
301
|
+
# You can resize a freed buffer to re-allocate it.
|
302
|
+
#
|
303
|
+
# Example:
|
304
|
+
#
|
297
305
|
# buffer = IO::Buffer.for('test')
|
298
306
|
# buffer.free
|
299
307
|
# # => #<IO::Buffer 0x0000000000000000+0 NULL>
|
@@ -307,8 +315,6 @@ class IO
|
|
307
315
|
# buffer.null?
|
308
316
|
# # => true
|
309
317
|
#
|
310
|
-
# You can resize a freed buffer to re-allocate it.
|
311
|
-
#
|
312
318
|
def free: () -> self
|
313
319
|
|
314
320
|
# <!--
|
@@ -330,9 +336,9 @@ class IO
|
|
330
336
|
|
331
337
|
# <!--
|
332
338
|
# rdoc-file=io_buffer.c
|
333
|
-
# - get_value(
|
339
|
+
# - get_value(data_type, offset) -> numeric
|
334
340
|
# -->
|
335
|
-
# Read from buffer a value of `type` at `offset`. `
|
341
|
+
# Read from buffer a value of `type` at `offset`. `data_type` should be one of
|
336
342
|
# symbols:
|
337
343
|
#
|
338
344
|
# * `:U8`: unsigned integer, 1 byte
|
@@ -355,6 +361,10 @@ class IO
|
|
355
361
|
# * `:F64`: double, 8 bytes, big-endian
|
356
362
|
#
|
357
363
|
#
|
364
|
+
# A data type refers specifically to the type of binary data that is stored in
|
365
|
+
# the buffer. For example, a `:u32` data type is a 32-bit unsigned integer in
|
366
|
+
# little-endian format.
|
367
|
+
#
|
358
368
|
# Example:
|
359
369
|
#
|
360
370
|
# string = [1.5].pack('f')
|
@@ -413,6 +423,14 @@ class IO
|
|
413
423
|
# block is performed, the buffer is considered locked, and no other code can
|
414
424
|
# enter the lock. Also, locked buffer can't be changed with #resize or #free.
|
415
425
|
#
|
426
|
+
# The following operations acquire a lock: #resize, #free.
|
427
|
+
#
|
428
|
+
# Locking is not thread safe. It is designed as a safety net around non-blocking
|
429
|
+
# system calls. You can only share a buffer between threads with appropriate
|
430
|
+
# synchronisation techniques.
|
431
|
+
#
|
432
|
+
# Example:
|
433
|
+
#
|
416
434
|
# buffer = IO::Buffer.new(4)
|
417
435
|
# buffer.locked? #=> false
|
418
436
|
#
|
@@ -425,16 +443,10 @@ class IO
|
|
425
443
|
# Fiber.schedule do
|
426
444
|
# # in `locked': Buffer already locked! (IO::Buffer::LockedError)
|
427
445
|
# buffer.locked do
|
428
|
-
# buffer.set_string(
|
446
|
+
# buffer.set_string("test", 0)
|
429
447
|
# end
|
430
448
|
# end
|
431
449
|
#
|
432
|
-
# The following operations acquire a lock: #resize, #free.
|
433
|
-
#
|
434
|
-
# Locking is not thread safe. It is designed as a safety net around non-blocking
|
435
|
-
# system calls. You can only share a buffer between threads with appropriate
|
436
|
-
# synchronisation techniques.
|
437
|
-
#
|
438
450
|
def locked: [A] () { (IO::Buffer) -> A } -> A
|
439
451
|
|
440
452
|
# <!--
|
@@ -448,6 +460,8 @@ class IO
|
|
448
460
|
# Locking is not thread safe, but is a semantic used to ensure buffers don't
|
449
461
|
# move while being used by a system call.
|
450
462
|
#
|
463
|
+
# Example:
|
464
|
+
#
|
451
465
|
# buffer.locked do
|
452
466
|
# buffer.write(io) # theoretical system call interface
|
453
467
|
# end
|
@@ -479,29 +493,89 @@ class IO
|
|
479
493
|
|
480
494
|
# <!--
|
481
495
|
# rdoc-file=io_buffer.c
|
482
|
-
# - pread(
|
496
|
+
# - pread(io, from, length, [offset]) -> read length or -errno
|
483
497
|
# -->
|
498
|
+
# Read at most `length` bytes from `io` into the buffer, starting at `from`, and
|
499
|
+
# put it in buffer starting from specified `offset`. If an error occurs, return
|
500
|
+
# `-errno`.
|
501
|
+
#
|
502
|
+
# If `offset` is not given, put it at the beginning of the buffer.
|
503
|
+
#
|
504
|
+
# Example:
|
505
|
+
#
|
506
|
+
# IO::Buffer.for('test') do |buffer|
|
507
|
+
# p buffer
|
508
|
+
# # =>
|
509
|
+
# # <IO::Buffer 0x00007fca40087c38+4 SLICE>
|
510
|
+
# # 0x00000000 74 65 73 74 test
|
511
|
+
#
|
512
|
+
# # take 2 bytes from the beginning of urandom,
|
513
|
+
# # put them in buffer starting from position 2
|
514
|
+
# buffer.pread(File.open('/dev/urandom', 'rb'), 0, 2, 2)
|
515
|
+
# p buffer
|
516
|
+
# # =>
|
517
|
+
# # <IO::Buffer 0x00007f3bc65f2a58+4 EXTERNAL SLICE>
|
518
|
+
# # 0x00000000 05 35 73 74 te.5
|
519
|
+
# end
|
484
520
|
#
|
485
521
|
def pread: (untyped, untyped, untyped) -> untyped
|
486
522
|
|
487
523
|
# <!--
|
488
524
|
# rdoc-file=io_buffer.c
|
489
|
-
# - pwrite(
|
525
|
+
# - pwrite(io, from, length, [offset]) -> written length or -errno
|
490
526
|
# -->
|
527
|
+
# Writes `length` bytes from buffer into `io`, starting at `offset` in the
|
528
|
+
# buffer. If an error occurs, return `-errno`.
|
529
|
+
#
|
530
|
+
# If `offset` is not given, the bytes are taken from the beginning of the
|
531
|
+
# buffer. If the `offset` is given and is beyond the end of the file, the gap
|
532
|
+
# will be filled with null (0 value) bytes.
|
533
|
+
#
|
534
|
+
# out = File.open('output.txt', File::RDWR) # open for read/write, no truncation
|
535
|
+
# IO::Buffer.for('1234567').pwrite(out, 2, 3, 1)
|
536
|
+
#
|
537
|
+
# This leads to `234` (3 bytes, starting from position 1) being written into
|
538
|
+
# `output.txt`, starting from file position 2.
|
491
539
|
#
|
492
540
|
def pwrite: (untyped, untyped, untyped) -> untyped
|
493
541
|
|
494
542
|
# <!--
|
495
543
|
# rdoc-file=io_buffer.c
|
496
|
-
# - read(
|
544
|
+
# - read(io, [length, [offset]]) -> read length or -errno
|
497
545
|
# -->
|
546
|
+
# Read at most `length` bytes from `io` into the buffer, starting at `offset`.
|
547
|
+
# If an error occurs, return `-errno`.
|
548
|
+
#
|
549
|
+
# If `length` is not given, read until the end of the buffer.
|
550
|
+
#
|
551
|
+
# If `offset` is not given, read from the beginning of the buffer.
|
552
|
+
#
|
553
|
+
# If `length` is 0, read nothing.
|
554
|
+
#
|
555
|
+
# Example:
|
556
|
+
#
|
557
|
+
# IO::Buffer.for('test') do |buffer|
|
558
|
+
# p buffer
|
559
|
+
# # =>
|
560
|
+
# # <IO::Buffer 0x00007fca40087c38+4 SLICE>
|
561
|
+
# # 0x00000000 74 65 73 74 test
|
562
|
+
# buffer.read(File.open('/dev/urandom', 'rb'), 2)
|
563
|
+
# p buffer
|
564
|
+
# # =>
|
565
|
+
# # <IO::Buffer 0x00007f3bc65f2a58+4 EXTERNAL SLICE>
|
566
|
+
# # 0x00000000 05 35 73 74 .5st
|
567
|
+
# end
|
498
568
|
#
|
499
569
|
def read: (untyped, untyped) -> untyped
|
500
570
|
|
501
571
|
# <!--
|
502
572
|
# rdoc-file=io_buffer.c
|
503
|
-
# - readonly?
|
573
|
+
# - readonly? -> true or false
|
504
574
|
# -->
|
575
|
+
# If the buffer is *read only*, meaning the buffer cannot be modified using
|
576
|
+
# #set_value, #set_string or #copy and similar.
|
577
|
+
#
|
578
|
+
# Frozen strings and read-only files create read-only buffers.
|
505
579
|
#
|
506
580
|
def readonly?: () -> bool
|
507
581
|
|
@@ -516,7 +590,7 @@ class IO
|
|
516
590
|
# buffer = IO::Buffer.new(4)
|
517
591
|
# buffer.set_string("test", 0)
|
518
592
|
# buffer.resize(8) # resize to 8 bytes
|
519
|
-
# #
|
593
|
+
# # =>
|
520
594
|
# # #<IO::Buffer 0x0000555f5d1a1630+8 INTERNAL>
|
521
595
|
# # 0x00000000 74 65 73 74 00 00 00 00 test....
|
522
596
|
#
|
@@ -526,8 +600,27 @@ class IO
|
|
526
600
|
|
527
601
|
# <!--
|
528
602
|
# rdoc-file=io_buffer.c
|
529
|
-
# - set_string(
|
603
|
+
# - set_string(string, [offset, [length, [source_offset]]]) -> size
|
530
604
|
# -->
|
605
|
+
# Efficiently copy data from a source String into the buffer, at `offset` using
|
606
|
+
# `memcpy`.
|
607
|
+
#
|
608
|
+
# buf = IO::Buffer.new(8)
|
609
|
+
# # =>
|
610
|
+
# # #<IO::Buffer 0x0000557412714a20+8 INTERNAL>
|
611
|
+
# # 0x00000000 00 00 00 00 00 00 00 00 ........
|
612
|
+
#
|
613
|
+
# # set data starting from offset 1, take 2 bytes starting from string's
|
614
|
+
# # second
|
615
|
+
# buf.set_string('test', 1, 2, 1)
|
616
|
+
# # => 2
|
617
|
+
# buf
|
618
|
+
# # =>
|
619
|
+
# # #<IO::Buffer 0x0000557412714a20+8 INTERNAL>
|
620
|
+
# # 0x00000000 00 65 73 00 00 00 00 00 .es.....
|
621
|
+
#
|
622
|
+
# See also #copy for examples of how buffer writing might be used for changing
|
623
|
+
# associated strings and files.
|
531
624
|
#
|
532
625
|
def set_string: (*untyped) -> untyped
|
533
626
|
|
@@ -539,13 +632,15 @@ class IO
|
|
539
632
|
# symbols described in #get_value.
|
540
633
|
#
|
541
634
|
# buffer = IO::Buffer.new(8)
|
542
|
-
# #
|
635
|
+
# # =>
|
543
636
|
# # #<IO::Buffer 0x0000555f5c9a2d50+8 INTERNAL>
|
544
637
|
# # 0x00000000 00 00 00 00 00 00 00 00
|
638
|
+
#
|
545
639
|
# buffer.set_value(:U8, 1, 111)
|
546
640
|
# # => 1
|
641
|
+
#
|
547
642
|
# buffer
|
548
|
-
# #
|
643
|
+
# # =>
|
549
644
|
# # #<IO::Buffer 0x0000555f5c9a2d50+8 INTERNAL>
|
550
645
|
# # 0x00000000 00 6f 00 00 00 00 00 00 .o......
|
551
646
|
#
|
@@ -554,11 +649,12 @@ class IO
|
|
554
649
|
#
|
555
650
|
# buffer = IO::Buffer.new(8)
|
556
651
|
# buffer.set_value(:U32, 0, 2.5)
|
652
|
+
#
|
557
653
|
# buffer
|
558
|
-
# #
|
559
|
-
# #
|
560
|
-
# #
|
561
|
-
# #
|
654
|
+
# # =>
|
655
|
+
# # #<IO::Buffer 0x0000555f5c9a2d50+8 INTERNAL>
|
656
|
+
# # 0x00000000 00 00 00 02 00 00 00 00
|
657
|
+
# # ^^ the same as if we'd pass just integer 2
|
562
658
|
#
|
563
659
|
def set_value: (int_get_type | float_get_type, Integer offset, Float | Integer value) -> Integer
|
564
660
|
|
@@ -573,7 +669,7 @@ class IO
|
|
573
669
|
|
574
670
|
# <!--
|
575
671
|
# rdoc-file=io_buffer.c
|
576
|
-
# - slice(offset, length) -> io_buffer
|
672
|
+
# - slice([offset = 0, [length]]) -> io_buffer
|
577
673
|
# -->
|
578
674
|
# Produce another IO::Buffer which is a slice (or view into) the current one
|
579
675
|
# starting at `offset` bytes and going for `length` bytes.
|
@@ -581,29 +677,48 @@ class IO
|
|
581
677
|
# The slicing happens without copying of memory, and the slice keeps being
|
582
678
|
# associated with the original buffer's source (string, or file), if any.
|
583
679
|
#
|
584
|
-
#
|
585
|
-
#
|
680
|
+
# If the offset is not given, it will be zero. If the offset is negative, it
|
681
|
+
# will raise an ArgumentError.
|
682
|
+
#
|
683
|
+
# If the length is not given, the slice will be as long as the original buffer
|
684
|
+
# minus the specified offset. If the length is negative, it will raise an
|
685
|
+
# ArgumentError.
|
686
|
+
#
|
687
|
+
# Raises RuntimeError if the `offset+length` is out of the current buffer's
|
688
|
+
# bounds.
|
689
|
+
#
|
690
|
+
# Example:
|
586
691
|
#
|
587
692
|
# string = 'test'
|
588
693
|
# buffer = IO::Buffer.for(string)
|
589
694
|
#
|
695
|
+
# slice = buffer.slice
|
696
|
+
# # =>
|
697
|
+
# # #<IO::Buffer 0x0000000108338e68+4 SLICE>
|
698
|
+
# # 0x00000000 74 65 73 74 test
|
699
|
+
#
|
700
|
+
# buffer.slice(2)
|
701
|
+
# # =>
|
702
|
+
# # #<IO::Buffer 0x0000000108338e6a+2 SLICE>
|
703
|
+
# # 0x00000000 73 74 st
|
704
|
+
#
|
590
705
|
# slice = buffer.slice(1, 2)
|
591
706
|
# # =>
|
592
|
-
# #
|
593
|
-
# #
|
707
|
+
# # #<IO::Buffer 0x00007fc3d34ebc49+2 SLICE>
|
708
|
+
# # 0x00000000 65 73 es
|
594
709
|
#
|
595
710
|
# # Put "o" into 0s position of the slice
|
596
711
|
# slice.set_string('o', 0)
|
597
712
|
# slice
|
598
713
|
# # =>
|
599
|
-
# #
|
600
|
-
# #
|
714
|
+
# # #<IO::Buffer 0x00007fc3d34ebc49+2 SLICE>
|
715
|
+
# # 0x00000000 6f 73 os
|
601
716
|
#
|
602
717
|
# # it is also visible at position 1 of the original buffer
|
603
718
|
# buffer
|
604
719
|
# # =>
|
605
|
-
# #
|
606
|
-
# #
|
720
|
+
# # #<IO::Buffer 0x00007fc3d31e2d80+4 SLICE>
|
721
|
+
# # 0x00000000 74 6f 73 74 tost
|
607
722
|
#
|
608
723
|
# # ...and original string
|
609
724
|
# string
|
@@ -629,14 +744,16 @@ class IO
|
|
629
744
|
# -->
|
630
745
|
# Transfers ownership to a new buffer, deallocating the current one.
|
631
746
|
#
|
747
|
+
# Example:
|
748
|
+
#
|
632
749
|
# buffer = IO::Buffer.new('test')
|
633
750
|
# other = buffer.transfer
|
634
751
|
# other
|
635
|
-
# #
|
752
|
+
# # =>
|
636
753
|
# # #<IO::Buffer 0x00007f136a15f7b0+4 SLICE>
|
637
754
|
# # 0x00000000 74 65 73 74 test
|
638
755
|
# buffer
|
639
|
-
# #
|
756
|
+
# # =>
|
640
757
|
# # #<IO::Buffer 0x0000000000000000+0 NULL>
|
641
758
|
# buffer.null?
|
642
759
|
# # => true
|
@@ -656,8 +773,18 @@ class IO
|
|
656
773
|
|
657
774
|
# <!--
|
658
775
|
# rdoc-file=io_buffer.c
|
659
|
-
# - write(
|
776
|
+
# - write(io, length, [offset]) -> written length or -errno
|
660
777
|
# -->
|
778
|
+
# Writes `length` bytes from buffer into `io`, starting at `offset` in the
|
779
|
+
# buffer. If an error occurs, return `-errno`.
|
780
|
+
#
|
781
|
+
# If `offset` is not given, the bytes are taken from the beginning of the
|
782
|
+
# buffer.
|
783
|
+
#
|
784
|
+
# out = File.open('output.txt', 'wb')
|
785
|
+
# IO::Buffer.for('1234567').write(out, 3)
|
786
|
+
#
|
787
|
+
# This leads to `123` being written into `output.txt`
|
661
788
|
#
|
662
789
|
def write: (untyped, untyped) -> untyped
|
663
790
|
|
@@ -669,7 +796,7 @@ class IO
|
|
669
796
|
# -->
|
670
797
|
# Create a new zero-filled IO::Buffer of `size` bytes. By default, the buffer
|
671
798
|
# will be *internal*: directly allocated chunk of the memory. But if the
|
672
|
-
# requested `size` is more than OS-specific IO::
|
799
|
+
# requested `size` is more than OS-specific IO::Buffer::PAGE_SIZE, the buffer
|
673
800
|
# would be allocated using the virtual memory mechanism (anonymous `mmap` on
|
674
801
|
# Unix, `VirtualAlloc` on Windows). The behavior can be forced by passing
|
675
802
|
# IO::Buffer::MAPPED as a second parameter.
|
@@ -678,14 +805,14 @@ class IO
|
|
678
805
|
#
|
679
806
|
# buffer = IO::Buffer.new(4)
|
680
807
|
# # =>
|
681
|
-
# #
|
682
|
-
# #
|
808
|
+
# # #<IO::Buffer 0x000055b34497ea10+4 INTERNAL>
|
809
|
+
# # 0x00000000 00 00 00 00 ....
|
683
810
|
#
|
684
811
|
# buffer.get_string(0, 1) # => "\x00"
|
685
812
|
#
|
686
813
|
# buffer.set_string("test")
|
687
814
|
# buffer
|
688
|
-
# #
|
815
|
+
# # =>
|
689
816
|
# # #<IO::Buffer 0x000055b34497ea10+4 INTERNAL>
|
690
817
|
# # 0x00000000 74 65 73 74 test
|
691
818
|
#
|
data/core/io/wait.rbs
CHANGED
@@ -7,52 +7,64 @@ class IO
|
|
7
7
|
# Returns number of bytes that can be read without blocking. Returns zero if no
|
8
8
|
# information available.
|
9
9
|
#
|
10
|
+
# You must require 'io/wait' to use this method.
|
11
|
+
#
|
10
12
|
def nread: () -> Integer
|
11
13
|
|
12
14
|
# <!--
|
13
15
|
# rdoc-file=ext/io/wait/wait.c
|
14
|
-
# - io.ready? ->
|
16
|
+
# - io.ready? -> truthy or falsy
|
15
17
|
# -->
|
16
|
-
# Returns
|
18
|
+
# Returns a truthy value if input available without blocking, or a falsy value.
|
19
|
+
#
|
20
|
+
# You must require 'io/wait' to use this method.
|
17
21
|
#
|
18
22
|
def ready?: () -> boolish
|
19
23
|
|
20
24
|
# <!--
|
21
25
|
# rdoc-file=ext/io/wait/wait.c
|
22
|
-
# - io.wait(events, timeout) -> event mask or
|
23
|
-
# - io.wait(timeout = nil, mode = :read) ->
|
26
|
+
# - io.wait(events, timeout) -> event mask, false or nil
|
27
|
+
# - io.wait(timeout = nil, mode = :read) -> self, true, or false
|
24
28
|
# -->
|
25
29
|
# Waits until the IO becomes ready for the specified events and returns the
|
26
|
-
# subset of events that become ready, or
|
30
|
+
# subset of events that become ready, or a falsy value when times out.
|
27
31
|
#
|
28
32
|
# The events can be a bit mask of `IO::READABLE`, `IO::WRITABLE` or
|
29
33
|
# `IO::PRIORITY`.
|
30
34
|
#
|
31
|
-
# Returns
|
35
|
+
# Returns a truthy value immediately when buffered data is available.
|
32
36
|
#
|
33
37
|
# Optional parameter `mode` is one of `:read`, `:write`, or `:read_write`.
|
34
38
|
#
|
35
|
-
|
36
|
-
|
39
|
+
# You must require 'io/wait' to use this method.
|
40
|
+
#
|
41
|
+
def wait: (Integer events, ?Numeric timeout) -> (Integer | false | nil)
|
42
|
+
| (?Numeric? timeout, *wait_mode mode) -> (self | true | false)
|
37
43
|
|
38
44
|
type wait_mode = :read | :r | :readable | :write | :w | :writable | :read_write | :rw | :readable_writable
|
39
45
|
|
40
46
|
# <!--
|
41
47
|
# rdoc-file=ext/io/wait/wait.c
|
42
|
-
# - io.wait_readable ->
|
43
|
-
# - io.wait_readable(timeout) ->
|
48
|
+
# - io.wait_readable -> truthy or falsy
|
49
|
+
# - io.wait_readable(timeout) -> truthy or falsy
|
44
50
|
# -->
|
45
|
-
# Waits until IO is readable and returns
|
46
|
-
# Returns
|
51
|
+
# Waits until IO is readable and returns a truthy value, or a falsy value when
|
52
|
+
# times out. Returns a truthy value immediately when buffered data is
|
53
|
+
# available.
|
47
54
|
#
|
48
|
-
|
55
|
+
# You must require 'io/wait' to use this method.
|
56
|
+
#
|
57
|
+
def wait_readable: (?Numeric? timeout) -> boolish
|
49
58
|
|
50
59
|
# <!--
|
51
60
|
# rdoc-file=ext/io/wait/wait.c
|
52
|
-
# - io.wait_writable ->
|
53
|
-
# - io.wait_writable(timeout) ->
|
61
|
+
# - io.wait_writable -> truthy or falsy
|
62
|
+
# - io.wait_writable(timeout) -> truthy or falsy
|
54
63
|
# -->
|
55
|
-
# Waits until IO is writable and returns
|
64
|
+
# Waits until IO is writable and returns a truthy value or a falsy value when
|
65
|
+
# times out.
|
66
|
+
#
|
67
|
+
# You must require 'io/wait' to use this method.
|
56
68
|
#
|
57
69
|
def wait_writable: (?Numeric? timeout) -> boolish
|
58
70
|
end
|