Skip to content

Commit 28e86e5

Browse files
authored
Import from ruby (#60)
* Use bool for boolean return value ruby/ruby@05014dcb88 * Rename len to byte_size in rb_memory_view_t ruby/ruby@74652e640a * Add mdview_release_view for test ruby/ruby@b3ea828c8e * Remove needless use of StringValueCStr ruby/ruby@db0385d657 * Make some rb_memroy_view_t members const ruby/ruby@01ab29cc28
1 parent bb4b54d commit 28e86e5

4 files changed

Lines changed: 35 additions & 26 deletions

File tree

ext/-test-/memory_view/memory_view.c

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ static VALUE sym_offset;
1414
static VALUE sym_size;
1515
static VALUE sym_repeat;
1616
static VALUE sym_obj;
17-
static VALUE sym_len;
17+
static VALUE sym_byte_size;
1818
static VALUE sym_readonly;
1919
static VALUE sym_format;
2020
static VALUE sym_item_size;
@@ -26,15 +26,15 @@ static VALUE sym_endianness;
2626
static VALUE sym_little_endian;
2727
static VALUE sym_big_endian;
2828

29-
static int
29+
static bool
3030
exportable_string_get_memory_view(VALUE obj, rb_memory_view_t *view, int flags)
3131
{
3232
VALUE str = rb_ivar_get(obj, id_str);
3333
rb_memory_view_init_as_byte_array(view, obj, RSTRING_PTR(str), RSTRING_LEN(str), true);
34-
return 1;
34+
return true;
3535
}
3636

37-
static int
37+
static bool
3838
exportable_string_memory_view_available_p(VALUE obj)
3939
{
4040
VALUE str = rb_ivar_get(obj, id_str);
@@ -124,7 +124,7 @@ memory_view_get_memory_view_info(VALUE mod, VALUE obj)
124124

125125
VALUE hash = rb_hash_new();
126126
rb_hash_aset(hash, sym_obj, view.obj);
127-
rb_hash_aset(hash, sym_len, SSIZET2NUM(view.len));
127+
rb_hash_aset(hash, sym_byte_size, SSIZET2NUM(view.byte_size));
128128
rb_hash_aset(hash, sym_readonly, view.readonly ? Qtrue : Qfalse);
129129
rb_hash_aset(hash, sym_format, view.format ? rb_str_new_cstr(view.format) : Qnil);
130130
rb_hash_aset(hash, sym_item_size, SSIZET2NUM(view.item_size));
@@ -262,19 +262,18 @@ expstr_initialize(VALUE obj, VALUE s)
262262
return Qnil;
263263
}
264264

265-
static int
265+
static bool
266266
mdview_get_memory_view(VALUE obj, rb_memory_view_t *view, int flags)
267267
{
268268
VALUE buf_v = rb_ivar_get(obj, id_str);
269269
VALUE format_v = rb_ivar_get(obj, SYM2ID(sym_format));
270270
VALUE shape_v = rb_ivar_get(obj, SYM2ID(sym_shape));
271271
VALUE strides_v = rb_ivar_get(obj, SYM2ID(sym_strides));
272272

273-
const char *format = RSTRING_PTR(format_v);
274273
const char *err;
275-
const ssize_t item_size = rb_memory_view_item_size_from_format(format, &err);
274+
const ssize_t item_size = rb_memory_view_item_size_from_format(RSTRING_PTR(format_v), &err);
276275
if (item_size < 0) {
277-
return 0;
276+
return false;
278277
}
279278

280279
ssize_t ndim = RARRAY_LEN(shape_v);
@@ -304,24 +303,34 @@ mdview_get_memory_view(VALUE obj, rb_memory_view_t *view, int flags)
304303
}
305304

306305
rb_memory_view_init_as_byte_array(view, obj, RSTRING_PTR(buf_v), RSTRING_LEN(buf_v), true);
307-
view->format = StringValueCStr(format_v);
306+
view->format = RSTRING_PTR(format_v);
308307
view->item_size = item_size;
309308
view->ndim = ndim;
310309
view->shape = shape;
311310
view->strides = strides;
311+
view->sub_offsets = NULL;
312+
313+
return true;
314+
}
312315

313-
return 1;
316+
static bool
317+
mdview_release_memory_view(VALUE obj, rb_memory_view_t *view)
318+
{
319+
if (view->shape) xfree((void *)view->shape);
320+
if (view->strides) xfree((void *)view->strides);
321+
322+
return true;
314323
}
315324

316-
static int
325+
static bool
317326
mdview_memory_view_available_p(VALUE obj)
318327
{
319328
return true;
320329
}
321330

322331
static const rb_memory_view_entry_t mdview_memory_view_entry = {
323332
mdview_get_memory_view,
324-
NULL,
333+
mdview_release_memory_view,
325334
mdview_memory_view_available_p
326335
};
327336

@@ -402,7 +411,7 @@ Init_memory_view(void)
402411
sym_size = ID2SYM(rb_intern_const("size"));
403412
sym_repeat = ID2SYM(rb_intern_const("repeat"));
404413
sym_obj = ID2SYM(rb_intern_const("obj"));
405-
sym_len = ID2SYM(rb_intern_const("len"));
414+
sym_byte_size = ID2SYM(rb_intern_const("byte_size"));
406415
sym_readonly = ID2SYM(rb_intern_const("readonly"));
407416
sym_format = ID2SYM(rb_intern_const("format"));
408417
sym_item_size = ID2SYM(rb_intern_const("item_size"));

ext/fiddle/memory_view.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static size_t
4848
fiddle_memview_memsize(const void *ptr)
4949
{
5050
const struct memview_data *data = ptr;
51-
return sizeof(*data) + sizeof(rb_memory_view_item_component_t)*data->n_members + (size_t)data->view.len;
51+
return sizeof(*data) + sizeof(rb_memory_view_item_component_t)*data->n_members + (size_t)data->view.byte_size;
5252
}
5353

5454
static const rb_data_type_t fiddle_memview_data_type = {
@@ -90,13 +90,13 @@ rb_fiddle_memview_get_obj(VALUE obj)
9090
}
9191

9292
static VALUE
93-
rb_fiddle_memview_get_length(VALUE obj)
93+
rb_fiddle_memview_get_byte_size(VALUE obj)
9494
{
9595
struct memview_data *data;
9696
TypedData_Get_Struct(obj, struct memview_data, &fiddle_memview_data_type, data);
9797

9898
if (NIL_P(data->view.obj)) return Qnil;
99-
return SSIZET2NUM(data->view.len);
99+
return SSIZET2NUM(data->view.byte_size);
100100
}
101101

102102
static VALUE
@@ -240,7 +240,7 @@ Init_fiddle_memory_view(void)
240240
rb_define_alloc_func(rb_cMemoryView, rb_fiddle_memview_s_allocate);
241241
rb_define_method(rb_cMemoryView, "initialize", rb_fiddle_memview_initialize, 1);
242242
rb_define_method(rb_cMemoryView, "obj", rb_fiddle_memview_get_obj, 0);
243-
rb_define_method(rb_cMemoryView, "length", rb_fiddle_memview_get_length, 0);
243+
rb_define_method(rb_cMemoryView, "byte_size", rb_fiddle_memview_get_byte_size, 0);
244244
rb_define_method(rb_cMemoryView, "readonly?", rb_fiddle_memview_get_readonly, 0);
245245
rb_define_method(rb_cMemoryView, "format", rb_fiddle_memview_get_format, 0);
246246
rb_define_method(rb_cMemoryView, "item_size", rb_fiddle_memview_get_item_size, 0);

ext/fiddle/pointer.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,19 @@ fiddle_ptr_check_memory_view(VALUE obj)
102102
return data;
103103
}
104104

105-
static int
105+
static bool
106106
fiddle_ptr_memory_view_available_p(VALUE obj)
107107
{
108108
return fiddle_ptr_check_memory_view(obj) != NULL;
109109
}
110110

111-
static int
111+
static bool
112112
fiddle_ptr_get_memory_view(VALUE obj, rb_memory_view_t *view, int flags)
113113
{
114114
struct ptr_data *data = fiddle_ptr_check_memory_view(obj);
115115
rb_memory_view_init_as_byte_array(view, obj, data->ptr, data->size, true);
116116

117-
return 1;
117+
return true;
118118
}
119119

120120
static const rb_memory_view_entry_t fiddle_ptr_memory_view_entry = {

test/fiddle/test_memory_view.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def test_memory_view_from_pointer
3333
ptr = Pointer[str]
3434
mview = MemoryView.new(ptr)
3535
assert_same(ptr, mview.obj)
36-
assert_equal(str.length, mview.length)
36+
assert_equal(str.bytesize, mview.byte_size)
3737
assert_equal(true, mview.readonly?)
3838
assert_equal(nil, mview.format)
3939
assert_equal(1, mview.item_size)
@@ -43,7 +43,7 @@ def test_memory_view_from_pointer
4343
assert_equal(nil, mview.sub_offsets)
4444

4545
codes = str.codepoints
46-
assert_equal(codes, (0...str.length).map {|i| mview[i] })
46+
assert_equal(codes, (0...str.bytesize).map {|i| mview[i] })
4747
end
4848

4949
def test_memory_view_multi_dimensional
@@ -55,7 +55,7 @@ def test_memory_view_multi_dimensional
5555
shape = [3, 4]
5656
md = MemoryViewTestUtils::MultiDimensionalView.new(buf, "l!", shape, nil)
5757
mview = Fiddle::MemoryView.new(md)
58-
assert_equal(buf.length, mview.length)
58+
assert_equal(buf.bytesize, mview.byte_size)
5959
assert_equal("l!", mview.format)
6060
assert_equal(Fiddle::SIZEOF_LONG, mview.item_size)
6161
assert_equal(2, mview.ndim)
@@ -79,7 +79,7 @@ def test_memory_view_multi_dimensional_with_strides
7979
mview = Fiddle::MemoryView.new(md)
8080
assert_equal("l!", mview.format)
8181
assert_equal(Fiddle::SIZEOF_LONG, mview.item_size)
82-
assert_equal(buf.length, mview.length)
82+
assert_equal(buf.bytesize, mview.byte_size)
8383
assert_equal(2, mview.ndim)
8484
assert_equal(shape, mview.shape)
8585
assert_equal(strides, mview.strides)
@@ -101,7 +101,7 @@ def test_memory_view_multi_dimensional_with_multiple_members
101101
mview = Fiddle::MemoryView.new(md)
102102
assert_equal("ss", mview.format)
103103
assert_equal(Fiddle::SIZEOF_SHORT*2, mview.item_size)
104-
assert_equal(buf.length, mview.length)
104+
assert_equal(buf.bytesize, mview.byte_size)
105105
assert_equal(2, mview.ndim)
106106
assert_equal(shape, mview.shape)
107107
assert_equal(strides, mview.strides)

0 commit comments

Comments
 (0)