4#ifdef HAVE_RUBY_MEMORY_VIEW_H
8#if SIZEOF_INTPTR_T == SIZEOF_LONG_LONG
9# define INTPTR2NUM LL2NUM
10# define UINTPTR2NUM ULL2NUM
11#elif SIZEOF_INTPTR_T == SIZEOF_LONG
12# define INTPTR2NUM LONG2NUM
13# define UINTPTR2NUM ULONG2NUM
15# define INTPTR2NUM INT2NUM
16# define UINTPTR2NUM UINT2NUM
21#ifdef FIDDLE_MEMORY_VIEW
31fiddle_memview_mark(
void *
ptr)
33 const struct memview_data *data =
ptr;
38fiddle_memview_free(
void *
ptr)
40 struct memview_data *data =
ptr;
48fiddle_memview_memsize(
const void *
ptr)
50 const struct memview_data *data =
ptr;
56 {fiddle_memview_mark, fiddle_memview_free, fiddle_memview_memsize,},
60rb_fiddle_memview_s_allocate(
VALUE klass)
62 struct memview_data *data;
64 data->view.obj =
Qnil;
71rb_fiddle_memview_initialize(
VALUE obj,
VALUE target)
73 struct memview_data *data;
84rb_fiddle_memview_get_obj(
VALUE obj)
86 struct memview_data *data;
89 return data->view.obj;
93rb_fiddle_memview_get_byte_size(
VALUE obj)
95 struct memview_data *data;
103rb_fiddle_memview_get_readonly(
VALUE obj)
105 struct memview_data *data;
113rb_fiddle_memview_get_format(
VALUE obj)
115 struct memview_data *data;
123rb_fiddle_memview_get_item_size(
VALUE obj)
125 struct memview_data *data;
133rb_fiddle_memview_get_ndim(
VALUE obj)
135 struct memview_data *data;
143rb_fiddle_memview_get_shape(
VALUE obj)
145 struct memview_data *data;
149 if (data->view.shape ==
NULL)
return Qnil;
151 const ssize_t ndim = data->view.ndim;
154 for (i = 0; i < ndim; ++i) {
161rb_fiddle_memview_get_strides(
VALUE obj)
163 struct memview_data *data;
167 if (data->view.strides ==
NULL)
return Qnil;
169 const ssize_t ndim = data->view.ndim;
172 for (i = 0; i < ndim; ++i) {
179rb_fiddle_memview_get_sub_offsets(
VALUE obj)
181 struct memview_data *data;
185 if (data->view.sub_offsets ==
NULL)
return Qnil;
187 const ssize_t ndim = data->view.ndim;
190 for (i = 0; i < ndim; ++i) {
199 struct memview_data *data;
204 const ssize_t ndim = data->view.ndim;
210 ssize_t *indices =
ALLOCV_N(ssize_t, indices_v, ndim);
213 for (i = 0; i < ndim; ++i) {
221 if (data->view.format ==
NULL) {
225 if (!data->members) {
229 err - data->view.format, data->view.format);
237Init_fiddle_memory_view(
void)
241 rb_define_method(rb_cMemoryView,
"initialize", rb_fiddle_memview_initialize, 1);
243 rb_define_method(rb_cMemoryView,
"byte_size", rb_fiddle_memview_get_byte_size, 0);
244 rb_define_method(rb_cMemoryView,
"readonly?", rb_fiddle_memview_get_readonly, 0);
245 rb_define_method(rb_cMemoryView,
"format", rb_fiddle_memview_get_format, 0);
246 rb_define_method(rb_cMemoryView,
"item_size", rb_fiddle_memview_get_item_size, 0);
249 rb_define_method(rb_cMemoryView,
"strides", rb_fiddle_memview_get_strides, 0);
250 rb_define_method(rb_cMemoryView,
"sub_offsets", rb_fiddle_memview_get_sub_offsets, 0);
VALUE rb_ary_push(VALUE ary, VALUE item)
VALUE rb_ary_new_capa(long capa)
#define rb_define_method(klass, mid, func, arity)
Defines klass#mid.
void rb_gc_mark(VALUE ptr)
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_cObject
Object class.
#define rb_str_new_cstr(str)
void rb_define_alloc_func(VALUE, rb_alloc_func_t)
void * rb_memory_view_get_item_pointer(rb_memory_view_t *view, const ssize_t *indices)
bool rb_memory_view_get(VALUE obj, rb_memory_view_t *memory_view, int flags)
VALUE rb_memory_view_extract_item_members(const void *ptr, const rb_memory_view_item_component_t *members, const size_t n_members)
bool rb_memory_view_release(rb_memory_view_t *memory_view)
ssize_t rb_memory_view_parse_item_format(const char *format, rb_memory_view_item_component_t **members, size_t *n_members, const char **err)
#define TypedData_Get_Struct(obj, type, data_type, sval)
#define TypedData_Make_Struct(klass, type, data_type, sval)