numo-narray 0.9.1.2 → 0.9.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +7 -1
- data/ext/numo/narray/array.c +6 -6
- data/ext/numo/narray/data.c +8 -8
- data/ext/numo/narray/depend.erb +4 -4
- data/ext/numo/narray/extconf.rb +2 -2
- data/ext/numo/narray/gen/cogen.rb +13 -0
- data/ext/numo/narray/gen/def/dfloat.rb +1 -0
- data/ext/numo/narray/gen/def/sfloat.rb +1 -0
- data/ext/numo/narray/gen/narray_def.rb +14 -2
- data/ext/numo/narray/gen/spec.rb +26 -10
- data/ext/numo/narray/gen/tmpl/accum_binary.c +1 -1
- data/ext/numo/narray/gen/tmpl/accum_index.c +11 -1
- data/ext/numo/narray/gen/tmpl/alloc_func.c +3 -3
- data/ext/numo/narray/gen/tmpl/binary.c +149 -10
- data/ext/numo/narray/gen/tmpl/binary2.c +1 -1
- data/ext/numo/narray/gen/tmpl/bincount.c +1 -1
- data/ext/numo/narray/gen/tmpl/cast.c +1 -1
- data/ext/numo/narray/gen/tmpl/cond_binary.c +1 -1
- data/ext/numo/narray/gen/tmpl/each.c +1 -1
- data/ext/numo/narray/gen/tmpl/each_with_index.c +1 -1
- data/ext/numo/narray/gen/tmpl/extract_data.c +3 -3
- data/ext/numo/narray/gen/tmpl/inspect.c +1 -1
- data/ext/numo/narray/gen/tmpl/lib.c +5 -0
- data/ext/numo/narray/gen/tmpl/map_with_index.c +1 -1
- data/ext/numo/narray/gen/tmpl/median.c +3 -2
- data/ext/numo/narray/gen/tmpl/pow.c +1 -1
- data/ext/numo/narray/gen/tmpl/qsort.c +118 -56
- data/ext/numo/narray/gen/tmpl/store.c +4 -4
- data/ext/numo/narray/gen/tmpl/store_bit.c +4 -4
- data/ext/numo/narray/gen/tmpl/to_a.c +1 -1
- data/ext/numo/narray/gen/tmpl/unary_s.c +55 -9
- data/ext/numo/narray/gen/tmpl_bit/each.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/each_with_index.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/inspect.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/mask.c +1 -1
- data/ext/numo/narray/gen/tmpl_bit/to_a.c +1 -1
- data/ext/numo/narray/index.c +64 -37
- data/ext/numo/narray/math.c +4 -4
- data/ext/numo/narray/narray.c +54 -29
- data/ext/numo/narray/ndloop.c +7 -7
- data/ext/numo/narray/numo/narray.h +9 -2
- data/ext/numo/narray/numo/template.h +18 -0
- data/ext/numo/narray/numo/types/bit.h +5 -0
- data/ext/numo/narray/numo/types/complex_macro.h +5 -0
- data/ext/numo/narray/numo/types/float_macro.h +5 -0
- data/ext/numo/narray/numo/types/int_macro.h +24 -0
- data/ext/numo/narray/numo/types/robj_macro.h +5 -0
- data/ext/numo/narray/numo/types/uint_macro.h +24 -0
- data/ext/numo/narray/numo/types/xint_macro.h +5 -25
- data/ext/numo/narray/rand.c +2 -29
- data/ext/numo/narray/step.c +1 -28
- data/ext/numo/narray/struct.c +26 -22
- data/lib/numo/narray/extra.rb +50 -1
- metadata +2 -2
data/ext/numo/narray/ndloop.c
CHANGED
@@ -214,7 +214,7 @@ ndloop_func_loop_spec(ndfunc_t *nf, int user_ndim)
|
|
214
214
|
static int
|
215
215
|
ndloop_cast_required(VALUE type, VALUE value)
|
216
216
|
{
|
217
|
-
return CASTABLE(type) && type !=
|
217
|
+
return CASTABLE(type) && type != rb_obj_class(value);
|
218
218
|
}
|
219
219
|
|
220
220
|
static int
|
@@ -657,7 +657,7 @@ ndloop_check_inplace(VALUE type, int na_ndim, size_t *na_shape, VALUE v)
|
|
657
657
|
narray_t *na;
|
658
658
|
|
659
659
|
// type check
|
660
|
-
if (type !=
|
660
|
+
if (type != rb_obj_class(v)) {
|
661
661
|
return 0;
|
662
662
|
}
|
663
663
|
GetNArray(v,na);
|
@@ -724,7 +724,7 @@ ndloop_get_arg_type(ndfunc_t *nf, VALUE args, VALUE t)
|
|
724
724
|
t = nf->ain[i].type;
|
725
725
|
// if i-th type is Qnil, get the type of i-th input value
|
726
726
|
if (!CASTABLE(t)) {
|
727
|
-
t =
|
727
|
+
t = rb_obj_class(RARRAY_AREF(args,i));
|
728
728
|
}
|
729
729
|
}
|
730
730
|
return t;
|
@@ -1392,7 +1392,7 @@ loop_narray(ndfunc_t *nf, na_md_loop_t *lp)
|
|
1392
1392
|
}
|
1393
1393
|
|
1394
1394
|
|
1395
|
-
VALUE
|
1395
|
+
static VALUE
|
1396
1396
|
na_ndloop_main(ndfunc_t *nf, VALUE args, void *opt_ptr)
|
1397
1397
|
{
|
1398
1398
|
unsigned int copy_flag;
|
@@ -1495,7 +1495,7 @@ na_info_str(VALUE ary)
|
|
1495
1495
|
GetNArray(ary,na);
|
1496
1496
|
nd = na->ndim;
|
1497
1497
|
|
1498
|
-
buf = rb_str_new2(rb_class2name(
|
1498
|
+
buf = rb_str_new2(rb_class2name(rb_obj_class(ary)));
|
1499
1499
|
if (NA_TYPE(na) == NARRAY_VIEW_T) {
|
1500
1500
|
rb_str_cat(buf,"(view)",6);
|
1501
1501
|
}
|
@@ -1644,8 +1644,8 @@ loop_store_subnarray(ndfunc_t *nf, na_md_loop_t *lp, int i0, size_t *c, VALUE a)
|
|
1644
1644
|
int *dim_map;
|
1645
1645
|
VALUE a_type;
|
1646
1646
|
|
1647
|
-
a_type =
|
1648
|
-
if (
|
1647
|
+
a_type = rb_obj_class(LARG(lp,0).value);
|
1648
|
+
if (rb_obj_class(a) != a_type) {
|
1649
1649
|
a = rb_funcall(a_type, id_cast, 1, a);
|
1650
1650
|
}
|
1651
1651
|
GetNArray(a,na);
|
@@ -13,8 +13,8 @@ extern "C" {
|
|
13
13
|
#endif
|
14
14
|
#endif
|
15
15
|
|
16
|
-
#define NARRAY_VERSION "0.9.1.
|
17
|
-
#define NARRAY_VERSION_CODE
|
16
|
+
#define NARRAY_VERSION "0.9.1.3"
|
17
|
+
#define NARRAY_VERSION_CODE 913
|
18
18
|
|
19
19
|
#include <math.h>
|
20
20
|
#include "numo/compat.h"
|
@@ -107,6 +107,13 @@ extern "C" {
|
|
107
107
|
# endif
|
108
108
|
#endif
|
109
109
|
|
110
|
+
#if SIZEOF_VALUE > 4
|
111
|
+
# undef INT322NUM
|
112
|
+
# undef UINT322NUM
|
113
|
+
# define INT322NUM(x) INT2FIX(x)
|
114
|
+
# define UINT322NUM(x) INT2FIX(x)
|
115
|
+
#endif
|
116
|
+
|
110
117
|
#ifndef HAVE_TYPE_BOOL
|
111
118
|
typedef int bool;
|
112
119
|
#endif
|
@@ -145,5 +145,23 @@ is_aligned_step(const ssize_t step, const size_t alignment)
|
|
145
145
|
return ((step) & ((alignment)-1)) == 0;
|
146
146
|
}
|
147
147
|
|
148
|
+
static inline int
|
149
|
+
get_count_of_elements_not_aligned_to_simd_size(const void *ptr, const size_t alignment, const size_t element_size)
|
150
|
+
{
|
151
|
+
int cnt = (size_t)(ptr) & ((alignment)-1);
|
152
|
+
return cnt == 0 ? 0 : (alignment - cnt) / element_size;
|
153
|
+
}
|
154
|
+
|
155
|
+
static inline int is_same_aligned2(const void *ptr1, const void *ptr2, const size_t alignment)
|
156
|
+
{
|
157
|
+
return ((size_t)(ptr1) & ((alignment)-1)) == ((size_t)(ptr2) & ((alignment)-1));
|
158
|
+
}
|
159
|
+
|
160
|
+
static inline int is_same_aligned3(const void *ptr1, const void *ptr2, const void *ptr3, const size_t alignment)
|
161
|
+
{
|
162
|
+
return (((size_t)(ptr1) & ((alignment)-1)) == ((size_t)(ptr2) & ((alignment)-1))) &&
|
163
|
+
(((size_t)(ptr1) & ((alignment)-1)) == ((size_t)(ptr3) & ((alignment)-1)));
|
164
|
+
}
|
165
|
+
|
148
166
|
|
149
167
|
#endif /* ifndef TEMPLATE_H */
|
@@ -11,6 +11,11 @@ typedef BIT_DIGIT rtype;
|
|
11
11
|
|
12
12
|
#define m_from_double(x) (((x)==0) ? 0 : 1)
|
13
13
|
#define m_from_real(x) (((x)==0) ? 0 : 1)
|
14
|
+
#define m_from_sint(x) (((x)==0) ? 0 : 1)
|
15
|
+
#define m_from_int32(x) (((x)==0) ? 0 : 1)
|
16
|
+
#define m_from_int64(x) (((x)==0) ? 0 : 1)
|
17
|
+
#define m_from_uint32(x) (((x)==0) ? 0 : 1)
|
18
|
+
#define m_from_uint64(x) (((x)==0) ? 0 : 1)
|
14
19
|
#define m_data_to_num(x) INT2FIX(x)
|
15
20
|
#define m_sprintf(s,x) sprintf(s,"%1d",(int)(x))
|
16
21
|
|
@@ -43,6 +43,11 @@ static inline dtype c_from_dcomplex(dcomplex x) {
|
|
43
43
|
|
44
44
|
#define m_from_double(x) c_new(x,0)
|
45
45
|
#define m_from_real(x) c_new(x,0)
|
46
|
+
#define m_from_sint(x) c_new(x,0)
|
47
|
+
#define m_from_int32(x) c_new(x,0)
|
48
|
+
#define m_from_int64(x) c_new(x,0)
|
49
|
+
#define m_from_uint32(x) c_new(x,0)
|
50
|
+
#define m_from_uint64(x) c_new(x,0)
|
46
51
|
#define m_from_scomplex(x) c_from_scomplex(x)
|
47
52
|
#define m_from_dcomplex(x) c_from_dcomplex(x)
|
48
53
|
|
@@ -17,6 +17,11 @@ extern double pow(double, double);
|
|
17
17
|
|
18
18
|
#define m_from_double(x) (x)
|
19
19
|
#define m_from_real(x) (x)
|
20
|
+
#define m_from_sint(x) (x)
|
21
|
+
#define m_from_int32(x) (x)
|
22
|
+
#define m_from_int64(x) (x)
|
23
|
+
#define m_from_uint32(x) (x)
|
24
|
+
#define m_from_uint64(x) (x)
|
20
25
|
|
21
26
|
#define m_add(x,y) ((x)+(y))
|
22
27
|
#define m_sub(x,y) ((x)-(y))
|
@@ -39,3 +39,27 @@ static dtype pow_int(dtype x, int p)
|
|
39
39
|
}
|
40
40
|
return r;
|
41
41
|
}
|
42
|
+
|
43
|
+
static inline int64_t f_sum(size_t n, char *p, ssize_t stride)
|
44
|
+
{
|
45
|
+
int64_t x,y=0;
|
46
|
+
size_t i=n;
|
47
|
+
for (; i--;) {
|
48
|
+
x = *(dtype*)p;
|
49
|
+
y += x;
|
50
|
+
p += stride;
|
51
|
+
}
|
52
|
+
return y;
|
53
|
+
}
|
54
|
+
|
55
|
+
static inline int64_t f_prod(size_t n, char *p, ssize_t stride)
|
56
|
+
{
|
57
|
+
int64_t x,y=1;
|
58
|
+
size_t i=n;
|
59
|
+
for (; i--;) {
|
60
|
+
x = *(dtype*)p;
|
61
|
+
y *= x;
|
62
|
+
p += stride;
|
63
|
+
}
|
64
|
+
return y;
|
65
|
+
}
|
@@ -6,6 +6,11 @@
|
|
6
6
|
|
7
7
|
#define m_from_double(x) rb_float_new(x)
|
8
8
|
#define m_from_real(x) rb_float_new(x)
|
9
|
+
#define m_from_sint(x) INT2FIX(x)
|
10
|
+
#define m_from_int32(x) INT322NUM(x)
|
11
|
+
#define m_from_int64(x) INT642NUM(x)
|
12
|
+
#define m_from_uint32(x) UINT322NUM(x)
|
13
|
+
#define m_from_uint64(x) UINT642NUM(x)
|
9
14
|
|
10
15
|
#define m_add(x,y) rb_funcall(x,'+',1,y)
|
11
16
|
#define m_sub(x,y) rb_funcall(x,'-',1,y)
|
@@ -30,3 +30,27 @@ static dtype pow_int(dtype x, int p)
|
|
30
30
|
}
|
31
31
|
return r;
|
32
32
|
}
|
33
|
+
|
34
|
+
static inline u_int64_t f_sum(size_t n, char *p, ssize_t stride)
|
35
|
+
{
|
36
|
+
u_int64_t x,y=0;
|
37
|
+
size_t i=n;
|
38
|
+
for (; i--;) {
|
39
|
+
x = *(dtype*)p;
|
40
|
+
y += x;
|
41
|
+
p += stride;
|
42
|
+
}
|
43
|
+
return y;
|
44
|
+
}
|
45
|
+
|
46
|
+
static inline u_int64_t f_prod(size_t n, char *p, ssize_t stride)
|
47
|
+
{
|
48
|
+
u_int64_t x,y=1;
|
49
|
+
size_t i=n;
|
50
|
+
for (; i--;) {
|
51
|
+
x = *(dtype*)p;
|
52
|
+
y *= x;
|
53
|
+
p += stride;
|
54
|
+
}
|
55
|
+
return y;
|
56
|
+
}
|
@@ -3,6 +3,11 @@
|
|
3
3
|
|
4
4
|
#define m_from_double(x) (x)
|
5
5
|
#define m_from_real(x) (x)
|
6
|
+
#define m_from_sint(x) (x)
|
7
|
+
#define m_from_int32(x) (x)
|
8
|
+
#define m_from_int64(x) (x)
|
9
|
+
#define m_from_uint32(x) (x)
|
10
|
+
#define m_from_uint64(x) (x)
|
6
11
|
|
7
12
|
#define m_add(x,y) ((x)+(y))
|
8
13
|
#define m_sub(x,y) ((x)-(y))
|
@@ -44,31 +49,6 @@
|
|
44
49
|
#define cmpgt(a,b) \
|
45
50
|
(qsort_cast(a) > qsort_cast(b))
|
46
51
|
|
47
|
-
|
48
|
-
static inline dtype f_sum(size_t n, char *p, ssize_t stride)
|
49
|
-
{
|
50
|
-
dtype x,y=0;
|
51
|
-
size_t i=n;
|
52
|
-
for (; i--;) {
|
53
|
-
x = *(dtype*)p;
|
54
|
-
y += x;
|
55
|
-
p += stride;
|
56
|
-
}
|
57
|
-
return y;
|
58
|
-
}
|
59
|
-
|
60
|
-
static inline dtype f_prod(size_t n, char *p, ssize_t stride)
|
61
|
-
{
|
62
|
-
dtype x,y=1;
|
63
|
-
size_t i=n;
|
64
|
-
for (; i--;) {
|
65
|
-
x = *(dtype*)p;
|
66
|
-
y *= x;
|
67
|
-
p += stride;
|
68
|
-
}
|
69
|
-
return y;
|
70
|
-
}
|
71
|
-
|
72
52
|
static inline dtype f_min(size_t n, char *p, ssize_t stride)
|
73
53
|
{
|
74
54
|
dtype x,y;
|
data/ext/numo/narray/rand.c
CHANGED
@@ -10,35 +10,8 @@
|
|
10
10
|
#include <sys/time.h>
|
11
11
|
#endif
|
12
12
|
|
13
|
-
int n_bits(u_int64_t a)
|
14
|
-
{
|
15
|
-
int i, x, /*xu,*/ xl, n=5;
|
16
|
-
u_int64_t m;
|
17
|
-
|
18
|
-
if (a==0) return 0;
|
19
|
-
//if (a<0) a=-a;
|
20
|
-
|
21
|
-
x = 1<<n;
|
22
|
-
//xu = 1<<(n+1);
|
23
|
-
xl = 0;
|
24
|
-
//printf("%3i, [%3i, %3i], %i\n", i, xu, xl, x);
|
25
|
-
|
26
|
-
for (i=n; i>=0; i--) {
|
27
|
-
m = ~((1<<(x-1))-1);
|
28
|
-
if (m & a) {
|
29
|
-
xl = x;
|
30
|
-
x += 1<<(i-1);
|
31
|
-
} else {
|
32
|
-
//xu = x;
|
33
|
-
x -= 1<<(i-1);
|
34
|
-
}
|
35
|
-
//printf("%3i, [%3i, %3i], %i, 0x%lx, 0x%lx\n", i, xu, xl, x, m, m&a);
|
36
|
-
}
|
37
|
-
return xl;
|
38
|
-
}
|
39
|
-
|
40
13
|
static u_int64_t
|
41
|
-
|
14
|
+
random_seed()
|
42
15
|
{
|
43
16
|
static int n = 0;
|
44
17
|
struct timeval tv;
|
@@ -48,7 +21,7 @@ static u_int64_t
|
|
48
21
|
}
|
49
22
|
|
50
23
|
static VALUE
|
51
|
-
|
24
|
+
nary_s_srand(int argc, VALUE *argv, VALUE obj)
|
52
25
|
{
|
53
26
|
VALUE vseed;
|
54
27
|
u_int64_t seed;
|
data/ext/numo/narray/step.c
CHANGED
@@ -56,22 +56,7 @@ step_init(
|
|
56
56
|
SET_EXCL(self, excl);
|
57
57
|
}
|
58
58
|
|
59
|
-
VALUE
|
60
|
-
nary_step_new(
|
61
|
-
VALUE beg,
|
62
|
-
VALUE end,
|
63
|
-
VALUE step,
|
64
|
-
VALUE len,
|
65
|
-
VALUE excl
|
66
|
-
)
|
67
|
-
{
|
68
|
-
VALUE self = rb_obj_alloc(na_cStep);
|
69
|
-
|
70
|
-
step_init(self, beg, end, step, len, excl);
|
71
|
-
return self;
|
72
|
-
}
|
73
|
-
|
74
|
-
VALUE
|
59
|
+
static VALUE
|
75
60
|
nary_step_new2(
|
76
61
|
VALUE range,
|
77
62
|
VALUE step,
|
@@ -455,18 +440,6 @@ nary_s_step( int argc, VALUE *argv, VALUE mod )
|
|
455
440
|
}
|
456
441
|
|
457
442
|
|
458
|
-
VALUE
|
459
|
-
nary_is_sequence( VALUE arg )
|
460
|
-
{
|
461
|
-
if ( rb_obj_is_kind_of(arg, rb_cRange) )
|
462
|
-
return Qtrue;
|
463
|
-
if ( rb_obj_is_kind_of(arg, na_cStep) )
|
464
|
-
return Qtrue;
|
465
|
-
return Qfalse;
|
466
|
-
}
|
467
|
-
|
468
|
-
|
469
|
-
|
470
443
|
void
|
471
444
|
Init_nary_step()
|
472
445
|
{
|
data/ext/numo/narray/struct.c
CHANGED
@@ -23,7 +23,7 @@ nst_allocate(VALUE self)
|
|
23
23
|
case NARRAY_DATA_T:
|
24
24
|
ptr = NA_DATA_PTR(na);
|
25
25
|
if (na->size > 0 && ptr == NULL) {
|
26
|
-
velmsz = rb_const_get(
|
26
|
+
velmsz = rb_const_get(rb_obj_class(self), rb_intern("element_byte_size"));
|
27
27
|
ptr = xmalloc(NUM2SIZET(velmsz) * na->size);
|
28
28
|
NA_DATA_PTR(na) = ptr;
|
29
29
|
}
|
@@ -51,7 +51,7 @@ static VALUE
|
|
51
51
|
nst_definition(VALUE nst, VALUE idx)
|
52
52
|
{
|
53
53
|
long i;
|
54
|
-
VALUE def = nst_definitions(
|
54
|
+
VALUE def = nst_definitions(rb_obj_class(nst));
|
55
55
|
long len = RARRAY_LEN(def);
|
56
56
|
|
57
57
|
if (TYPE(idx) == T_STRING || TYPE(idx) == T_SYMBOL) {
|
@@ -76,7 +76,7 @@ nst_definition(VALUE nst, VALUE idx)
|
|
76
76
|
|
77
77
|
void na_copy_array_structure(VALUE self, VALUE view);
|
78
78
|
|
79
|
-
VALUE
|
79
|
+
static VALUE
|
80
80
|
na_make_view_struct(VALUE self, VALUE dtype, VALUE offset)
|
81
81
|
{
|
82
82
|
size_t i, n;
|
@@ -105,7 +105,7 @@ na_make_view_struct(VALUE self, VALUE dtype, VALUE offset)
|
|
105
105
|
for (j=na->ndim,k=0; j<ndim; j++,k++) {
|
106
106
|
shape[j] = nt->shape[k];
|
107
107
|
}
|
108
|
-
klass =
|
108
|
+
klass = rb_obj_class(dtype);
|
109
109
|
stridx = ALLOC_N(stridx_t, ndim);
|
110
110
|
stride = na_dtype_elmsz(klass);
|
111
111
|
for (j=ndim,k=nt->ndim; k; ) {
|
@@ -118,7 +118,7 @@ na_make_view_struct(VALUE self, VALUE dtype, VALUE offset)
|
|
118
118
|
for (j=0; j<ndim; j++) {
|
119
119
|
shape[j] = na->shape[j];
|
120
120
|
}
|
121
|
-
klass =
|
121
|
+
klass = rb_obj_class(self);
|
122
122
|
if (TYPE(dtype)==T_CLASS) {
|
123
123
|
if (RTEST(rb_class_inherited_p(dtype,cNArray))) {
|
124
124
|
klass = dtype;
|
@@ -172,7 +172,7 @@ na_make_view_struct(VALUE self, VALUE dtype, VALUE offset)
|
|
172
172
|
}
|
173
173
|
|
174
174
|
|
175
|
-
VALUE
|
175
|
+
static VALUE
|
176
176
|
nst_field_view(VALUE self, VALUE idx)
|
177
177
|
{
|
178
178
|
VALUE def, type, ofs;
|
@@ -181,14 +181,14 @@ nst_field_view(VALUE self, VALUE idx)
|
|
181
181
|
if (!RTEST(def)) {
|
182
182
|
idx = rb_funcall(idx, rb_intern("to_s"), 0);
|
183
183
|
rb_raise(rb_eTypeError, "Invalid field: '%s' for struct %s",
|
184
|
-
StringValuePtr(idx), rb_class2name(
|
184
|
+
StringValuePtr(idx), rb_class2name(rb_obj_class(self)));
|
185
185
|
}
|
186
186
|
type = RARRAY_AREF(def,1);
|
187
187
|
ofs = RARRAY_AREF(def,2);
|
188
188
|
return na_make_view_struct(self, type, ofs);
|
189
189
|
}
|
190
190
|
|
191
|
-
VALUE
|
191
|
+
static VALUE
|
192
192
|
nst_field(VALUE self, VALUE idx)
|
193
193
|
{
|
194
194
|
VALUE obj;
|
@@ -202,7 +202,7 @@ nst_field(VALUE self, VALUE idx)
|
|
202
202
|
return obj;
|
203
203
|
}
|
204
204
|
|
205
|
-
VALUE
|
205
|
+
static VALUE
|
206
206
|
nst_field_set(VALUE self, VALUE idx, VALUE other)
|
207
207
|
{
|
208
208
|
VALUE obj;
|
@@ -353,7 +353,7 @@ nstruct_add_type(VALUE type, int argc, VALUE *argv, VALUE nst)
|
|
353
353
|
if (rb_obj_is_kind_of(type,cNArray)) {
|
354
354
|
narray_t *na;
|
355
355
|
GetNArray(type,na);
|
356
|
-
type =
|
356
|
+
type = rb_obj_class(type);
|
357
357
|
ndim = na->ndim;
|
358
358
|
shape = na->shape;
|
359
359
|
}
|
@@ -361,7 +361,7 @@ nstruct_add_type(VALUE type, int argc, VALUE *argv, VALUE nst)
|
|
361
361
|
GetNArrayView(type,nt);
|
362
362
|
|
363
363
|
nt->stridx = ALLOC_N(stridx_t,ndim);
|
364
|
-
stride = na_dtype_elmsz(
|
364
|
+
stride = na_dtype_elmsz(rb_obj_class(type));
|
365
365
|
for (j=ndim; j--; ) {
|
366
366
|
SDX_SET_STRIDE(nt->stridx[j], stride);
|
367
367
|
stride *= shape[j];
|
@@ -441,7 +441,7 @@ nst_create_member_views(VALUE self)
|
|
441
441
|
long i, len;
|
442
442
|
narray_view_t *ne;
|
443
443
|
|
444
|
-
defs = nst_definitions(
|
444
|
+
defs = nst_definitions(rb_obj_class(self));
|
445
445
|
len = RARRAY_LEN(defs);
|
446
446
|
types = rb_ary_new2(len);
|
447
447
|
//ofsts = rb_ary_new2(len);
|
@@ -472,7 +472,7 @@ nary_struct_to_a(VALUE self)
|
|
472
472
|
|
473
473
|
|
474
474
|
|
475
|
-
|
475
|
+
/*
|
476
476
|
static size_t
|
477
477
|
check_array(VALUE item) {
|
478
478
|
narray_t *na;
|
@@ -490,7 +490,9 @@ check_array(VALUE item) {
|
|
490
490
|
}
|
491
491
|
return 0;
|
492
492
|
}
|
493
|
+
*/
|
493
494
|
|
495
|
+
/*
|
494
496
|
static size_t
|
495
497
|
check_array_1d(VALUE item, size_t size) {
|
496
498
|
narray_t *na;
|
@@ -518,7 +520,9 @@ check_array_1d(VALUE item, size_t size) {
|
|
518
520
|
}
|
519
521
|
return 0;
|
520
522
|
}
|
523
|
+
*/
|
521
524
|
|
525
|
+
/*
|
522
526
|
VALUE
|
523
527
|
nst_check_compatibility(VALUE nst, VALUE ary)
|
524
528
|
{
|
@@ -527,7 +531,7 @@ nst_check_compatibility(VALUE nst, VALUE ary)
|
|
527
531
|
narray_t *nt;
|
528
532
|
|
529
533
|
if (TYPE(ary) != T_ARRAY) {
|
530
|
-
if (nst==
|
534
|
+
if (nst==rb_obj_class(ary)) { // same Struct
|
531
535
|
return Qtrue;
|
532
536
|
}
|
533
537
|
return Qfalse;
|
@@ -579,7 +583,7 @@ nst_check_compatibility(VALUE nst, VALUE ary)
|
|
579
583
|
}
|
580
584
|
return Qtrue;
|
581
585
|
}
|
582
|
-
|
586
|
+
*/
|
583
587
|
|
584
588
|
|
585
589
|
VALUE na_ary_composition_for_struct(VALUE nstruct, VALUE ary);
|
@@ -600,7 +604,7 @@ iter_nstruct_from_a(na_loop_t *const lp)
|
|
600
604
|
|
601
605
|
len = RARRAY_LEN(types);
|
602
606
|
ary = lp->args[1].value;
|
603
|
-
//rb_p(
|
607
|
+
//rb_p(rb_obj_class(ary));rb_p(ary);
|
604
608
|
|
605
609
|
for (i=0; i<len; i++) {
|
606
610
|
def = RARRAY_AREF(defs,i);
|
@@ -629,7 +633,7 @@ nary_struct_cast_array(VALUE klass, VALUE rary)
|
|
629
633
|
ndfunc_t ndf = {iter_nstruct_from_a, NO_LOOP, 3, 0, ain, 0};
|
630
634
|
|
631
635
|
//fprintf(stderr,"rary:");rb_p(rary);
|
632
|
-
//fprintf(stderr,"class_of(rary):");rb_p(
|
636
|
+
//fprintf(stderr,"class_of(rary):");rb_p(rb_obj_class(rary));
|
633
637
|
|
634
638
|
//vnc = na_ary_composition_for_struct(klass, rary);
|
635
639
|
//Data_Get_Struct(vnc, na_compose_t, nc);
|
@@ -715,7 +719,7 @@ nary_struct_store_struct(VALUE self, VALUE obj)
|
|
715
719
|
static inline VALUE
|
716
720
|
nary_struct_store_array(VALUE self, VALUE obj)
|
717
721
|
{
|
718
|
-
return nary_struct_store_struct(self, nary_struct_cast_array(
|
722
|
+
return nary_struct_store_struct(self, nary_struct_cast_array(rb_obj_class(self),obj));
|
719
723
|
}
|
720
724
|
|
721
725
|
/*
|
@@ -731,13 +735,13 @@ nary_struct_store(VALUE self, VALUE obj)
|
|
731
735
|
nary_struct_store_array(self,obj);
|
732
736
|
return self;
|
733
737
|
}
|
734
|
-
if (
|
738
|
+
if (rb_obj_class(self) == rb_obj_class(obj)) {
|
735
739
|
nary_struct_store_struct(self,obj);
|
736
740
|
return self;
|
737
741
|
}
|
738
742
|
rb_raise(nary_eCastError, "unknown conversion from %s to %s",
|
739
|
-
rb_class2name(
|
740
|
-
rb_class2name(
|
743
|
+
rb_class2name(rb_obj_class(obj)),
|
744
|
+
rb_class2name(rb_obj_class(self)));
|
741
745
|
return self;
|
742
746
|
}
|
743
747
|
|
@@ -785,7 +789,7 @@ iter_struct_inspect(char *ptr, size_t pos, VALUE opt)
|
|
785
789
|
@overload inspect
|
786
790
|
@return [String]
|
787
791
|
*/
|
788
|
-
VALUE
|
792
|
+
static VALUE
|
789
793
|
nary_struct_inspect(VALUE ary)
|
790
794
|
{
|
791
795
|
VALUE opt;
|