Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
class method
IO::Buffer::Slice.new
IO::Buffer::Slice.new(source, [offset, [length]]) → slice
io_buffer.c
View on GitHub ↗
static VALUE
io_buffer_slice_initialize(int argc, VALUE *argv, VALUE self)
{
rb_check_frozen(self);
rb_check_arity(argc, 1, 3);
struct rb_io_buffer_view *slice = get_io_buffer_view(self);
if (!NIL_P(slice->source)) rb_raise(rb_eRuntimeError, "Slice is already initialized!");
VALUE source = argv[0];
size_t offset, length;
struct rb_io_buffer_view *parent = io_buffer_extract_offset_length(source, argc-1, argv+1, &offset, &length);
io_buffer_validate_range(parent, offset, length);
slice = get_io_buffer_view(self);
if (!NIL_P(slice->source)) rb_raise(rb_eRuntimeError, "Slice is already initialized!");
slice->base = (void *)(uintptr_t)offset;
slice->size = length;
RB_OBJ_WRITE(self, &slice->source, source);
return self;
}