carray 1.2.0 → 1.3.0
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/Gemfile +0 -1
- data/ca_iter_block.c +32 -30
- data/ca_iter_dimension.c +24 -22
- data/ca_iter_window.c +25 -23
- data/ca_obj_array.c +58 -56
- data/ca_obj_bitarray.c +27 -27
- data/ca_obj_bitfield.c +46 -45
- data/ca_obj_block.c +77 -72
- data/ca_obj_fake.c +20 -20
- data/ca_obj_farray.c +22 -22
- data/ca_obj_field.c +31 -30
- data/ca_obj_grid.c +63 -62
- data/ca_obj_mapping.c +35 -32
- data/ca_obj_object.c +54 -54
- data/ca_obj_reduce.c +13 -13
- data/ca_obj_refer.c +42 -39
- data/ca_obj_repeat.c +50 -47
- data/ca_obj_select.c +24 -24
- data/ca_obj_shift.c +61 -58
- data/ca_obj_transpose.c +52 -51
- data/ca_obj_unbound_repeat.c +28 -27
- data/ca_obj_window.c +77 -72
- data/carray.gemspec +0 -2
- data/carray.h +190 -163
- data/carray_access.c +137 -136
- data/carray_attribute.c +24 -13
- data/carray_call_cfunc.c +21 -21
- data/carray_cast.c +106 -110
- data/carray_cast_func.rb +17 -17
- data/carray_class.c +3 -3
- data/carray_conversion.c +15 -15
- data/carray_copy.c +27 -27
- data/carray_core.c +22 -21
- data/carray_element.c +55 -47
- data/carray_generate.c +32 -32
- data/carray_iterator.c +36 -35
- data/carray_loop.c +37 -37
- data/carray_mask.c +21 -21
- data/carray_math.rb +18 -18
- data/carray_numeric.c +1 -1
- data/carray_operator.c +19 -18
- data/carray_order.c +30 -30
- data/carray_random.c +34 -32
- data/carray_sort_addr.c +12 -12
- data/carray_stat.c +127 -127
- data/carray_stat_proc.rb +152 -141
- data/carray_test.c +16 -16
- data/carray_utils.c +58 -56
- data/ext/calculus/carray_calculus.c +19 -20
- data/ext/calculus/carray_interp.c +12 -11
- data/ext/fortio/lib/fortio/fortran_sequential.rb +2 -2
- data/ext/fortio/ruby_fortio.c +1 -1
- data/ext/imagemap/carray_imagemap.c +14 -14
- data/ext/narray/ca_wrap_narray.c +30 -21
- data/extconf.rb +5 -0
- data/lib/carray/base/basic.rb +4 -3
- data/lib/carray/base/serialize.rb +3 -3
- data/lib/carray/graphics/gnuplot.rb +10 -7
- data/lib/carray/io/csv.rb +14 -9
- data/lib/carray/io/imagemagick.rb +7 -0
- data/lib/carray/io/sqlite3.rb +6 -4
- data/mkmath.rb +20 -20
- data/ruby_carray.c +2 -0
- data/ruby_ccomplex.c +3 -3
- data/test/test_130.rb +23 -0
- data/test/test_ALL.rb +2 -1
- data/test/test_order.rb +3 -3
- data/test/test_stat.rb +2 -2
- data/version.h +4 -4
- metadata +4 -37
- data/examples/ex001.rb +0 -10
- data/examples/test-int.rb +0 -13
- data/lib/carray/autoload/autoload_io_excel.rb +0 -5
- data/lib/carray/io/excel.rb +0 -26
data/carray_iterator.c
CHANGED
@@ -31,7 +31,7 @@ ca_iter_rank (VALUE self)
|
|
31
31
|
}
|
32
32
|
|
33
33
|
void
|
34
|
-
ca_iter_dim (VALUE self,
|
34
|
+
ca_iter_dim (VALUE self, ca_size_t *dim)
|
35
35
|
{
|
36
36
|
int i;
|
37
37
|
if ( TYPE(self) == T_DATA ) {
|
@@ -44,15 +44,15 @@ ca_iter_dim (VALUE self, int32_t *dim)
|
|
44
44
|
else {
|
45
45
|
VALUE rrank = rb_ivar_get(self, rb_intern("@rank"));
|
46
46
|
VALUE rdim = rb_ivar_get(self, rb_intern("@dim"));
|
47
|
-
|
48
|
-
rank =
|
47
|
+
int8_t rank;
|
48
|
+
rank = (int8_t) NUM2INT(rrank);
|
49
49
|
for (i=0; i<rank; i++) {
|
50
|
-
dim[i] =
|
50
|
+
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
51
51
|
}
|
52
52
|
}
|
53
53
|
}
|
54
54
|
|
55
|
-
|
55
|
+
ca_size_t
|
56
56
|
ca_iter_elements (VALUE self)
|
57
57
|
{
|
58
58
|
int i, elements;
|
@@ -67,10 +67,10 @@ ca_iter_elements (VALUE self)
|
|
67
67
|
else {
|
68
68
|
VALUE rrank = rb_ivar_get(self, rb_intern("@rank"));
|
69
69
|
VALUE rdim = rb_ivar_get(self, rb_intern("@dim"));
|
70
|
-
|
70
|
+
int8_t rank = (int8_t) NUM2INT(rrank);
|
71
71
|
elements = 1;
|
72
72
|
for (i=0; i<rank; i++) {
|
73
|
-
elements *=
|
73
|
+
elements *= NUM2SIZE(rb_ary_entry(rdim, i));
|
74
74
|
}
|
75
75
|
}
|
76
76
|
return elements;
|
@@ -83,7 +83,7 @@ ca_iter_reference (VALUE self)
|
|
83
83
|
}
|
84
84
|
|
85
85
|
VALUE
|
86
|
-
ca_iter_kernel_at_addr (VALUE self,
|
86
|
+
ca_iter_kernel_at_addr (VALUE self, ca_size_t addr, VALUE rref)
|
87
87
|
{
|
88
88
|
volatile VALUE rker;
|
89
89
|
if ( TYPE(self) == T_DATA ) {
|
@@ -98,13 +98,13 @@ ca_iter_kernel_at_addr (VALUE self, int32_t addr, VALUE rref)
|
|
98
98
|
}
|
99
99
|
else {
|
100
100
|
rker = rb_funcall(self, rb_intern("kernel_at_addr"), 2,
|
101
|
-
|
101
|
+
SIZE2NUM(addr), rref);
|
102
102
|
}
|
103
103
|
return rker;
|
104
104
|
}
|
105
105
|
|
106
106
|
VALUE
|
107
|
-
ca_iter_kernel_at_index (VALUE self,
|
107
|
+
ca_iter_kernel_at_index (VALUE self, ca_size_t *idx, VALUE rref)
|
108
108
|
{
|
109
109
|
VALUE rker;
|
110
110
|
if ( TYPE(self) == T_DATA ) {
|
@@ -123,7 +123,7 @@ ca_iter_kernel_at_index (VALUE self, int32_t *idx, VALUE rref)
|
|
123
123
|
int i;
|
124
124
|
vidx = rb_ary_new2(rank);
|
125
125
|
for (i=0; i<rank; i++) {
|
126
|
-
rb_ary_store(vidx, i,
|
126
|
+
rb_ary_store(vidx, i, SIZE2NUM(idx[i]));
|
127
127
|
}
|
128
128
|
rker = rb_funcall(self, rb_intern("kernel_at_index"), 2,
|
129
129
|
vidx, rref);
|
@@ -132,7 +132,7 @@ ca_iter_kernel_at_index (VALUE self, int32_t *idx, VALUE rref)
|
|
132
132
|
}
|
133
133
|
|
134
134
|
VALUE
|
135
|
-
ca_iter_kernel_move_to_addr (VALUE self,
|
135
|
+
ca_iter_kernel_move_to_addr (VALUE self, ca_size_t addr, VALUE rref)
|
136
136
|
{
|
137
137
|
if ( TYPE(self) == T_DATA ) {
|
138
138
|
CAIterator *it;
|
@@ -143,13 +143,13 @@ ca_iter_kernel_move_to_addr (VALUE self, int32_t addr, VALUE rref)
|
|
143
143
|
}
|
144
144
|
else {
|
145
145
|
rb_funcall(self, rb_intern("kernel_move_to_addr"), 2,
|
146
|
-
|
146
|
+
SIZE2NUM(addr), rref);
|
147
147
|
}
|
148
148
|
return rref;
|
149
149
|
}
|
150
150
|
|
151
151
|
VALUE
|
152
|
-
ca_iter_kernel_move_to_index (VALUE self,
|
152
|
+
ca_iter_kernel_move_to_index (VALUE self, ca_size_t *idx, VALUE rref)
|
153
153
|
{
|
154
154
|
VALUE rker;
|
155
155
|
if ( TYPE(self) == T_DATA ) {
|
@@ -165,7 +165,7 @@ ca_iter_kernel_move_to_index (VALUE self, int32_t *idx, VALUE rref)
|
|
165
165
|
int i;
|
166
166
|
vidx = rb_ary_new2(rank);
|
167
167
|
for (i=0; i<rank; i++) {
|
168
|
-
rb_ary_store(vidx, i,
|
168
|
+
rb_ary_store(vidx, i, SIZE2NUM(idx[i]));
|
169
169
|
}
|
170
170
|
rker = rb_funcall(self, rb_intern("kernel_move_to_index"), 2,
|
171
171
|
vidx, rref);
|
@@ -180,7 +180,7 @@ ca_iter_prepare_output (VALUE self, VALUE rtype, VALUE rbytes)
|
|
180
180
|
volatile VALUE obj;
|
181
181
|
CArray *co;
|
182
182
|
int8_t data_type;
|
183
|
-
|
183
|
+
ca_size_t bytes;
|
184
184
|
int i;
|
185
185
|
|
186
186
|
rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
|
@@ -194,9 +194,9 @@ ca_iter_prepare_output (VALUE self, VALUE rtype, VALUE rbytes)
|
|
194
194
|
VALUE rrank = rb_ivar_get(self, rb_intern("@rank"));
|
195
195
|
VALUE rdim = rb_ivar_get(self, rb_intern("@dim"));
|
196
196
|
int8_t rank = NUM2LONG(rrank);
|
197
|
-
|
197
|
+
ca_size_t dim[CA_RANK_MAX];
|
198
198
|
for (i=0; i<rank; i++) {
|
199
|
-
dim[i] =
|
199
|
+
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
200
200
|
}
|
201
201
|
co = carray_new_safe(data_type, rank, dim, bytes, NULL);
|
202
202
|
}
|
@@ -216,6 +216,7 @@ ca_iter_prepare_output (VALUE self, VALUE rtype, VALUE rbytes)
|
|
216
216
|
end
|
217
217
|
*/
|
218
218
|
|
219
|
+
|
219
220
|
VALUE
|
220
221
|
rb_ca_iter_rank (VALUE self)
|
221
222
|
{
|
@@ -233,13 +234,13 @@ VALUE
|
|
233
234
|
rb_ca_iter_dim (VALUE self)
|
234
235
|
{
|
235
236
|
VALUE rdim;
|
236
|
-
|
237
|
+
ca_size_t dim[CA_RANK_MAX];
|
237
238
|
int8_t rank = ca_iter_rank(self);
|
238
239
|
int i;
|
239
240
|
ca_iter_dim(self, dim);
|
240
241
|
rdim = rb_ary_new2(rank);
|
241
242
|
for (i=0; i<rank; i++) {
|
242
|
-
rb_ary_store(rdim, i,
|
243
|
+
rb_ary_store(rdim, i, SIZE2NUM(dim[i]));
|
243
244
|
}
|
244
245
|
return rdim;
|
245
246
|
}
|
@@ -254,7 +255,7 @@ rb_ca_iter_dim (VALUE self)
|
|
254
255
|
VALUE
|
255
256
|
rb_ca_iter_elements (VALUE self)
|
256
257
|
{
|
257
|
-
return
|
258
|
+
return SIZE2NUM(ca_iter_elements(self));
|
258
259
|
}
|
259
260
|
|
260
261
|
/* rdoc:
|
@@ -281,11 +282,11 @@ VALUE
|
|
281
282
|
rb_ca_iter_kernel_at_addr (int argc, VALUE *argv, VALUE self)
|
282
283
|
{
|
283
284
|
volatile VALUE raddr, rcarray;
|
284
|
-
rb_scan_args(argc, argv, "11", &raddr, &rcarray);
|
285
|
+
rb_scan_args(argc, argv, "11", (VALUE *) &raddr, (VALUE *) &rcarray);
|
285
286
|
if ( NIL_P(rcarray) ) {
|
286
287
|
rcarray = rb_ca_iter_reference(self);
|
287
288
|
}
|
288
|
-
return ca_iter_kernel_at_addr(self,
|
289
|
+
return ca_iter_kernel_at_addr(self, NUM2SIZE(raddr), rcarray);
|
289
290
|
}
|
290
291
|
|
291
292
|
/* rdoc:
|
@@ -299,18 +300,18 @@ VALUE
|
|
299
300
|
rb_ca_iter_kernel_at_index (int argc, VALUE *argv, VALUE self)
|
300
301
|
{
|
301
302
|
volatile VALUE rindex, rcarray;
|
302
|
-
|
303
|
+
ca_size_t idx[CA_RANK_MAX];
|
303
304
|
int8_t rank = ca_iter_rank(self);
|
304
305
|
int i;
|
305
306
|
|
306
|
-
rb_scan_args(argc, argv, "11", &rindex, &rcarray);
|
307
|
+
rb_scan_args(argc, argv, "11", (VALUE *) &rindex, (VALUE *) &rcarray);
|
307
308
|
|
308
309
|
if ( NIL_P(rcarray) ) {
|
309
310
|
rcarray = rb_ca_iter_reference(self);
|
310
311
|
}
|
311
312
|
|
312
313
|
for (i=0; i<rank; i++) {
|
313
|
-
idx[i] =
|
314
|
+
idx[i] = NUM2SIZE(rb_ary_entry(rindex, i));
|
314
315
|
}
|
315
316
|
|
316
317
|
return ca_iter_kernel_at_index(self, idx, rcarray);
|
@@ -326,7 +327,7 @@ rb_ca_iter_kernel_at_index (int argc, VALUE *argv, VALUE self)
|
|
326
327
|
VALUE
|
327
328
|
rb_ca_iter_kernel_move_to_addr (VALUE self, VALUE raddr, VALUE rker)
|
328
329
|
{
|
329
|
-
return ca_iter_kernel_move_to_addr(self,
|
330
|
+
return ca_iter_kernel_move_to_addr(self, NUM2SIZE(raddr), rker);
|
330
331
|
}
|
331
332
|
|
332
333
|
/* rdoc:
|
@@ -339,12 +340,12 @@ rb_ca_iter_kernel_move_to_addr (VALUE self, VALUE raddr, VALUE rker)
|
|
339
340
|
VALUE
|
340
341
|
rb_ca_iter_kernel_move_to_index (VALUE self, VALUE rindex, VALUE rker)
|
341
342
|
{
|
342
|
-
|
343
|
+
ca_size_t idx[CA_RANK_MAX];
|
343
344
|
int8_t rank = ca_iter_rank(self);
|
344
345
|
int i;
|
345
346
|
|
346
347
|
for (i=0; i<rank; i++) {
|
347
|
-
idx[i] =
|
348
|
+
idx[i] = NUM2SIZE(rb_ary_entry(rindex, i));
|
348
349
|
}
|
349
350
|
|
350
351
|
return ca_iter_kernel_move_to_index(self, idx, rker);
|
@@ -382,9 +383,9 @@ rb_ca_iter_calculate (int argc, VALUE *argv, VALUE self)
|
|
382
383
|
{
|
383
384
|
volatile VALUE rtype, rbytes, routput, rref, rker, rout;
|
384
385
|
CArray *co, *cr, *ck;
|
385
|
-
|
386
|
+
ca_size_t elements;
|
386
387
|
int8_t data_type;
|
387
|
-
|
388
|
+
ca_size_t bytes;
|
388
389
|
int i;
|
389
390
|
|
390
391
|
if ( argc < 1 ) {
|
@@ -398,12 +399,12 @@ rb_ca_iter_calculate (int argc, VALUE *argv, VALUE self)
|
|
398
399
|
|
399
400
|
if ( NIL_P(argv[0]) ) {
|
400
401
|
rtype = INT2NUM(cr->data_type);
|
401
|
-
rbytes =
|
402
|
+
rbytes = SIZE2NUM(cr->bytes);
|
402
403
|
}
|
403
404
|
else {
|
404
405
|
rb_ca_guess_type_and_bytes(argv[0], Qnil, &data_type, &bytes);
|
405
406
|
rtype = INT2NUM(data_type);
|
406
|
-
rbytes =
|
407
|
+
rbytes = SIZE2NUM(bytes);
|
407
408
|
}
|
408
409
|
argc--;
|
409
410
|
argv++;
|
@@ -481,7 +482,7 @@ rb_ca_iter_filter (int argc, VALUE *argv, VALUE self)
|
|
481
482
|
{
|
482
483
|
volatile VALUE routput, rref, rker, rout;
|
483
484
|
CArray *co, *cr, *ck, *cq;
|
484
|
-
|
485
|
+
ca_size_t elements;
|
485
486
|
int8_t data_type;
|
486
487
|
int i;
|
487
488
|
|
@@ -558,7 +559,7 @@ rb_ca_iter_evaluate (int argc, VALUE *argv, VALUE self)
|
|
558
559
|
{
|
559
560
|
volatile VALUE rref, rker;
|
560
561
|
CArray *cr, *ck;
|
561
|
-
|
562
|
+
ca_size_t elements;
|
562
563
|
int i;
|
563
564
|
|
564
565
|
elements = ca_iter_elements(self);
|
data/carray_loop.c
CHANGED
@@ -17,7 +17,7 @@ rb_ca_s_each_index_internal (int rank, VALUE *dim, uint8_t irank, VALUE ridx)
|
|
17
17
|
{
|
18
18
|
volatile VALUE ret = Qnil;
|
19
19
|
int32_t is_leaf = (irank == rank - 1);
|
20
|
-
|
20
|
+
ca_size_t i;
|
21
21
|
|
22
22
|
if ( NIL_P(dim[irank]) ) {
|
23
23
|
rb_ary_store(ridx, irank, Qnil);
|
@@ -29,8 +29,8 @@ rb_ca_s_each_index_internal (int rank, VALUE *dim, uint8_t irank, VALUE ridx)
|
|
29
29
|
}
|
30
30
|
}
|
31
31
|
else {
|
32
|
-
for (i=0; i<
|
33
|
-
rb_ary_store(ridx, irank,
|
32
|
+
for (i=0; i<NUM2SIZE(dim[irank]); i++) {
|
33
|
+
rb_ary_store(ridx, irank, SIZE2NUM(i));
|
34
34
|
if ( is_leaf ) {
|
35
35
|
ret = rb_yield_splat(rb_obj_clone(ridx));
|
36
36
|
}
|
@@ -81,8 +81,8 @@ static VALUE
|
|
81
81
|
rb_ca_each (VALUE self)
|
82
82
|
{
|
83
83
|
volatile VALUE ret = Qnil;
|
84
|
-
|
85
|
-
|
84
|
+
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
85
|
+
ca_size_t i;
|
86
86
|
#if RUBY_VERSION_CODE >= 190
|
87
87
|
RETURN_ENUMERATOR(self, 0, 0);
|
88
88
|
#endif
|
@@ -104,13 +104,13 @@ static VALUE
|
|
104
104
|
rb_ca_each_with_addr (VALUE self)
|
105
105
|
{
|
106
106
|
volatile VALUE ret = Qnil;
|
107
|
-
|
108
|
-
|
107
|
+
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
108
|
+
ca_size_t i;
|
109
109
|
#if RUBY_VERSION_CODE >= 190
|
110
110
|
RETURN_ENUMERATOR(self, 0, 0);
|
111
111
|
#endif
|
112
112
|
for (i=0; i<elements; i++) {
|
113
|
-
ret = rb_yield_values(2, rb_ca_fetch_addr(self, i),
|
113
|
+
ret = rb_yield_values(2, rb_ca_fetch_addr(self, i), SIZE2NUM(i));
|
114
114
|
}
|
115
115
|
return ret;
|
116
116
|
}
|
@@ -127,13 +127,13 @@ static VALUE
|
|
127
127
|
rb_ca_each_addr (VALUE self)
|
128
128
|
{
|
129
129
|
volatile VALUE ret = Qnil;
|
130
|
-
|
131
|
-
|
130
|
+
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
131
|
+
ca_size_t i;
|
132
132
|
#if RUBY_VERSION_CODE >= 190
|
133
133
|
RETURN_ENUMERATOR(self, 0, 0);
|
134
134
|
#endif
|
135
135
|
for (i=0; i<elements; i++) {
|
136
|
-
ret = rb_yield(
|
136
|
+
ret = rb_yield(SIZE2NUM(i));
|
137
137
|
}
|
138
138
|
return ret;
|
139
139
|
}
|
@@ -143,17 +143,17 @@ rb_ca_each_index_internal (VALUE self, int8_t level, VALUE ridx)
|
|
143
143
|
{
|
144
144
|
volatile VALUE ret = Qnil;
|
145
145
|
CArray *ca;
|
146
|
-
|
146
|
+
ca_size_t i;
|
147
147
|
Data_Get_Struct(self, CArray, ca);
|
148
148
|
if ( level == ca->rank - 1 ) {
|
149
149
|
for (i=0; i<ca->dim[level]; i++) {
|
150
|
-
rb_ary_store(ridx, level,
|
150
|
+
rb_ary_store(ridx, level, SIZE2NUM(i));
|
151
151
|
ret = rb_yield_splat(rb_obj_clone(ridx));
|
152
152
|
}
|
153
153
|
}
|
154
154
|
else {
|
155
155
|
for (i=0; i<ca->dim[level]; i++) {
|
156
|
-
rb_ary_store(ridx, level,
|
156
|
+
rb_ary_store(ridx, level, SIZE2NUM(i));
|
157
157
|
ret = rb_ca_each_index_internal(self, level+1, ridx);
|
158
158
|
}
|
159
159
|
}
|
@@ -200,8 +200,8 @@ rb_ca_map_bang (VALUE self)
|
|
200
200
|
{
|
201
201
|
volatile VALUE obj;
|
202
202
|
CArray *ca;
|
203
|
-
|
204
|
-
|
203
|
+
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
204
|
+
ca_size_t i;
|
205
205
|
#if RUBY_VERSION_CODE >= 190
|
206
206
|
RETURN_ENUMERATOR(self, 0, 0);
|
207
207
|
#endif
|
@@ -219,16 +219,16 @@ rb_ca_map_bang (VALUE self)
|
|
219
219
|
|
220
220
|
static VALUE
|
221
221
|
rb_ca_each_with_index_internal (VALUE self,
|
222
|
-
int8_t level,
|
222
|
+
int8_t level, ca_size_t *idx, VALUE ridx)
|
223
223
|
{
|
224
224
|
volatile VALUE ret = Qnil;
|
225
225
|
CArray *ca;
|
226
|
-
|
226
|
+
ca_size_t i;
|
227
227
|
Data_Get_Struct(self, CArray, ca);
|
228
228
|
if ( level == ca->rank - 1 ) {
|
229
229
|
for (i=0; i<ca->dim[level]; i++) {
|
230
230
|
idx[level] = i;
|
231
|
-
rb_ary_store(ridx, level,
|
231
|
+
rb_ary_store(ridx, level, SIZE2NUM(i));
|
232
232
|
ret = rb_yield_values(2, rb_ca_fetch_index(self, idx),
|
233
233
|
rb_obj_clone(ridx));
|
234
234
|
}
|
@@ -236,7 +236,7 @@ rb_ca_each_with_index_internal (VALUE self,
|
|
236
236
|
else {
|
237
237
|
for (i=0; i<ca->dim[level]; i++) {
|
238
238
|
idx[level] = i;
|
239
|
-
rb_ary_store(ridx, level,
|
239
|
+
rb_ary_store(ridx, level, SIZE2NUM(i));
|
240
240
|
ret = rb_ca_each_with_index_internal(self, level+1, idx, ridx);
|
241
241
|
}
|
242
242
|
}
|
@@ -255,7 +255,7 @@ static VALUE
|
|
255
255
|
rb_ca_each_with_index (VALUE self)
|
256
256
|
{
|
257
257
|
volatile VALUE ridx, ret;
|
258
|
-
|
258
|
+
ca_size_t idx[CA_RANK_MAX];
|
259
259
|
int8_t rank = NUM2INT(rb_ca_rank(self));
|
260
260
|
#if RUBY_VERSION_CODE >= 190
|
261
261
|
RETURN_ENUMERATOR(self, 0, 0);
|
@@ -269,16 +269,16 @@ rb_ca_each_with_index (VALUE self)
|
|
269
269
|
|
270
270
|
static void
|
271
271
|
rb_ca_map_with_index_bang_internal (VALUE self,
|
272
|
-
int8_t level,
|
272
|
+
int8_t level, ca_size_t *idx, VALUE ridx)
|
273
273
|
{
|
274
274
|
CArray *ca;
|
275
|
-
|
275
|
+
ca_size_t i;
|
276
276
|
Data_Get_Struct(self, CArray, ca);
|
277
277
|
if ( level == ca->rank - 1 ) {
|
278
278
|
volatile VALUE obj;
|
279
279
|
for (i=0; i<ca->dim[level]; i++) {
|
280
280
|
idx[level] = i;
|
281
|
-
rb_ary_store(ridx, level,
|
281
|
+
rb_ary_store(ridx, level, SIZE2NUM(i));
|
282
282
|
obj = rb_yield_values(2, rb_ca_fetch_index(self, idx),
|
283
283
|
rb_obj_clone(ridx));
|
284
284
|
rb_ca_store_index(self, idx, obj);
|
@@ -287,7 +287,7 @@ rb_ca_map_with_index_bang_internal (VALUE self,
|
|
287
287
|
else {
|
288
288
|
for (i=0; i<ca->dim[level]; i++) {
|
289
289
|
idx[level] = i;
|
290
|
-
rb_ary_store(ridx, level,
|
290
|
+
rb_ary_store(ridx, level, SIZE2NUM(i));
|
291
291
|
rb_ca_map_with_index_bang_internal(self, level+1, idx, ridx);
|
292
292
|
}
|
293
293
|
}
|
@@ -306,7 +306,7 @@ rb_ca_map_with_index_bang (VALUE self)
|
|
306
306
|
{
|
307
307
|
volatile VALUE ridx;
|
308
308
|
CArray *ca;
|
309
|
-
|
309
|
+
ca_size_t idx[CA_RANK_MAX];
|
310
310
|
int8_t rank = NUM2INT(rb_ca_rank(self));
|
311
311
|
#if RUBY_VERSION_CODE >= 190
|
312
312
|
RETURN_ENUMERATOR(self, 0, 0);
|
@@ -324,16 +324,16 @@ rb_ca_map_with_index_bang (VALUE self)
|
|
324
324
|
|
325
325
|
static void
|
326
326
|
rb_ca_map_index_bang_internal (VALUE self,
|
327
|
-
int8_t level,
|
327
|
+
int8_t level, ca_size_t *idx, VALUE ridx)
|
328
328
|
{
|
329
329
|
CArray *ca;
|
330
|
-
|
330
|
+
ca_size_t i;
|
331
331
|
Data_Get_Struct(self, CArray, ca);
|
332
332
|
if ( level == ca->rank - 1 ) {
|
333
333
|
volatile VALUE obj;
|
334
334
|
for (i=0; i<ca->dim[level]; i++) {
|
335
335
|
idx[level] = i;
|
336
|
-
rb_ary_store(ridx, level,
|
336
|
+
rb_ary_store(ridx, level, SIZE2NUM(i));
|
337
337
|
obj = rb_yield_splat(rb_obj_clone(ridx));
|
338
338
|
rb_ca_store_index(self, idx, obj);
|
339
339
|
}
|
@@ -341,7 +341,7 @@ rb_ca_map_index_bang_internal (VALUE self,
|
|
341
341
|
else {
|
342
342
|
for (i=0; i<ca->dim[level]; i++) {
|
343
343
|
idx[level] = i;
|
344
|
-
rb_ary_store(ridx, level,
|
344
|
+
rb_ary_store(ridx, level, SIZE2NUM(i));
|
345
345
|
rb_ca_map_index_bang_internal(self, level+1, idx, ridx);
|
346
346
|
}
|
347
347
|
}
|
@@ -360,7 +360,7 @@ rb_ca_map_index_bang (VALUE self)
|
|
360
360
|
{
|
361
361
|
volatile VALUE ridx;
|
362
362
|
CArray *ca;
|
363
|
-
|
363
|
+
ca_size_t idx[CA_RANK_MAX];
|
364
364
|
int8_t rank = NUM2INT(rb_ca_rank(self));
|
365
365
|
#if RUBY_VERSION_CODE >= 190
|
366
366
|
RETURN_ENUMERATOR(self, 0, 0);
|
@@ -388,8 +388,8 @@ rb_ca_map_with_addr_bang (VALUE self)
|
|
388
388
|
{
|
389
389
|
volatile VALUE obj;
|
390
390
|
CArray *ca;
|
391
|
-
|
392
|
-
|
391
|
+
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
392
|
+
ca_size_t i;
|
393
393
|
#if RUBY_VERSION_CODE >= 190
|
394
394
|
RETURN_ENUMERATOR(self, 0, 0);
|
395
395
|
#endif
|
@@ -397,7 +397,7 @@ rb_ca_map_with_addr_bang (VALUE self)
|
|
397
397
|
Data_Get_Struct(self, CArray, ca);
|
398
398
|
ca_attach(ca);
|
399
399
|
for (i=0; i<elements; i++) {
|
400
|
-
obj = rb_yield_values(2, rb_ca_fetch_addr(self, i),
|
400
|
+
obj = rb_yield_values(2, rb_ca_fetch_addr(self, i), SIZE2NUM(i));
|
401
401
|
rb_ca_store_addr(self, i, obj);
|
402
402
|
}
|
403
403
|
ca_sync(ca);
|
@@ -419,8 +419,8 @@ rb_ca_map_addr_bang (VALUE self)
|
|
419
419
|
{
|
420
420
|
volatile VALUE obj;
|
421
421
|
CArray *ca;
|
422
|
-
|
423
|
-
|
422
|
+
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
423
|
+
ca_size_t i;
|
424
424
|
#if RUBY_VERSION_CODE >= 190
|
425
425
|
RETURN_ENUMERATOR(self, 0, 0);
|
426
426
|
#endif
|
@@ -428,7 +428,7 @@ rb_ca_map_addr_bang (VALUE self)
|
|
428
428
|
Data_Get_Struct(self, CArray, ca);
|
429
429
|
ca_attach(ca);
|
430
430
|
for (i=0; i<elements; i++) {
|
431
|
-
obj = rb_yield(
|
431
|
+
obj = rb_yield(SIZE2NUM(i));
|
432
432
|
rb_ca_store_addr(self, i, obj);
|
433
433
|
}
|
434
434
|
ca_sync(ca);
|