Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
instance method
IO::Buffer#&
source & mask → io_buffer
io_buffer.c
View on GitHub ↗
static VALUE
io_buffer_and(VALUE self, VALUE mask)
{
struct rb_io_buffer_view *buffer = get_io_buffer_view(self);
struct rb_io_buffer_view *mask_buffer = get_io_buffer_view(mask);
const void *base;
size_t size;
io_buffer_get_bytes_for_reading(buffer, &base, &size);
const void *mask_base;
size_t mask_size;
io_buffer_get_bytes_for_reading(mask_buffer, &mask_base, &mask_size);
io_buffer_check_mask_size(mask_size);
VALUE output = rb_io_buffer_new(NULL, size, io_flags_for_size(size));
struct rb_io_buffer_view *output_buffer = get_io_buffer_view(output);
memory_and(output_buffer->base, base, size, mask_base, mask_size);
return output;
}
Generate a new buffer the same size as the source by applying the binary AND operation to the source, using the mask, repeating as necessary.
Example
IO::Buffer.for("1234567890") & IO::Buffer.for("\xFF\x00\x00\xFF") # => # #<IO::Buffer 0x00005589b2758480+10 INTERNAL> # 0x00000000 31 00 00 34 35 00 00 38 39 00 1..45..89.