@@ -97,21 +97,25 @@ rb_fiddle_memview_release(VALUE obj)
9797}
9898
9999static VALUE
100- rb_fiddle_memview_s_export (VALUE klass , VALUE target )
100+ rb_fiddle_memview_s_export (int argc , VALUE * argv , VALUE klass )
101101{
102102 ID id_new ;
103103 CONST_ID (id_new , "new" );
104- VALUE memview = rb_funcall (klass , id_new , 1 , target );
104+ VALUE memview = rb_funcallv (klass , id_new , argc , argv );
105105 return rb_ensure (rb_yield , memview , rb_fiddle_memview_release , memview );
106106}
107107
108108static VALUE
109- rb_fiddle_memview_initialize (VALUE obj , VALUE target )
109+ rb_fiddle_memview_initialize (int argc , VALUE * argv , VALUE obj )
110110{
111+ VALUE target , flags_v ;
112+ rb_scan_args (argc , argv , "11" , & target , & flags_v );
113+ int flags = NIL_P (flags_v ) ? 0 : NUM2INT (flags_v );
114+
111115 struct memview_data * data ;
112116 TypedData_Get_Struct (obj , struct memview_data , & fiddle_memview_data_type , data );
113117
114- if (!rb_memory_view_get (target , & data -> view , 0 )) {
118+ if (!rb_memory_view_get (target , & data -> view , flags )) {
115119 data -> view .obj = Qnil ;
116120 rb_raise (rb_eArgError , "Unable to get a memory view from %+" PRIsVALUE , target );
117121 }
@@ -307,8 +311,8 @@ Init_fiddle_memory_view(void)
307311{
308312 rb_cMemoryView = rb_define_class_under (mFiddle , "MemoryView" , rb_cObject );
309313 rb_define_alloc_func (rb_cMemoryView , rb_fiddle_memview_s_allocate );
310- rb_define_singleton_method (rb_cMemoryView , "export" , rb_fiddle_memview_s_export , 1 );
311- rb_define_method (rb_cMemoryView , "initialize" , rb_fiddle_memview_initialize , 1 );
314+ rb_define_singleton_method (rb_cMemoryView , "export" , rb_fiddle_memview_s_export , - 1 );
315+ rb_define_method (rb_cMemoryView , "initialize" , rb_fiddle_memview_initialize , - 1 );
312316 rb_define_method (rb_cMemoryView , "release" , rb_fiddle_memview_release , 0 );
313317 rb_define_method (rb_cMemoryView , "obj" , rb_fiddle_memview_get_obj , 0 );
314318 rb_define_method (rb_cMemoryView , "byte_size" , rb_fiddle_memview_get_byte_size , 0 );
@@ -321,6 +325,15 @@ Init_fiddle_memory_view(void)
321325 rb_define_method (rb_cMemoryView , "sub_offsets" , rb_fiddle_memview_get_sub_offsets , 0 );
322326 rb_define_method (rb_cMemoryView , "[]" , rb_fiddle_memview_aref , -1 );
323327 rb_define_method (rb_cMemoryView , "to_s" , rb_fiddle_memview_to_s , 0 );
328+ rb_define_const (rb_cMemoryView , "SIMPLE" , INT2NUM (RUBY_MEMORY_VIEW_SIMPLE ));
329+ rb_define_const (rb_cMemoryView , "WRITABLE" , INT2NUM (RUBY_MEMORY_VIEW_WRITABLE ));
330+ rb_define_const (rb_cMemoryView , "FORMAT" , INT2NUM (RUBY_MEMORY_VIEW_FORMAT ));
331+ rb_define_const (rb_cMemoryView , "MULTI_DIMENSIONAL" , INT2NUM (RUBY_MEMORY_VIEW_MULTI_DIMENSIONAL ));
332+ rb_define_const (rb_cMemoryView , "STRIDES" , INT2NUM (RUBY_MEMORY_VIEW_STRIDES ));
333+ rb_define_const (rb_cMemoryView , "ROW_MAJOR" , INT2NUM (RUBY_MEMORY_VIEW_ROW_MAJOR ));
334+ rb_define_const (rb_cMemoryView , "COLUMN_MAJOR" , INT2NUM (RUBY_MEMORY_VIEW_COLUMN_MAJOR ));
335+ rb_define_const (rb_cMemoryView , "ANY_CONTIGUOUS" , INT2NUM (RUBY_MEMORY_VIEW_ANY_CONTIGUOUS ));
336+ rb_define_const (rb_cMemoryView , "INDIRECT" , INT2NUM (RUBY_MEMORY_VIEW_INDIRECT ));
324337}
325338
326339#endif /* HAVE_RUBY_MEMORY_VIEW_H */
0 commit comments