Module: MemoryViewTestUtils
| Relationships & Source Files | |
| Namespace Children | |
|
Classes:
| |
| Defined in: | ext/-test-/memory_view/memory_view.c |
Class Method Summary
- .available?(obj) ⇒ Boolean mod_func
- .extract_item_members(str, format) mod_func
- .fill_contiguous_strides(ndim_v, item_size_v, shape_v, row_major_p) mod_func
- .get_memory_view_info(obj) mod_func
- .item_size_from_format(format) mod_func
- .parse_item_format(format) mod_func
- .ref_count_while_exporting(obj, n) mod_func
- .register(obj) mod_func
Class Method Details
.available?(obj) ⇒ Boolean (mod_func)
# File 'ext/-test-/memory_view/memory_view.c', line 50
static VALUE
memory_view_available_p(VALUE mod, VALUE obj)
{
return rb_memory_view_available_p(obj) ? Qtrue : Qfalse;
}
.extract_item_members(str, format) (mod_func)
[ GitHub ]# File 'ext/-test-/memory_view/memory_view.c', line 232
static VALUE
memory_view_extract_item_members(VALUE mod, VALUE str, VALUE format)
{
StringValue(str);
StringValue(format);
rb_memory_view_item_component_t *members;
size_t n_members;
const char *err = NULL;
(void)rb_memory_view_parse_item_format(RSTRING_PTR(format), &members, &n_members, &err);
if (err != NULL) {
rb_raise(rb_eArgError, "Unable to parse item format");
}
VALUE item = rb_memory_view_extract_item_members(RSTRING_PTR(str), members, n_members);
xfree(members);
return item;
}
.fill_contiguous_strides(ndim_v, item_size_v, shape_v, row_major_p) (mod_func)
[ GitHub ]# File 'ext/-test-/memory_view/memory_view.c', line 162
static VALUE
memory_view_fill_contiguous_strides(VALUE mod, VALUE ndim_v, VALUE item_size_v, VALUE shape_v, VALUE row_major_p)
{
ssize_t i, ndim = NUM2SSIZET(ndim_v);
Check_Type(shape_v, T_ARRAY);
ssize_t *shape = ALLOC_N(ssize_t, ndim);
for (i = 0; i < ndim; ++i) {
shape[i] = NUM2SSIZET(RARRAY_AREF(shape_v, i));
}
ssize_t *strides = ALLOC_N(ssize_t, ndim);
rb_memory_view_fill_contiguous_strides(ndim, NUM2SSIZET(item_size_v), shape, RTEST(row_major_p), strides);
VALUE result = rb_ary_new_capa(ndim);
for (i = 0; i < ndim; ++i) {
rb_ary_push(result, SSIZET2NUM(strides[i]));
}
xfree(strides);
xfree(shape);
return result;
}
.get_memory_view_info(obj) (mod_func)
[ GitHub ]# File 'ext/-test-/memory_view/memory_view.c', line 116
static VALUE
memory_view_get_memory_view_info(VALUE mod, VALUE obj)
{
rb_memory_view_t view;
if (!rb_memory_view_get(obj, &view, 0)) {
return Qnil;
}
VALUE hash = rb_hash_new();
rb_hash_aset(hash, sym_obj, view.obj);
rb_hash_aset(hash, sym_byte_size, SSIZET2NUM(view.byte_size));
rb_hash_aset(hash, sym_readonly, view.readonly ? Qtrue : Qfalse);
rb_hash_aset(hash, sym_format, view.format ? rb_str_new_cstr(view.format) : Qnil);
rb_hash_aset(hash, sym_item_size, SSIZET2NUM(view.item_size));
rb_hash_aset(hash, sym_ndim, SSIZET2NUM(view.ndim));
if (view.shape) {
VALUE shape = rb_ary_new_capa(view.ndim);
rb_hash_aset(hash, sym_shape, shape);
}
else {
rb_hash_aset(hash, sym_shape, Qnil);
}
if (view.strides) {
VALUE strides = rb_ary_new_capa(view.ndim);
rb_hash_aset(hash, sym_strides, strides);
}
else {
rb_hash_aset(hash, sym_strides, Qnil);
}
if (view.sub_offsets) {
VALUE sub_offsets = rb_ary_new_capa(view.ndim);
rb_hash_aset(hash, sym_sub_offsets, sub_offsets);
}
else {
rb_hash_aset(hash, sym_sub_offsets, Qnil);
}
rb_memory_view_release(&view);
return hash;
}
.item_size_from_format(format) (mod_func)
[ GitHub ]# File 'ext/-test-/memory_view/memory_view.c', line 62
static VALUE
memory_view_item_size_from_format(VALUE mod, VALUE format)
{
const char *c_str = NULL;
if (!NIL_P(format))
c_str = StringValueCStr(format);
const char *err = NULL;
ssize_t item_size = rb_memory_view_item_size_from_format(c_str, &err);
if (!err)
return rb_assoc_new(SSIZET2NUM(item_size), Qnil);
else
return rb_assoc_new(SSIZET2NUM(item_size), rb_str_new_cstr(err));
}
.parse_item_format(format) (mod_func)
[ GitHub ]# File 'ext/-test-/memory_view/memory_view.c', line 76
static VALUE
memory_view_parse_item_format(VALUE mod, VALUE format)
{
const char *c_str = NULL;
if (!NIL_P(format))
c_str = StringValueCStr(format);
const char *err = NULL;
rb_memory_view_item_component_t *members;
size_t n_members;
ssize_t item_size = rb_memory_view_parse_item_format(c_str, &members, &n_members, &err);
VALUE result = rb_ary_new_capa(3);
rb_ary_push(result, SSIZET2NUM(item_size));
if (!err) {
VALUE ary = rb_ary_new_capa((long)n_members);
size_t i;
for (i = 0; i < n_members; ++i) {
VALUE member = rb_hash_new();
rb_hash_aset(member, sym_format, rb_str_new(&members[i].format, 1));
rb_hash_aset(member, sym_native_size_p, members[i].native_size_p ? Qtrue : Qfalse);
rb_hash_aset(member, sym_endianness, members[i].little_endian_p ? sym_little_endian : sym_big_endian);
rb_hash_aset(member, sym_offset, SSIZET2NUM(members[i].offset));
rb_hash_aset(member, sym_size, SSIZET2NUM(members[i].size));
rb_hash_aset(member, sym_repeat, SSIZET2NUM(members[i].repeat));
rb_ary_push(ary, member);
}
xfree(members);
rb_ary_push(result, ary);
rb_ary_push(result, Qnil);
}
else {
rb_ary_push(result, Qnil); // members
rb_ary_push(result, rb_str_new_cstr(err));
}
return result;
}
.ref_count_while_exporting(obj, n) (mod_func)
[ GitHub ]# File 'ext/-test-/memory_view/memory_view.c', line 225
static VALUE
memory_view_ref_count_while_exporting(VALUE mod, VALUE obj, VALUE n)
{
Check_Type(n, T_FIXNUM);
return memory_view_ref_count_while_exporting_i(obj, FIX2LONG(n));
}
.register(obj) (mod_func)
[ GitHub ]# File 'ext/-test-/memory_view/memory_view.c', line 56
static VALUE
memory_view_register(VALUE mod, VALUE obj)
{
return rb_memory_view_register(obj, &exportable_string_memory_view_entry) ? Qtrue : Qfalse;
}