Skip to content

Commit a166934

Browse files
committed
Add Fiddle::MemoryView.available?
Fiddle had no binding for `rb_memory_view_available_p()`, which callers can use to check whether an object supports the memory view protocol.
1 parent d389bbf commit a166934

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

ext/fiddle/memory_view.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ rb_fiddle_memview_release(VALUE obj)
9696
return Qnil;
9797
}
9898

99+
static VALUE
100+
rb_fiddle_memview_s_available_p(VALUE klass, VALUE target)
101+
{
102+
return rb_memory_view_available_p(target) ? Qtrue : Qfalse;
103+
}
104+
99105
static VALUE
100106
rb_fiddle_memview_s_export(VALUE klass, VALUE target)
101107
{
@@ -307,6 +313,7 @@ Init_fiddle_memory_view(void)
307313
{
308314
rb_cMemoryView = rb_define_class_under(mFiddle, "MemoryView", rb_cObject);
309315
rb_define_alloc_func(rb_cMemoryView, rb_fiddle_memview_s_allocate);
316+
rb_define_singleton_method(rb_cMemoryView, "available?", rb_fiddle_memview_s_available_p, 1);
310317
rb_define_singleton_method(rb_cMemoryView, "export", rb_fiddle_memview_s_export, 1);
311318
rb_define_method(rb_cMemoryView, "initialize", rb_fiddle_memview_initialize, 1);
312319
rb_define_method(rb_cMemoryView, "release", rb_fiddle_memview_release, 0);

test/fiddle/test_memory_view.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ def test_memory_view_from_unsupported_obj
3030
end
3131
end
3232

33+
def test_available?
34+
assert_equal(true, MemoryView.available?(Pointer["hello world"]))
35+
assert_equal(false, MemoryView.available?(Fiddle::NULL))
36+
assert_equal(false, MemoryView.available?(Object.new))
37+
end
38+
3339
def test_memory_view_from_pointer
3440
str = Marshal.load(Marshal.dump("hello world"))
3541
ptr = Pointer[str]

0 commit comments

Comments
 (0)