numo-narray 0.9.0.7 → 0.9.0.8
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/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
|