@@ -103,21 +103,25 @@ rb_fiddle_memview_s_available_p(VALUE klass, VALUE target)
103103}
104104
105105static VALUE
106- rb_fiddle_memview_s_export (VALUE klass , VALUE target )
106+ rb_fiddle_memview_s_export (int argc , VALUE * argv , VALUE klass )
107107{
108108 ID id_new ;
109109 CONST_ID (id_new , "new" );
110- VALUE memview = rb_funcall (klass , id_new , 1 , target );
110+ VALUE memview = rb_funcallv (klass , id_new , argc , argv );
111111 return rb_ensure (rb_yield , memview , rb_fiddle_memview_release , memview );
112112}
113113
114114static VALUE
115- rb_fiddle_memview_initialize (VALUE obj , VALUE target )
115+ rb_fiddle_memview_initialize (int argc , VALUE * argv , VALUE obj )
116116{
117+ VALUE target , flags_v ;
118+ rb_scan_args (argc , argv , "11" , & target , & flags_v );
119+ int flags = NIL_P (flags_v ) ? 0 : NUM2INT (flags_v );
120+
117121 struct memview_data * data ;
118122 TypedData_Get_Struct (obj , struct memview_data , & fiddle_memview_data_type , data );
119123
120- if (!rb_memory_view_get (target , & data -> view , 0 )) {
124+ if (!rb_memory_view_get (target , & data -> view , flags )) {
121125 data -> view .obj = Qnil ;
122126 rb_raise (rb_eArgError , "Unable to get a memory view from %+" PRIsVALUE , target );
123127 }
@@ -314,9 +318,18 @@ Init_fiddle_memory_view(void)
314318{
315319 rb_cMemoryView = rb_define_class_under (mFiddle , "MemoryView" , rb_cObject );
316320 rb_define_alloc_func (rb_cMemoryView , rb_fiddle_memview_s_allocate );
321+ rb_define_const (rb_cMemoryView , "SIMPLE" , INT2NUM (RUBY_MEMORY_VIEW_SIMPLE ));
322+ rb_define_const (rb_cMemoryView , "WRITABLE" , INT2NUM (RUBY_MEMORY_VIEW_WRITABLE ));
323+ rb_define_const (rb_cMemoryView , "FORMAT" , INT2NUM (RUBY_MEMORY_VIEW_FORMAT ));
324+ rb_define_const (rb_cMemoryView , "MULTI_DIMENSIONAL" , INT2NUM (RUBY_MEMORY_VIEW_MULTI_DIMENSIONAL ));
325+ rb_define_const (rb_cMemoryView , "STRIDES" , INT2NUM (RUBY_MEMORY_VIEW_STRIDES ));
326+ rb_define_const (rb_cMemoryView , "ROW_MAJOR" , INT2NUM (RUBY_MEMORY_VIEW_ROW_MAJOR ));
327+ rb_define_const (rb_cMemoryView , "COLUMN_MAJOR" , INT2NUM (RUBY_MEMORY_VIEW_COLUMN_MAJOR ));
328+ rb_define_const (rb_cMemoryView , "ANY_CONTIGUOUS" , INT2NUM (RUBY_MEMORY_VIEW_ANY_CONTIGUOUS ));
329+ rb_define_const (rb_cMemoryView , "INDIRECT" , INT2NUM (RUBY_MEMORY_VIEW_INDIRECT ));
317330 rb_define_singleton_method (rb_cMemoryView , "available?" , rb_fiddle_memview_s_available_p , 1 );
318- rb_define_singleton_method (rb_cMemoryView , "export" , rb_fiddle_memview_s_export , 1 );
319- rb_define_method (rb_cMemoryView , "initialize" , rb_fiddle_memview_initialize , 1 );
331+ rb_define_singleton_method (rb_cMemoryView , "export" , rb_fiddle_memview_s_export , - 1 );
332+ rb_define_method (rb_cMemoryView , "initialize" , rb_fiddle_memview_initialize , - 1 );
320333 rb_define_method (rb_cMemoryView , "release" , rb_fiddle_memview_release , 0 );
321334 rb_define_method (rb_cMemoryView , "obj" , rb_fiddle_memview_get_obj , 0 );
322335 rb_define_method (rb_cMemoryView , "byte_size" , rb_fiddle_memview_get_byte_size , 0 );
0 commit comments