class Buffer
Constants
- VERSION
Attributes
data[R]
Public Class Methods
from(p1)
click to toggle source
VALUE method_buffer_from(VALUE klass, VALUE val) { if (TYPE(val) == T_STRING) { char* ptr = StringValueCStr(val); VALUE obj = rb_funcall(kBuffer, rb_intern("new"), 1, SIZET2NUM(strlen(ptr) + 1)); VALUE data = rb_iv_get(obj, "@data"); char* buf_ptr = internal_buffer_data_get(data)->buffer; memcpy(buf_ptr, ptr, strlen(ptr) + 1); return obj; } if (TYPE(val) == T_ARRAY) { long len = RARRAY_LEN(val); VALUE obj = rb_funcall(kBuffer, rb_intern("new"), 1, LONG2NUM(len)); VALUE data = rb_iv_get(obj, "@data"); char* buf_ptr = internal_buffer_data_get(data)->buffer; for (long i = 0; i < len; i++) { VALUE num = rb_ary_entry(val, i); buf_ptr[i] = NUM2CHR(num); } return obj; } return Qnil; }
new(p1)
click to toggle source
VALUE method_buffer_init(VALUE self, VALUE size) { VALUE data = internal_buffer_data_malloc(NUM2SIZET(size)); rb_iv_set(self, "@data", data); return self; }
Public Instance Methods
bytes()
click to toggle source
VALUE method_buffer_bytes(VALUE self) { VALUE data = rb_iv_get(self, "@data"); struct buffer_data* buffer = internal_buffer_data_get(data); VALUE result = rb_ary_new2(buffer->buffer_size); for (size_t i = 0; i < buffer->buffer_size; i++) { rb_ary_store(result, i, CHR2FIX(buffer->buffer[i])); // # TODO: Why there is no CHR2NUM? } return result; }
clear()
click to toggle source
VALUE method_buffer_clear(VALUE self) { VALUE payload = rb_iv_get(self, "@data"); struct buffer_data* data = internal_buffer_data_get(payload); memset(data->buffer, 0, data->buffer_size); return self; }
resize(p1)
click to toggle source
VALUE method_buffer_resize(VALUE self, VALUE size) { VALUE data = rb_iv_get(self, "@data"); internal_buffer_data_realloc(data, NUM2SIZET(size)); return self; }
size()
click to toggle source
VALUE method_buffer_buffer_size(VALUE self) { VALUE data = rb_iv_get(self, "@data"); return SIZET2NUM(internal_buffer_data_get(data)->buffer_size); }
to_s()
click to toggle source
VALUE method_buffer_to_s(VALUE self) { // FIXME: What if a buffer doesn't have a NUL terminator? VALUE data = rb_iv_get(self, "@data"); return rb_str_buf_new2(internal_buffer_data_get(data)->buffer); }