numo-narray 0.9.0.7 → 0.9.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/numo/narray/gen/def/bit.rb +1 -0
- data/ext/numo/narray/gen/def/dcomplex.rb +1 -0
- data/ext/numo/narray/gen/def/dfloat.rb +1 -0
- data/ext/numo/narray/gen/def/int16.rb +1 -0
- data/ext/numo/narray/gen/def/int32.rb +1 -0
- data/ext/numo/narray/gen/def/int64.rb +1 -0
- data/ext/numo/narray/gen/def/int8.rb +1 -0
- data/ext/numo/narray/gen/def/robject.rb +1 -0
- data/ext/numo/narray/gen/def/scomplex.rb +1 -0
- data/ext/numo/narray/gen/def/sfloat.rb +1 -0
- data/ext/numo/narray/gen/def/uint16.rb +1 -0
- data/ext/numo/narray/gen/def/uint32.rb +1 -0
- data/ext/numo/narray/gen/def/uint64.rb +1 -0
- data/ext/numo/narray/gen/def/uint8.rb +1 -0
- data/ext/numo/narray/gen/tmpl/accum_binary.c +19 -15
- data/ext/numo/narray/gen/tmpl/binary.c +50 -10
- data/ext/numo/narray/gen/tmpl/sort_index.c +6 -1
- data/ext/numo/narray/gen/tmpl/unary.c +29 -6
- data/ext/numo/narray/index.c +13 -12
- data/ext/numo/narray/narray.c +2 -0
- data/ext/numo/narray/ndloop.c +22 -21
- data/ext/numo/narray/numo/narray.h +3 -2
- data/ext/numo/narray/numo/template.h +14 -1
- data/ext/numo/narray/numo/types/complex_macro.h +21 -19
- data/ext/numo/narray/numo/types/int16.h +5 -2
- data/ext/numo/narray/numo/types/int32.h +5 -2
- data/ext/numo/narray/numo/types/int64.h +5 -2
- data/ext/numo/narray/numo/types/int8.h +5 -2
- data/ext/numo/narray/numo/types/int_macro.h +7 -1
- data/ext/numo/narray/numo/types/real_accum.h +37 -36
- data/ext/numo/narray/numo/types/uint16.h +5 -2
- data/ext/numo/narray/numo/types/uint32.h +5 -2
- data/ext/numo/narray/numo/types/uint64.h +5 -2
- data/ext/numo/narray/numo/types/uint8.h +5 -2
- data/spec/narray_spec.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed3756dc41da4cc17c42eb3d74b452c496ca2e69
|
4
|
+
data.tar.gz: 7c65512df44bde3bb57d6989ca5f0394cb7663cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 805d2bf586831a5ffac8e75131bf085e5ed60f7cd72721ca022d94b51686e7771146f6063f96df89637ccbac8edd617356b5b3e8be3bed5afb57ceb08e696d3b
|
7
|
+
data.tar.gz: 8437d1379938785bdbe1a9f3b8421efcecb16987cf4107350b5dcec3673c99f54df3e6fbbad0a49f2eaa2fc2752f73d956b1c61e9f393ec364b8758a4d8b87c8
|
@@ -1,27 +1,31 @@
|
|
1
|
-
|
1
|
+
//<% (is_float ? ["","_nan"] : [""]).each do |j| %>
|
2
2
|
static void
|
3
3
|
<%=c_iter%><%=j%>(na_loop_t *const lp)
|
4
4
|
{
|
5
|
-
size_t i;
|
5
|
+
size_t i, n;
|
6
6
|
char *p1, *p2, *p3;
|
7
7
|
ssize_t s1, s2, s3;
|
8
|
-
dtype x, y, z;
|
9
8
|
|
10
|
-
INIT_COUNTER(lp,
|
9
|
+
INIT_COUNTER(lp, n);
|
11
10
|
INIT_PTR(lp, 0, p1, s1);
|
12
11
|
INIT_PTR(lp, 1, p2, s2);
|
13
12
|
INIT_PTR(lp, 2, p3, s3);
|
13
|
+
|
14
14
|
if (s3==0) {
|
15
|
+
dtype z;
|
15
16
|
// Reduce loop
|
16
17
|
GET_DATA(p3,dtype,z);
|
17
|
-
for (; i
|
18
|
+
for (i=0; i<n; i++) {
|
19
|
+
dtype x, y;
|
18
20
|
GET_DATA_STRIDE(p1,s1,dtype,x);
|
19
21
|
GET_DATA_STRIDE(p2,s2,dtype,y);
|
20
22
|
m_<%=name%><%=j%>(x,y,z);
|
21
23
|
}
|
22
24
|
SET_DATA(p3,dtype,z);
|
25
|
+
return;
|
23
26
|
} else {
|
24
|
-
for (; i
|
27
|
+
for (i=0; i<n; i++) {
|
28
|
+
dtype x, y, z;
|
25
29
|
GET_DATA_STRIDE(p1,s1,dtype,x);
|
26
30
|
GET_DATA_STRIDE(p2,s2,dtype,y);
|
27
31
|
GET_DATA(p3,dtype,z);
|
@@ -30,7 +34,7 @@ static void
|
|
30
34
|
}
|
31
35
|
}
|
32
36
|
}
|
33
|
-
|
37
|
+
//<% end %>
|
34
38
|
|
35
39
|
static VALUE
|
36
40
|
<%=c_func%>_self(int argc, VALUE *argv, VALUE self)
|
@@ -47,11 +51,11 @@ static VALUE
|
|
47
51
|
// should fix below: [self.ndim,other.ndim].max or?
|
48
52
|
naryv[0] = self;
|
49
53
|
naryv[1] = argv[0];
|
50
|
-
|
54
|
+
//<% if is_float %>
|
51
55
|
reduce = na_reduce_dimension(argc-1, argv+1, 2, naryv, &ndf, <%=c_iter%>_nan);
|
52
|
-
|
56
|
+
//<% else %>
|
53
57
|
reduce = na_reduce_dimension(argc-1, argv+1, 2, naryv, &ndf, 0);
|
54
|
-
|
58
|
+
//<% end %>
|
55
59
|
|
56
60
|
v = na_ndloop(&ndf, 4, self, argv[0], reduce, m_<%=name%>_init);
|
57
61
|
return <%=type_name%>_extract(v);
|
@@ -76,15 +80,15 @@ static VALUE
|
|
76
80
|
static VALUE
|
77
81
|
<%=c_func(-1)%>(int argc, VALUE *argv, VALUE self)
|
78
82
|
{
|
79
|
-
|
83
|
+
//<% if !is_object %>
|
80
84
|
VALUE klass, v;
|
81
|
-
|
85
|
+
//<% end %>
|
82
86
|
if (argc < 1) {
|
83
87
|
rb_raise(rb_eArgError,"wrong number of arguments (%d for >=1)",argc);
|
84
88
|
}
|
85
|
-
|
89
|
+
//<% if is_object %>
|
86
90
|
return <%=c_func%>_self(argc, argv, self);
|
87
|
-
|
91
|
+
//<% else %>
|
88
92
|
klass = na_upcast(CLASS_OF(self),CLASS_OF(argv[0]));
|
89
93
|
if (klass==cT) {
|
90
94
|
return <%=c_func%>_self(argc, argv, self);
|
@@ -92,5 +96,5 @@ static VALUE
|
|
92
96
|
v = rb_funcall(klass, id_cast, 1, self);
|
93
97
|
return rb_funcall2(v, rb_intern("<%=name%>"), argc, argv);
|
94
98
|
}
|
95
|
-
|
99
|
+
//<% end %>
|
96
100
|
}
|
@@ -1,27 +1,66 @@
|
|
1
|
+
<% if is_int and %w[div mod divmod].include? name %>
|
2
|
+
#define check_intdivzero(y) \
|
3
|
+
if ((y)==0) { \
|
4
|
+
lp->err_type = rb_eZeroDivError; \
|
5
|
+
return; \
|
6
|
+
}
|
7
|
+
<% else %>
|
8
|
+
#define check_intdivzero(y) {}
|
9
|
+
<% end %>
|
10
|
+
|
1
11
|
static void
|
2
12
|
<%=c_iter%>(na_loop_t *const lp)
|
3
13
|
{
|
4
14
|
size_t i, n;
|
5
15
|
char *p1, *p2, *p3;
|
6
16
|
ssize_t s1, s2, s3;
|
7
|
-
|
17
|
+
|
8
18
|
INIT_COUNTER(lp, n);
|
9
19
|
INIT_PTR(lp, 0, p1, s1);
|
10
20
|
INIT_PTR(lp, 1, p2, s2);
|
11
21
|
INIT_PTR(lp, 2, p3, s3);
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
22
|
+
|
23
|
+
//<% if need_align %>
|
24
|
+
if (is_aligned(p1,sizeof(dtype)) &&
|
25
|
+
is_aligned(p2,sizeof(dtype)) &&
|
26
|
+
is_aligned(p3,sizeof(dtype)) ) {
|
27
|
+
|
28
|
+
if (s1 == sizeof(dtype) &&
|
29
|
+
s2 == sizeof(dtype) &&
|
30
|
+
s3 == sizeof(dtype) ) {
|
31
|
+
|
32
|
+
for (i=0; i<n; i++) {
|
33
|
+
check_intdivzero(*(dtype*)p2);
|
34
|
+
((dtype*)p3)[i] = m_<%=name%>(((dtype*)p1)[i],((dtype*)p2)[i]);
|
35
|
+
}
|
18
36
|
return;
|
19
37
|
}
|
20
|
-
|
21
|
-
|
22
|
-
|
38
|
+
if (is_aligned_step(s1,sizeof(dtype)) &&
|
39
|
+
is_aligned_step(s2,sizeof(dtype)) &&
|
40
|
+
is_aligned_step(s3,sizeof(dtype)) ) {
|
41
|
+
//<% end %>
|
42
|
+
for (i=0; i<n; i++) {
|
43
|
+
check_intdivzero(*(dtype*)p2);
|
44
|
+
*(dtype*)p3 = m_<%=name%>(*(dtype*)p1,*(dtype*)p2);
|
45
|
+
p1 += s1;
|
46
|
+
p2 += s2;
|
47
|
+
p3 += s3;
|
48
|
+
}
|
49
|
+
return;
|
50
|
+
//<% if need_align %>
|
51
|
+
}
|
23
52
|
}
|
53
|
+
for (i=0; i<n; i++) {
|
54
|
+
dtype x, y, z;
|
55
|
+
GET_DATA_STRIDE(p1,s1,dtype,x);
|
56
|
+
GET_DATA_STRIDE(p2,s2,dtype,y);
|
57
|
+
check_intdivzero(y);
|
58
|
+
z = m_<%=name%>(x,y);
|
59
|
+
SET_DATA_STRIDE(p3,s3,dtype,z);
|
60
|
+
}
|
61
|
+
//<% end %>
|
24
62
|
}
|
63
|
+
#undef check_intdivzero
|
25
64
|
|
26
65
|
static VALUE
|
27
66
|
<%=c_func%>_self(VALUE self, VALUE other)
|
@@ -46,6 +85,7 @@ static VALUE
|
|
46
85
|
return <%=c_func%>_self(self, other);
|
47
86
|
<% else %>
|
48
87
|
VALUE klass, v;
|
88
|
+
|
49
89
|
klass = na_upcast(CLASS_OF(self),CLASS_OF(other));
|
50
90
|
if (klass==cT) {
|
51
91
|
return <%=c_func%>_self(self, other);
|
@@ -18,6 +18,11 @@ static void
|
|
18
18
|
|
19
19
|
//printf("(ptr=%lx, d_ptr=%lx,d_step=%ld, i_ptr=%lx,i_step=%ld, o_ptr=%lx,o_step=%ld)\n",(size_t)ptr,(size_t)d_ptr,(ssize_t)d_step,(size_t)i_ptr,(ssize_t)i_step,(size_t)o_ptr,(ssize_t)o_step);
|
20
20
|
|
21
|
+
if (n==1) {
|
22
|
+
*(idx_t*)o_ptr = *(idx_t*)(i_ptr);
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
|
21
26
|
for (i=0; i<n; i++) {
|
22
27
|
ptr[i] = d_ptr + d_step * i;
|
23
28
|
//printf("(%ld,%.3f)",i,*(double*)ptr[i]);
|
@@ -94,7 +99,7 @@ static VALUE
|
|
94
99
|
}
|
95
100
|
rb_funcall(idx, rb_intern("seq"), 0);
|
96
101
|
|
97
|
-
size = na->size*sizeof(void*);
|
102
|
+
size = na->size*sizeof(void*); // max capa
|
98
103
|
buf = rb_alloc_tmp_buffer(&tmp, size);
|
99
104
|
res = na_ndloop3(&ndf, buf, 3, self, idx, reduce);
|
100
105
|
rb_free_tmp_buffer(&tmp);
|
@@ -1,25 +1,25 @@
|
|
1
1
|
static void
|
2
2
|
<%=c_iter%>(na_loop_t *const lp)
|
3
3
|
{
|
4
|
-
size_t i;
|
4
|
+
size_t i, n;
|
5
5
|
char *p1, *p2;
|
6
6
|
ssize_t s1, s2;
|
7
7
|
size_t *idx1, *idx2;
|
8
8
|
dtype x;
|
9
9
|
|
10
|
-
INIT_COUNTER(lp,
|
10
|
+
INIT_COUNTER(lp, n);
|
11
11
|
INIT_PTR_IDX(lp, 0, p1, s1, idx1);
|
12
12
|
INIT_PTR_IDX(lp, 1, p2, s2, idx2);
|
13
13
|
|
14
14
|
if (idx1) {
|
15
15
|
if (idx2) {
|
16
|
-
for (; i
|
16
|
+
for (i=0; i<n; i++) {
|
17
17
|
GET_DATA_INDEX(p1,idx1,dtype,x);
|
18
18
|
x = m_<%=name%>(x);
|
19
19
|
SET_DATA_INDEX(p2,idx2,dtype,x);
|
20
20
|
}
|
21
21
|
} else {
|
22
|
-
for (; i
|
22
|
+
for (i=0; i<n; i++) {
|
23
23
|
GET_DATA_INDEX(p1,idx1,dtype,x);
|
24
24
|
x = m_<%=name%>(x);
|
25
25
|
SET_DATA_STRIDE(p2,s2,dtype,x);
|
@@ -27,17 +27,40 @@ static void
|
|
27
27
|
}
|
28
28
|
} else {
|
29
29
|
if (idx2) {
|
30
|
-
for (; i
|
30
|
+
for (i=0; i<n; i++) {
|
31
31
|
GET_DATA_STRIDE(p1,s1,dtype,x);
|
32
32
|
x = m_<%=name%>(x);
|
33
33
|
SET_DATA_INDEX(p2,idx2,dtype,x);
|
34
34
|
}
|
35
35
|
} else {
|
36
|
-
|
36
|
+
//<% if need_align %>
|
37
|
+
if (is_aligned(p1,sizeof(dtype)) &&
|
38
|
+
is_aligned(p2,sizeof(dtype)) ) {
|
39
|
+
if (s1 == sizeof(dtype) &&
|
40
|
+
s2 == sizeof(dtype) ) {
|
41
|
+
for (i=0; i<n; i++) {
|
42
|
+
((dtype*)p2)[i] = m_<%=name%>(((dtype*)p1)[i]);
|
43
|
+
}
|
44
|
+
return;
|
45
|
+
}
|
46
|
+
if (is_aligned_step(s1,sizeof(dtype)) &&
|
47
|
+
is_aligned_step(s2,sizeof(dtype)) ) {
|
48
|
+
//<% end %>
|
49
|
+
for (i=0; i<n; i++) {
|
50
|
+
*(dtype*)p2 = m_<%=name%>(*(dtype*)p1);
|
51
|
+
p1 += s1;
|
52
|
+
p2 += s2;
|
53
|
+
}
|
54
|
+
return;
|
55
|
+
//<% if need_align %>
|
56
|
+
}
|
57
|
+
}
|
58
|
+
for (i=0; i<n; i++) {
|
37
59
|
GET_DATA_STRIDE(p1,s1,dtype,x);
|
38
60
|
x = m_<%=name%>(x);
|
39
61
|
SET_DATA_STRIDE(p2,s2,dtype,x);
|
40
62
|
}
|
63
|
+
//<% end %>
|
41
64
|
}
|
42
65
|
}
|
43
66
|
}
|
data/ext/numo/narray/index.c
CHANGED
@@ -173,26 +173,27 @@ static void
|
|
173
173
|
na_parse_range(VALUE range, ssize_t step, int orig_dim, ssize_t size, na_index_arg_t *q)
|
174
174
|
{
|
175
175
|
int n;
|
176
|
-
|
176
|
+
VALUE excl_end;
|
177
|
+
ssize_t beg, end, beg_orig, end_orig;
|
178
|
+
const char *dot = "..", *edot = "...";
|
177
179
|
|
178
|
-
beg =
|
179
|
-
if (beg<0) {
|
180
|
+
beg = beg_orig = NUM2SSIZET(rb_funcall(range,id_beg,0));
|
181
|
+
if (beg < 0) {
|
180
182
|
beg += size;
|
181
183
|
}
|
182
|
-
|
183
|
-
end
|
184
|
-
if (end<0) {
|
184
|
+
end = end_orig = NUM2SSIZET(rb_funcall(range,id_end,0));
|
185
|
+
if (end < 0) {
|
185
186
|
end += size;
|
186
187
|
}
|
187
|
-
|
188
|
-
if (RTEST(
|
188
|
+
excl_end = rb_funcall(range,id_exclude_end,0);
|
189
|
+
if (RTEST(excl_end)) {
|
189
190
|
end--;
|
191
|
+
dot = edot;
|
190
192
|
}
|
191
|
-
if (beg <
|
192
|
-
end < -size || end >= size) {
|
193
|
+
if (beg < 0 || beg >= size || end < 0 || end >= size) {
|
193
194
|
rb_raise(rb_eRangeError,
|
194
|
-
"
|
195
|
-
|
195
|
+
"%"SZF"d%s%"SZF"d is out of range for size=%"SZF"d",
|
196
|
+
beg_orig, dot, end_orig, size);
|
196
197
|
}
|
197
198
|
n = (end-beg)/step+1;
|
198
199
|
if (n<0) n=0;
|
data/ext/numo/narray/narray.c
CHANGED
@@ -14,6 +14,7 @@ VALUE nary_eCastError;
|
|
14
14
|
VALUE nary_eShapeError;
|
15
15
|
VALUE nary_eOperationError;
|
16
16
|
VALUE nary_eDimensionError;
|
17
|
+
VALUE nary_eValueError;
|
17
18
|
|
18
19
|
static ID id_contiguous_stride;
|
19
20
|
static ID id_allocate;
|
@@ -1851,6 +1852,7 @@ Init_narray()
|
|
1851
1852
|
nary_eShapeError = rb_define_class_under(cNArray, "ShapeError", rb_eStandardError);
|
1852
1853
|
nary_eOperationError = rb_define_class_under(cNArray, "OperationError", rb_eStandardError);
|
1853
1854
|
nary_eDimensionError = rb_define_class_under(cNArray, "DimensionError", rb_eStandardError);
|
1855
|
+
nary_eValueError = rb_define_class_under(cNArray, "ValueError", rb_eStandardError);
|
1854
1856
|
|
1855
1857
|
rb_define_singleton_method(cNArray, "debug=", na_debug_set, 1);
|
1856
1858
|
rb_define_singleton_method(cNArray, "profile", na_profile, 0);
|
data/ext/numo/narray/ndloop.c
CHANGED
@@ -43,7 +43,7 @@ typedef struct NA_MD_LOOP {
|
|
43
43
|
int nin;
|
44
44
|
int ndim; // n of total dimention
|
45
45
|
unsigned int copy_flag; // set i-th bit if i-th arg is cast
|
46
|
-
|
46
|
+
void *ptr; // memory for n
|
47
47
|
na_loop_iter_t *iter_ptr; // memory for iter
|
48
48
|
size_t *n; // n of elements for each dim
|
49
49
|
na_loop_t user; // loop in user function
|
@@ -337,6 +337,9 @@ ndloop_alloc(na_md_loop_t *lp, ndfunc_t *nf, VALUE args,
|
|
337
337
|
int narg;
|
338
338
|
int max_nd;
|
339
339
|
|
340
|
+
char *buf;
|
341
|
+
size_t n1, n2, n3, n4, n5;
|
342
|
+
|
340
343
|
long args_len;
|
341
344
|
|
342
345
|
na_loop_iter_t *iter;
|
@@ -364,23 +367,28 @@ ndloop_alloc(na_md_loop_t *lp, ndfunc_t *nf, VALUE args,
|
|
364
367
|
lp->writeback = -1;
|
365
368
|
lp->init_aidx = -1;
|
366
369
|
|
367
|
-
lp->
|
368
|
-
lp->n_ptr = NULL;
|
369
|
-
lp->xargs = NULL;
|
370
|
-
lp->user.args = NULL;
|
370
|
+
lp->ptr = NULL;
|
371
371
|
lp->user.n = NULL;
|
372
|
-
lp->iter_ptr = NULL;
|
373
|
-
lp->trans_map = NULL;
|
374
372
|
|
375
373
|
ndloop_find_max_dimension(lp, nf, args);
|
376
374
|
narg = lp->nin + nf->nout;
|
377
375
|
max_nd = lp->ndim + lp->user.ndim;
|
378
376
|
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
377
|
+
n1 = sizeof(size_t)*(max_nd+1);
|
378
|
+
n2 = sizeof(na_loop_xargs_t)*narg;
|
379
|
+
n2 = ((n2-1)/8+1)*8;
|
380
|
+
n3 = sizeof(na_loop_args_t)*narg;
|
381
|
+
n3 = ((n3-1)/8+1)*8;
|
382
|
+
n4 = sizeof(na_loop_iter_t)*narg*(max_nd+1);
|
383
|
+
n4 = ((n4-1)/8+1)*8;
|
384
|
+
n5 = sizeof(int)*(max_nd+1);
|
385
|
+
|
386
|
+
lp->ptr = buf = (char*)xmalloc(n1+n2+n3+n4+n5);
|
387
|
+
lp->n = (size_t*)buf; buf+=n1;
|
388
|
+
lp->xargs = (na_loop_xargs_t*)buf; buf+=n2;
|
389
|
+
lp->user.args = (na_loop_args_t*)buf; buf+=n3;
|
390
|
+
lp->iter_ptr = iter = (na_loop_iter_t*)buf; buf+=n4;
|
391
|
+
lp->trans_map = (int*)buf;
|
384
392
|
|
385
393
|
for (j=0; j<narg; j++) {
|
386
394
|
LARG(lp,j).value = Qnil;
|
@@ -389,7 +397,7 @@ ndloop_alloc(na_md_loop_t *lp, ndfunc_t *nf, VALUE args,
|
|
389
397
|
LARG(lp,j).ndim = 0;
|
390
398
|
lp->xargs[j].iter = &(iter[(max_nd+1)*j]);
|
391
399
|
lp->xargs[j].bufcp = NULL;
|
392
|
-
lp->xargs[j].flag = (j<
|
400
|
+
lp->xargs[j].flag = (j<lp->nin) ? NDL_READ : NDL_WRITE;
|
393
401
|
lp->xargs[j].free_user_iter = 0;
|
394
402
|
}
|
395
403
|
|
@@ -406,7 +414,6 @@ ndloop_alloc(na_md_loop_t *lp, ndfunc_t *nf, VALUE args,
|
|
406
414
|
// array loop
|
407
415
|
// [*,+,*,+,*] => [*,*,*,+,+]
|
408
416
|
// trans_map=[0,3,1,4,2] <= [0,1,2,3,4]
|
409
|
-
lp->trans_map = ALLOC_N(int, max_nd+1);
|
410
417
|
if (NDF_TEST(nf,NDF_FLAT_REDUCE) && RTEST(lp->reduce)) {
|
411
418
|
trans_dim = 0;
|
412
419
|
for (i=0; i<max_nd; i++) {
|
@@ -450,7 +457,6 @@ ndloop_release(VALUE vlp)
|
|
450
457
|
na_release_lock(v);
|
451
458
|
}
|
452
459
|
}
|
453
|
-
//xfree(lp);
|
454
460
|
for (j=0; j<lp->narg; j++) {
|
455
461
|
//printf("lp->xargs[%d].bufcp=%lx\n",j,(size_t)(lp->xargs[j].bufcp));
|
456
462
|
if (lp->xargs[j].bufcp) {
|
@@ -463,12 +469,7 @@ ndloop_release(VALUE vlp)
|
|
463
469
|
}
|
464
470
|
}
|
465
471
|
}
|
466
|
-
|
467
|
-
xfree(lp->xargs);
|
468
|
-
xfree(lp->iter_ptr);
|
469
|
-
xfree(lp->user.args);
|
470
|
-
xfree(lp->n_ptr);
|
471
|
-
//rb_gc_force_recycle(vlp);
|
472
|
+
xfree(lp->ptr);
|
472
473
|
return Qnil;
|
473
474
|
}
|
474
475
|
|
@@ -13,8 +13,8 @@ extern "C" {
|
|
13
13
|
#endif
|
14
14
|
#endif
|
15
15
|
|
16
|
-
#define NARRAY_VERSION "0.9.0.
|
17
|
-
#define NARRAY_VERSION_CODE
|
16
|
+
#define NARRAY_VERSION "0.9.0.8"
|
17
|
+
#define NARRAY_VERSION_CODE 908
|
18
18
|
|
19
19
|
#include <math.h>
|
20
20
|
#include "numo/compat.h"
|
@@ -133,6 +133,7 @@ extern VALUE nary_eCastError;
|
|
133
133
|
extern VALUE nary_eShapeError;
|
134
134
|
extern VALUE nary_eOperationError;
|
135
135
|
extern VALUE nary_eDimensionError;
|
136
|
+
extern VALUE nary_eValueError;
|
136
137
|
extern const rb_data_type_t na_data_type;
|
137
138
|
|
138
139
|
//EXTERN const int na_sizeof[NA_NTYPES+1];
|
@@ -133,4 +133,17 @@
|
|
133
133
|
}
|
134
134
|
// val -> val&1 ??
|
135
135
|
|
136
|
-
|
136
|
+
static inline int
|
137
|
+
is_aligned(const void *ptr, const size_t alignment)
|
138
|
+
{
|
139
|
+
return ((size_t)(ptr) & ((alignment)-1)) == 0;
|
140
|
+
}
|
141
|
+
|
142
|
+
static inline int
|
143
|
+
is_aligned_step(const ssize_t step, const size_t alignment)
|
144
|
+
{
|
145
|
+
return ((step) & ((alignment)-1)) == 0;
|
146
|
+
}
|
147
|
+
|
148
|
+
|
149
|
+
#endif /* ifndef TEMPLATE_H */
|
@@ -117,26 +117,28 @@ static inline dtype c_from_dcomplex(dcomplex x) {
|
|
117
117
|
#define m_sum_init INT2FIX(0)
|
118
118
|
#define m_mulsum_init INT2FIX(0)
|
119
119
|
|
120
|
+
#define not_nan(x) (REAL(x)==REAL(x) && IMAG(x)==IMAG(x))
|
121
|
+
|
120
122
|
#define m_mulsum(x,y,z) {z = m_add(m_mul(x,y),z);}
|
121
|
-
#define m_mulsum_nan(x,y,z) {
|
122
|
-
if(
|
123
|
-
z = m_add(m_mul(x,y),z);
|
123
|
+
#define m_mulsum_nan(x,y,z) { \
|
124
|
+
if(not_nan(x) && not_nan(y)) { \
|
125
|
+
z = m_add(m_mul(x,y),z); \
|
124
126
|
}}
|
125
127
|
|
126
128
|
#define m_cumsum(x,y) {(x)=m_add(x,y);}
|
127
|
-
#define m_cumsum_nan(x,y) {
|
128
|
-
if (
|
129
|
-
(x) = (y);
|
130
|
-
} else if (
|
131
|
-
(x) = m_add(x,y);
|
129
|
+
#define m_cumsum_nan(x,y) { \
|
130
|
+
if (!not_nan(x)) { \
|
131
|
+
(x) = (y); \
|
132
|
+
} else if (not_nan(y)) { \
|
133
|
+
(x) = m_add(x,y); \
|
132
134
|
}}
|
133
135
|
|
134
136
|
#define m_cumprod(x,y) {(x)=m_mul(x,y);}
|
135
|
-
#define m_cumprod_nan(x,y) {
|
136
|
-
if (
|
137
|
-
(x) = (y);
|
138
|
-
} else if (
|
139
|
-
(x) = m_mul(x,y);
|
137
|
+
#define m_cumprod_nan(x,y) { \
|
138
|
+
if (!not_nan(x)) { \
|
139
|
+
(x) = (y); \
|
140
|
+
} else if (not_nan(y)) { \
|
141
|
+
(x) = m_mul(x,y); \
|
140
142
|
}}
|
141
143
|
|
142
144
|
static inline dtype f_sum(size_t n, char *p, ssize_t stride)
|
@@ -161,7 +163,7 @@ static inline dtype f_sum_nan(size_t n, char *p, ssize_t stride)
|
|
161
163
|
y = c_zero();
|
162
164
|
for (; i--;) {
|
163
165
|
x = *(dtype*)p;
|
164
|
-
if (
|
166
|
+
if (not_nan(x)) {
|
165
167
|
y = c_add(x,y);
|
166
168
|
}
|
167
169
|
p += stride;
|
@@ -205,7 +207,7 @@ static inline dtype f_kahan_sum_nan(size_t n, char *p, ssize_t stride)
|
|
205
207
|
r = c_zero();
|
206
208
|
for (; i--;) {
|
207
209
|
x = *(dtype*)p;
|
208
|
-
if (
|
210
|
+
if (not_nan(x)) {
|
209
211
|
if (fabs(REAL(x)) > fabs(REAL(y))) {
|
210
212
|
double z=REAL(x); REAL(x)=REAL(y); REAL(y)=z;
|
211
213
|
}
|
@@ -245,7 +247,7 @@ static inline dtype f_prod_nan(size_t n, char *p, ssize_t stride)
|
|
245
247
|
y = c_one();
|
246
248
|
for (; i--;) {
|
247
249
|
x = *(dtype*)p;
|
248
|
-
if (
|
250
|
+
if (not_nan(x)) {
|
249
251
|
y = c_mul(x,y);
|
250
252
|
}
|
251
253
|
p += stride;
|
@@ -278,7 +280,7 @@ static inline dtype f_mean_nan(size_t n, char *p, ssize_t stride)
|
|
278
280
|
y = c_zero();
|
279
281
|
for (; i--;) {
|
280
282
|
x = *(dtype*)p;
|
281
|
-
if (
|
283
|
+
if (not_nan(x)) {
|
282
284
|
y = c_add(x,y);
|
283
285
|
count++;
|
284
286
|
}
|
@@ -316,7 +318,7 @@ static inline rtype f_var_nan(size_t n, char *p, ssize_t stride)
|
|
316
318
|
|
317
319
|
for (; i--;) {
|
318
320
|
x = *(dtype*)p;
|
319
|
-
if (
|
321
|
+
if (not_nan(x)) {
|
320
322
|
y += c_abs_square(c_sub(x,m));
|
321
323
|
count++;
|
322
324
|
}
|
@@ -360,7 +362,7 @@ static inline rtype f_rms_nan(size_t n, char *p, ssize_t stride)
|
|
360
362
|
|
361
363
|
for (; i--;) {
|
362
364
|
x = *(dtype*)p;
|
363
|
-
if (
|
365
|
+
if (not_nan(x)) {
|
364
366
|
y += c_abs_square(x);
|
365
367
|
count++;
|
366
368
|
}
|
@@ -8,8 +8,6 @@ typedef int16_t rtype;
|
|
8
8
|
#define m_extract(x) INT2NUM((int)*(dtype*)(x))
|
9
9
|
#define m_sprintf(s,x) sprintf(s,"%d",(int)(x))
|
10
10
|
|
11
|
-
#include "int_macro.h"
|
12
|
-
|
13
11
|
#ifndef INT16_MIN
|
14
12
|
#define INT16_MIN (-32767-1)
|
15
13
|
#endif
|
@@ -17,5 +15,10 @@ typedef int16_t rtype;
|
|
17
15
|
#define INT16_MAX (32767)
|
18
16
|
#endif
|
19
17
|
|
18
|
+
#define DATA_MIN INT16_MIN
|
19
|
+
#define DATA_MAX INT16_MAX
|
20
|
+
|
20
21
|
#define M_MIN m_data_to_num(INT16_MIN)
|
21
22
|
#define M_MAX m_data_to_num(INT16_MAX)
|
23
|
+
|
24
|
+
#include "int_macro.h"
|
@@ -8,8 +8,6 @@ typedef int32_t rtype;
|
|
8
8
|
#define m_extract(x) INT322NUM((int32_t)*(dtype*)(x))
|
9
9
|
#define m_sprintf(s,x) sprintf(s,"%"PRId32,(int32_t)(x))
|
10
10
|
|
11
|
-
#include "int_macro.h"
|
12
|
-
|
13
11
|
#ifndef INT32_MIN
|
14
12
|
#define INT32_MIN (-2147483647-1)
|
15
13
|
#endif
|
@@ -17,5 +15,10 @@ typedef int32_t rtype;
|
|
17
15
|
#define INT32_MAX (2147483647)
|
18
16
|
#endif
|
19
17
|
|
18
|
+
#define DATA_MIN INT32_MIN
|
19
|
+
#define DATA_MAX INT32_MAX
|
20
|
+
|
20
21
|
#define M_MIN m_data_to_num(INT32_MIN)
|
21
22
|
#define M_MAX m_data_to_num(INT32_MAX)
|
23
|
+
|
24
|
+
#include "int_macro.h"
|
@@ -8,8 +8,6 @@ typedef int64_t rtype;
|
|
8
8
|
#define m_extract(x) INT642NUM((int64_t)*(dtype*)(x))
|
9
9
|
#define m_sprintf(s,x) sprintf(s,"%"PRId64,(int64_t)(x))
|
10
10
|
|
11
|
-
#include "int_macro.h"
|
12
|
-
|
13
11
|
#ifndef INT64_MIN
|
14
12
|
#define INT64_MIN (-9223372036854775807l-1)
|
15
13
|
#endif
|
@@ -17,5 +15,10 @@ typedef int64_t rtype;
|
|
17
15
|
#define INT64_MAX (9223372036854775807l)
|
18
16
|
#endif
|
19
17
|
|
18
|
+
#define DATA_MIN INT64_MIN
|
19
|
+
#define DATA_MAX INT64_MAX
|
20
|
+
|
20
21
|
#define M_MIN m_data_to_num(INT64_MIN)
|
21
22
|
#define M_MAX m_data_to_num(INT64_MAX)
|
23
|
+
|
24
|
+
#include "int_macro.h"
|
@@ -8,8 +8,6 @@ typedef int8_t rtype;
|
|
8
8
|
#define m_extract(x) INT2NUM((int)*(dtype*)(x))
|
9
9
|
#define m_sprintf(s,x) sprintf(s,"%d",(int)(x))
|
10
10
|
|
11
|
-
#include "int_macro.h"
|
12
|
-
|
13
11
|
#ifndef INT8_MIN
|
14
12
|
#define INT8_MIN (-127-1)
|
15
13
|
#endif
|
@@ -17,5 +15,10 @@ typedef int8_t rtype;
|
|
17
15
|
#define INT8_MAX (127)
|
18
16
|
#endif
|
19
17
|
|
18
|
+
#define DATA_MIN INT8_MIN
|
19
|
+
#define DATA_MAX INT8_MAX
|
20
|
+
|
20
21
|
#define M_MIN INT2FIX(INT8_MIN)
|
21
22
|
#define M_MAX INT2FIX(INT8_MAX)
|
23
|
+
|
24
|
+
#include "int_macro.h"
|
@@ -1,8 +1,14 @@
|
|
1
1
|
#include "xint_macro.h"
|
2
2
|
|
3
|
-
#define m_abs(x) ((x<0)?-x:x)
|
4
3
|
#define m_sign(x) (((x)==0) ? 0 : (((x)>0) ? 1 : -1))
|
5
4
|
|
5
|
+
static inline dtype m_abs(dtype x) {
|
6
|
+
if (x==DATA_MIN) {
|
7
|
+
rb_raise(nary_eValueError, "cannot convert the minimum integer");
|
8
|
+
}
|
9
|
+
return (x<0)?-x:x;
|
10
|
+
}
|
11
|
+
|
6
12
|
static inline dtype int_reciprocal(dtype x) {
|
7
13
|
switch (x) {
|
8
14
|
case 1:
|
@@ -1,24 +1,25 @@
|
|
1
|
+
#define not_nan(x) ((x)==(x))
|
1
2
|
|
2
3
|
#define m_mulsum(x,y,z) {z = m_add(m_mul(x,y),z);}
|
3
|
-
#define m_mulsum_nan(x,y,z) {
|
4
|
-
if(
|
5
|
-
z = m_add(m_mul(x,y),z);
|
4
|
+
#define m_mulsum_nan(x,y,z) { \
|
5
|
+
if(not_nan(x) && not_nan(y)) { \
|
6
|
+
z = m_add(m_mul(x,y),z); \
|
6
7
|
}}
|
7
8
|
|
8
9
|
#define m_cumsum(x,y) {(x)=m_add(x,y);}
|
9
|
-
#define m_cumsum_nan(x,y) {
|
10
|
-
if (
|
11
|
-
(x) = (y);
|
12
|
-
} else if (
|
13
|
-
(x) = m_add(x,y);
|
10
|
+
#define m_cumsum_nan(x,y) { \
|
11
|
+
if (!not_nan(x)) { \
|
12
|
+
(x) = (y); \
|
13
|
+
} else if (not_nan(y)) { \
|
14
|
+
(x) = m_add(x,y); \
|
14
15
|
}}
|
15
16
|
|
16
17
|
#define m_cumprod(x,y) {(x)=m_mul(x,y);}
|
17
|
-
#define m_cumprod_nan(x,y) {
|
18
|
-
if (
|
19
|
-
(x) = (y);
|
20
|
-
} else if (
|
21
|
-
(x) = m_mul(x,y);
|
18
|
+
#define m_cumprod_nan(x,y) { \
|
19
|
+
if (!not_nan(x)) { \
|
20
|
+
(x) = (y); \
|
21
|
+
} else if (not_nan(y)) { \
|
22
|
+
(x) = m_mul(x,y); \
|
22
23
|
}}
|
23
24
|
|
24
25
|
static inline dtype f_sum(size_t n, char *p, ssize_t stride)
|
@@ -28,8 +29,8 @@ static inline dtype f_sum(size_t n, char *p, ssize_t stride)
|
|
28
29
|
|
29
30
|
for (; i--;) {
|
30
31
|
x = *(dtype*)p;
|
31
|
-
p += stride;
|
32
32
|
y = m_add(x,y);
|
33
|
+
p += stride;
|
33
34
|
}
|
34
35
|
return y;
|
35
36
|
}
|
@@ -42,7 +43,7 @@ static inline dtype f_sum_nan(size_t n, char *p, ssize_t stride)
|
|
42
43
|
for (; i--;) {
|
43
44
|
x = *(dtype*)p;
|
44
45
|
p += stride;
|
45
|
-
if (
|
46
|
+
if (not_nan(x)) {
|
46
47
|
y = m_add(x,y);
|
47
48
|
}
|
48
49
|
}
|
@@ -71,7 +72,7 @@ static inline dtype f_prod_nan(size_t n, char *p, ssize_t stride)
|
|
71
72
|
for (; i--;) {
|
72
73
|
x = *(dtype*)p;
|
73
74
|
p += stride;
|
74
|
-
if (
|
75
|
+
if (not_nan(x)) {
|
75
76
|
y = m_mul(x,y);
|
76
77
|
}
|
77
78
|
}
|
@@ -102,7 +103,7 @@ static inline dtype f_mean_nan(size_t n, char *p, ssize_t stride)
|
|
102
103
|
for (; i--;) {
|
103
104
|
x = *(dtype*)p;
|
104
105
|
p += stride;
|
105
|
-
if (
|
106
|
+
if (not_nan(x)) {
|
106
107
|
y = m_add(x,y);
|
107
108
|
count++;
|
108
109
|
}
|
@@ -141,7 +142,7 @@ static inline dtype f_var_nan(size_t n, char *p, ssize_t stride)
|
|
141
142
|
for (; i--;) {
|
142
143
|
x = *(dtype*)p;
|
143
144
|
p += stride;
|
144
|
-
if (
|
145
|
+
if (not_nan(x)) {
|
145
146
|
a = m_abs(m_sub(x,m));
|
146
147
|
y = m_add(y,m_square(a));
|
147
148
|
count++;
|
@@ -184,7 +185,7 @@ static inline dtype f_rms_nan(size_t n, char *p, ssize_t stride)
|
|
184
185
|
for (; i--;) {
|
185
186
|
x = *(dtype*)p;
|
186
187
|
p += stride;
|
187
|
-
if (
|
188
|
+
if (not_nan(x)) {
|
188
189
|
y = m_add(y,m_square(m_abs(x)));
|
189
190
|
count++;
|
190
191
|
}
|
@@ -201,11 +202,11 @@ static inline dtype f_min_nan(size_t n, char *p, ssize_t stride)
|
|
201
202
|
|
202
203
|
y = *(dtype*)p;
|
203
204
|
p += stride;
|
204
|
-
if (
|
205
|
+
if (!not_nan(y)) {return y;}
|
205
206
|
for (i--; i--;) {
|
206
207
|
x = *(dtype*)p;
|
207
208
|
p += stride;
|
208
|
-
if (
|
209
|
+
if (!not_nan(x)) {return x;}
|
209
210
|
if (m_lt(x,y)) {
|
210
211
|
y = x;
|
211
212
|
}
|
@@ -221,7 +222,7 @@ static inline dtype f_min(size_t n, char *p, ssize_t stride)
|
|
221
222
|
for (; i--; ) {
|
222
223
|
y = *(dtype*)p;
|
223
224
|
p += stride;
|
224
|
-
if (
|
225
|
+
if (not_nan(y)) {
|
225
226
|
for (; i--;) {
|
226
227
|
x = *(dtype*)p;
|
227
228
|
p += stride;
|
@@ -242,11 +243,11 @@ static inline dtype f_max_nan(size_t n, char *p, ssize_t stride)
|
|
242
243
|
|
243
244
|
y = *(dtype*)p;
|
244
245
|
p += stride;
|
245
|
-
if (
|
246
|
+
if (!not_nan(y)) {return y;}
|
246
247
|
for (i--; i--;) {
|
247
248
|
x = *(dtype*)p;
|
248
249
|
p += stride;
|
249
|
-
if (
|
250
|
+
if (!not_nan(x)) {return x;}
|
250
251
|
if (m_gt(x,y)) {
|
251
252
|
y = x;
|
252
253
|
}
|
@@ -262,7 +263,7 @@ static inline dtype f_max(size_t n, char *p, ssize_t stride)
|
|
262
263
|
for (; i--; ) {
|
263
264
|
y = *(dtype*)p;
|
264
265
|
p += stride;
|
265
|
-
if (
|
266
|
+
if (not_nan(y)) {
|
266
267
|
for (; i--;) {
|
267
268
|
x = *(dtype*)p;
|
268
269
|
p += stride;
|
@@ -283,11 +284,11 @@ static inline size_t f_min_index_nan(size_t n, char *p, ssize_t stride)
|
|
283
284
|
|
284
285
|
y = *(dtype*)p;
|
285
286
|
p += stride;
|
286
|
-
if (
|
287
|
+
if (!not_nan(y)) {return j;}
|
287
288
|
for (i=1; i<n; i++) {
|
288
289
|
x = *(dtype*)p;
|
289
290
|
p += stride;
|
290
|
-
if (
|
291
|
+
if (!not_nan(x)) {return i;}
|
291
292
|
if (m_lt(x,y)) {
|
292
293
|
y = x;
|
293
294
|
j = i;
|
@@ -304,8 +305,8 @@ static inline size_t f_min_index(size_t n, char *p, ssize_t stride)
|
|
304
305
|
for (i=0; i<n; i++) {
|
305
306
|
y = *(dtype*)p;
|
306
307
|
p += stride;
|
307
|
-
if (
|
308
|
-
j = i;
|
308
|
+
if (not_nan(y)) {
|
309
|
+
j = i; i++;
|
309
310
|
for (; i<n; i++) {
|
310
311
|
x = *(dtype*)p;
|
311
312
|
p += stride;
|
@@ -327,11 +328,11 @@ static inline size_t f_max_index_nan(size_t n, char *p, ssize_t stride)
|
|
327
328
|
|
328
329
|
y = *(dtype*)p;
|
329
330
|
p += stride;
|
330
|
-
if (
|
331
|
+
if (!not_nan(y)) {return j;}
|
331
332
|
for (i=1; i<n; i++) {
|
332
333
|
x = *(dtype*)p;
|
333
334
|
p += stride;
|
334
|
-
if (
|
335
|
+
if (!not_nan(x)) {return i;}
|
335
336
|
if (m_gt(x,y)) {
|
336
337
|
y = x;
|
337
338
|
j = i;
|
@@ -348,8 +349,8 @@ static inline size_t f_max_index(size_t n, char *p, ssize_t stride)
|
|
348
349
|
for (i=0; i<n; i++) {
|
349
350
|
y = *(dtype*)p;
|
350
351
|
p += stride;
|
351
|
-
if (
|
352
|
-
j = i;
|
352
|
+
if (not_nan(y)) {
|
353
|
+
j = i; i++;
|
353
354
|
for (; i<n; i++) {
|
354
355
|
x = *(dtype*)p;
|
355
356
|
p += stride;
|
@@ -372,14 +373,14 @@ f_minmax_nan(size_t n, char *p, ssize_t stride, dtype *amin, dtype *amax)
|
|
372
373
|
|
373
374
|
min = max = *(dtype*)p;
|
374
375
|
p += stride;
|
375
|
-
if (
|
376
|
+
if (!not_nan(min)) {
|
376
377
|
*amin = *amax = min;
|
377
378
|
return;
|
378
379
|
}
|
379
380
|
for (i--; i--;) {
|
380
381
|
x = *(dtype*)p;
|
381
382
|
p += stride;
|
382
|
-
if (
|
383
|
+
if (!not_nan(x)) {
|
383
384
|
*amin = *amax = x;
|
384
385
|
return;
|
385
386
|
}
|
@@ -412,7 +413,7 @@ f_minmax(size_t n, char *p, ssize_t stride, dtype *amin, dtype *amax)
|
|
412
413
|
for (; i--; ) {
|
413
414
|
min = *(dtype*)p;
|
414
415
|
p += stride;
|
415
|
-
if (
|
416
|
+
if (not_nan(min)) {
|
416
417
|
max = min;
|
417
418
|
for (; i--;) {
|
418
419
|
x = *(dtype*)p;
|
@@ -8,11 +8,14 @@ typedef u_int16_t rtype;
|
|
8
8
|
#define m_extract(x) UINT2NUM((unsigned int)*(dtype*)(x))
|
9
9
|
#define m_sprintf(s,x) sprintf(s,"%u",(unsigned int)(x))
|
10
10
|
|
11
|
-
#include "uint_macro.h"
|
12
|
-
|
13
11
|
#ifndef UINT16_MAX
|
14
12
|
#define UINT16_MAX (65535)
|
15
13
|
#endif
|
16
14
|
|
15
|
+
#define DATA_MIN UINT16_MIN
|
16
|
+
#define DATA_MAX UINT16_MAX
|
17
|
+
|
17
18
|
#define M_MIN INT2FIX(0)
|
18
19
|
#define M_MAX m_data_to_num(UINT16_MAX)
|
20
|
+
|
21
|
+
#include "uint_macro.h"
|
@@ -8,11 +8,14 @@ typedef u_int32_t rtype;
|
|
8
8
|
#define m_extract(x) UINT322NUM((u_int32_t)*(dtype*)(x))
|
9
9
|
#define m_sprintf(s,x) sprintf(s,"%"PRIu32,(u_int32_t)(x))
|
10
10
|
|
11
|
-
#include "uint_macro.h"
|
12
|
-
|
13
11
|
#ifndef UINT32_MAX
|
14
12
|
#define UINT32_MAX (4294967295u)
|
15
13
|
#endif
|
16
14
|
|
15
|
+
#define DATA_MIN UINT32_MIN
|
16
|
+
#define DATA_MAX UINT32_MAX
|
17
|
+
|
17
18
|
#define M_MIN INT2FIX(0)
|
18
19
|
#define M_MAX m_data_to_num(UINT32_MAX)
|
20
|
+
|
21
|
+
#include "uint_macro.h"
|
@@ -8,11 +8,14 @@ typedef u_int64_t rtype;
|
|
8
8
|
#define m_extract(x) UINT642NUM((u_int64_t)*(dtype*)(x))
|
9
9
|
#define m_sprintf(s,x) sprintf(s,"%"PRIu64,(u_int64_t)(x))
|
10
10
|
|
11
|
-
#include "uint_macro.h"
|
12
|
-
|
13
11
|
#ifndef UINT64_MAX
|
14
12
|
#define UINT64_MAX (18446744073709551615ul)
|
15
13
|
#endif
|
16
14
|
|
15
|
+
#define DATA_MIN UINT64_MIN
|
16
|
+
#define DATA_MAX UINT64_MAX
|
17
|
+
|
17
18
|
#define M_MIN INT2FIX(0)
|
18
19
|
#define M_MAX m_data_to_num(UINT64_MAX)
|
20
|
+
|
21
|
+
#include "uint_macro.h"
|
@@ -8,11 +8,14 @@ typedef u_int8_t rtype;
|
|
8
8
|
#define m_extract(x) UINT2NUM((unsigned int)*(dtype*)(x))
|
9
9
|
#define m_sprintf(s,x) sprintf(s,"%u",(unsigned int)(x))
|
10
10
|
|
11
|
-
#include "uint_macro.h"
|
12
|
-
|
13
11
|
#ifndef UINT8_MAX
|
14
12
|
#define UINT8_MAX (255)
|
15
13
|
#endif
|
16
14
|
|
15
|
+
#define DATA_MIN UINT8_MIN
|
16
|
+
#define DATA_MAX UINT8_MAX
|
17
|
+
|
17
18
|
#define M_MIN INT2FIX(0)
|
18
19
|
#define M_MAX m_data_to_num(UINT8_MAX)
|
20
|
+
|
21
|
+
#include "uint_macro.h"
|
data/spec/narray_spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: numo-narray
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0.
|
4
|
+
version: 0.9.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masahiro TANAKA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|