carray 3.0.1 → 3.0.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/CHANGELOG.md +824 -0
- data/README.md +5 -6
- data/carray.gemspec +1 -1
- data/ext/ca_axis_dispatch.c +258 -4
- data/ext/ca_axis_group.c +368 -184
- data/ext/ca_binop_dispatch.c +54 -32
- data/ext/ca_binop_dispatch.h +1 -0
- data/ext/ca_categorical_iterator.c +90 -41
- data/ext/ca_compare.c +8 -2
- data/ext/ca_for_buffer.h +21 -68
- data/ext/ca_group_iter.c +27 -11
- data/ext/ca_kernel_iterator.c +960 -245
- data/ext/ca_kernel_iterator.h +352 -181
- data/ext/ca_monop_dispatch.c +4 -4
- data/ext/ca_monop_dispatch.h +4 -0
- data/ext/ca_obj_array.c +194 -42
- data/ext/ca_obj_bincmp.c +152 -121
- data/ext/ca_obj_binop.c +107 -210
- data/ext/ca_obj_bitarray.c +37 -24
- data/ext/ca_obj_bitfield.c +95 -62
- data/ext/ca_obj_block.c +5 -4
- data/ext/ca_obj_byte_swap.c +40 -40
- data/ext/ca_obj_const_string.c +180 -50
- data/ext/ca_obj_face.c +428 -62
- data/ext/ca_obj_face.h +107 -47
- data/ext/ca_obj_fake.c +21 -50
- data/ext/ca_obj_farray.c +1 -0
- data/ext/ca_obj_field.c +16 -3
- data/ext/ca_obj_fixlen_string.c +39 -26
- data/ext/ca_obj_grid.c +181 -124
- data/ext/ca_obj_meld.c +235 -55
- data/ext/ca_obj_moncmp.c +61 -61
- data/ext/ca_obj_monop.c +125 -107
- data/ext/ca_obj_object.c +551 -233
- data/ext/ca_obj_record.c +51 -16
- data/ext/ca_obj_reduce.c +5 -8
- data/ext/ca_obj_refer.c +117 -33
- data/ext/ca_obj_remap.c +57 -17
- data/ext/ca_obj_repeat.c +21 -5
- data/ext/ca_obj_roll.c +115 -11
- data/ext/ca_obj_select.c +88 -75
- data/ext/ca_obj_select_axis.c +58 -60
- data/ext/ca_obj_shift.c +22 -102
- data/ext/ca_obj_stack.c +223 -123
- data/ext/ca_obj_stride.c +267 -35
- data/ext/ca_obj_string.c +25 -22
- data/ext/ca_obj_tile.c +32 -16
- data/ext/ca_obj_time.c +23 -25
- data/ext/ca_obj_timedelta.c +21 -23
- data/ext/ca_obj_transpose.c +12 -3
- data/ext/ca_obj_triop.c +110 -117
- data/ext/ca_obj_window.c +157 -29
- data/ext/ca_op_ipower.c +25 -13
- data/ext/ca_op_powi.h +57 -30
- data/ext/ca_pow5_table.h +656 -0
- data/ext/ca_rng_normal.h +42 -0
- data/ext/ca_rng_xoshiro256pp.h +105 -0
- data/ext/ca_sort_kernels.h +70 -0
- data/ext/ca_sweep_engine.c +385 -198
- data/ext/ca_sweep_engine.h +31 -23
- data/ext/ca_triop_dispatch.c +4 -1
- data/ext/ca_triop_dispatch.h +5 -2
- data/ext/caframe_csv_reader.c +463 -0
- data/ext/carray.h +90 -28
- data/ext/carray_access.c +487 -231
- data/ext/carray_address_basis.c +731 -0
- data/ext/carray_attribute.c +45 -3
- data/ext/carray_bincount.c +32 -2
- data/ext/carray_broadcast.c +49 -17
- data/ext/carray_call_cfunc.c +667 -511
- data/ext/carray_cast.c +1556 -247
- data/ext/carray_cast_func.rb +34 -21
- data/ext/carray_conversion.c +197 -73
- data/ext/carray_copy.c +84 -38
- data/ext/carray_core.c +591 -119
- data/ext/carray_count.c +148 -96
- data/ext/carray_element.c +18 -27
- data/ext/carray_factorize.c +604 -291
- data/ext/carray_generate.c +76 -40
- data/ext/carray_histogram.c +152 -94
- data/ext/carray_hold.c +2 -1
- data/ext/carray_index_classifier.c +63 -96
- data/ext/carray_internal.h +400 -1
- data/ext/carray_lazy.c +834 -79
- data/ext/carray_loop.c +88 -66
- data/ext/carray_mask.c +705 -324
- data/ext/carray_math_kernel.h +1 -0
- data/ext/carray_median_percentile.c +263 -63
- data/ext/carray_memory_view.c +254 -248
- data/ext/carray_operator.c +1093 -363
- data/ext/carray_order.c +133 -69
- data/ext/carray_partition.c +102 -56
- data/ext/carray_random.c +582 -204
- data/ext/carray_scatter.c +308 -65
- data/ext/carray_segment.c +257 -0
- data/ext/carray_slab.c +183 -70
- data/ext/carray_sort.c +235 -240
- data/ext/carray_sort_kernel.c +8 -1
- data/ext/carray_struct.c +99 -21
- data/ext/carray_test.c +167 -64
- data/ext/carray_time_text.c +1182 -0
- data/ext/carray_utils.c +363 -98
- data/ext/extconf.rb +27 -2
- data/ext/mk_call_cfunc.rb +103 -118
- data/ext/mk_pow5_table.rb +35 -0
- data/ext/mkkernel.rb +1349 -851
- data/ext/ruby_carray.c +17 -2
- data/ext/version.h +4 -4
- data/ext/version.rb +4 -2
- data/lib/carray/attribute.rb +39 -0
- data/lib/carray/autoload_carray.rb +24 -3
- data/lib/carray/autoload_method_extension.rb +18 -0
- data/lib/carray/axis_group.rb +245 -20
- data/lib/carray/basics.rb +95 -25
- data/lib/carray/bincount_nd.rb +6 -0
- data/lib/carray/block_iterator.rb +200 -54
- data/lib/carray/boolean_reduce.rb +21 -29
- data/lib/carray/categorical.rb +244 -59
- data/lib/carray/categorical_iterator.rb +391 -757
- data/lib/carray/complex.rb +36 -29
- data/lib/carray/conditional.rb +94 -7
- data/lib/carray/const_string.rb +177 -27
- data/lib/carray/construct.rb +40 -0
- data/lib/carray/data_type_extension.rb +3 -0
- data/lib/carray/data_type_limits.rb +91 -0
- data/lib/carray/fixlen_string.rb +1 -1
- data/lib/carray/frame/concat.rb +157 -6
- data/lib/carray/frame/convert.rb +13 -7
- data/lib/carray/frame/csv_parser.rb +590 -76
- data/lib/carray/frame/describe.rb +79 -0
- data/lib/carray/frame/frame.rb +205 -35
- data/lib/carray/frame/group.rb +199 -40
- data/lib/carray/frame/io.rb +452 -60
- data/lib/carray/frame/join.rb +134 -46
- data/lib/carray/frame/records.rb +54 -19
- data/lib/carray/frame/reshape.rb +448 -0
- data/lib/carray/frame/sort.rb +26 -2
- data/lib/carray/frame/verbs.rb +726 -56
- data/lib/carray/frame.rb +2 -0
- data/lib/carray/fuse_source.rb +111 -2
- data/lib/carray/fusion.rb +229 -38
- data/lib/carray/inspect.rb +71 -20
- data/lib/carray/iterator.rb +157 -2
- data/lib/carray/lazy.rb +54 -67
- data/lib/carray/mask_gap_fill.rb +66 -50
- data/lib/carray/math.rb +32 -19
- data/lib/carray/meld_reduce.rb +40 -7
- data/lib/carray/methods/align_addr.rb +8 -4
- data/lib/carray/methods/bincount.rb +2 -2
- data/lib/carray/methods/bit_string.rb +14 -3
- data/lib/carray/methods/composition.rb +16 -10
- data/lib/carray/methods/discovery_along.rb +74 -0
- data/lib/carray/methods/factorize.rb +50 -0
- data/lib/carray/methods/gather_nd.rb +13 -2
- data/lib/carray/methods/insert_block.rb +9 -14
- data/lib/carray/methods/is_in.rb +130 -6
- data/lib/carray/methods/join.rb +1 -1
- data/lib/carray/methods/locate_addr.rb +235 -21
- data/lib/carray/methods/mask_duplicates.rb +35 -1
- data/lib/carray/methods/mode.rb +18 -1
- data/lib/carray/methods/nunique.rb +22 -1
- data/lib/carray/methods/repeat.rb +91 -0
- data/lib/carray/methods/resize.rb +21 -23
- data/lib/carray/methods/snap.rb +34 -12
- data/lib/carray/methods/unique.rb +52 -3
- data/lib/carray/record_order.rb +208 -0
- data/lib/carray/rng.rb +86 -0
- data/lib/carray/runtime.rb +14 -11
- data/lib/carray/segment_iterator.rb +990 -0
- data/lib/carray/serialize.rb +197 -27
- data/lib/carray/slab_iterator.rb +109 -40
- data/lib/carray/stack.rb +10 -4
- data/lib/carray/string_operation_extension.rb +9 -4
- data/lib/carray/struct.rb +142 -51
- data/lib/carray/struct_builder.rb +110 -14
- data/lib/carray/table.rb +2 -2
- data/lib/carray/time.rb +535 -105
- data/lib/carray/window_iterator.rb +259 -82
- data/lib/carray.rb +4 -2
- data/yard-stubs/ca_obj_array.rb +4 -4
- data/yard-stubs/ca_obj_bitarray.rb +7 -0
- data/yard-stubs/ca_obj_bitfield.rb +23 -12
- data/yard-stubs/ca_obj_block.rb +2 -7
- data/yard-stubs/ca_obj_fake.rb +1 -1
- data/yard-stubs/ca_obj_field.rb +1 -1
- data/yard-stubs/ca_obj_refer.rb +3 -3
- data/yard-stubs/ca_obj_roll.rb +0 -1
- data/yard-stubs/ca_obj_stride.rb +10 -7
- data/yard-stubs/ca_obj_transpose.rb +1 -1
- data/yard-stubs/ca_obj_window.rb +11 -4
- data/yard-stubs/carray_access.rb +6 -5
- data/yard-stubs/carray_broadcast.rb +2 -2
- data/yard-stubs/carray_cast.rb +78 -43
- data/yard-stubs/carray_conversion.rb +13 -1
- data/yard-stubs/carray_copy.rb +8 -3
- data/yard-stubs/carray_core.rb +3 -83
- data/yard-stubs/carray_count.rb +16 -2
- data/yard-stubs/carray_lazy.rb +210 -1
- data/yard-stubs/carray_loop.rb +4 -1
- data/yard-stubs/carray_mask.rb +34 -10
- data/yard-stubs/carray_math.rb +1499 -4
- data/yard-stubs/carray_median_percentile.rb +26 -8
- data/yard-stubs/carray_order.rb +43 -82
- data/yard-stubs/carray_scatter.rb +10 -3
- data/yard-stubs/carray_segment.rb +72 -0
- data/yard-stubs/carray_slab.rb +11 -8
- data/yard-stubs/carray_sort.rb +50 -8
- data/yard-stubs/carray_test.rb +10 -0
- data/yard-stubs/carray_utils.rb +0 -26
- metadata +19 -19
- data/ext/ca_for_each_element.h +0 -239
- data/ext/carray_build_flags.h +0 -3
- data/ext/carray_config.h +0 -28
- data/ext/carray_kernels_bincmp.c +0 -4446
- data/ext/carray_kernels_binop.c +0 -11001
- data/ext/carray_kernels_init.c +0 -1131
- data/ext/carray_kernels_map.c +0 -3467
- data/ext/carray_kernels_moncmp.c +0 -2097
- data/ext/carray_kernels_monop.c +0 -18313
- data/ext/carray_kernels_reduce_aggregate.c +0 -25837
- data/ext/carray_kernels_reduce_boolean.c +0 -330
- data/ext/carray_kernels_reduce_cumulative.c +0 -14593
- data/ext/carray_kernels_reduce_extreme.c +0 -16948
- data/ext/carray_kernels_reduce_variance.c +0 -3910
- data/ext/carray_kernels_scan.c +0 -3693
- data/ext/carray_kernels_search.c +0 -32138
- data/ext/carray_kernels_sort.c +0 -10626
- data/ext/carray_kernels_triop.c +0 -1392
data/ext/carray_loop.c
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
---------------------------------------------------------------------------- */
|
|
12
12
|
|
|
13
13
|
#include "carray.h"
|
|
14
|
+
#include "carray_internal.h" /* ca_attach_window */
|
|
14
15
|
|
|
15
16
|
static VALUE
|
|
16
17
|
rb_ca_s_each_index_internal (int ndim, VALUE *dim, uint8_t indim, VALUE ridx)
|
|
@@ -120,6 +121,13 @@ rb_ca_index_walk (VALUE self, CArray *ca, int8_t level,
|
|
|
120
121
|
volatile VALUE ret = Qnil;
|
|
121
122
|
ca_size_t i;
|
|
122
123
|
if ( level == ca->ndim - 1 ) {
|
|
124
|
+
/* One value-yield buffer for the whole innermost run. It was once an
|
|
125
|
+
ALLOCA_N inside the loop, which never releases per iteration: the C
|
|
126
|
+
stack grew by (ndim + 1) VALUEs per cell and a long enough axis
|
|
127
|
+
raised SystemStackError (a 1-D each_with_index / map_with_index!
|
|
128
|
+
died around a million cells on the main stack, and far earlier on a
|
|
129
|
+
Thread's smaller one). */
|
|
130
|
+
VALUE argv[CA_RANK_MAX + 1];
|
|
123
131
|
for (i=0; i<ca->dim[level]; i++) {
|
|
124
132
|
volatile VALUE obj;
|
|
125
133
|
idx[level] = i;
|
|
@@ -132,7 +140,6 @@ rb_ca_index_walk (VALUE self, CArray *ca, int8_t level,
|
|
|
132
140
|
that want the whole subscript should write |*idx|. */
|
|
133
141
|
if ( mode & CA_LOOP_WITH_VALUE ) {
|
|
134
142
|
int argc = (int)ca->ndim + 1;
|
|
135
|
-
VALUE *argv = ALLOCA_N(VALUE, argc);
|
|
136
143
|
argv[0] = rb_ca_fetch_index(self, idx);
|
|
137
144
|
MEMCPY(argv + 1, RARRAY_CONST_PTR(ridx), VALUE, ca->ndim);
|
|
138
145
|
obj = rb_yield_values2(argc, argv);
|
|
@@ -170,29 +177,89 @@ rb_ca_each_index (VALUE self)
|
|
|
170
177
|
return rb_ca_index_walk(self, ca, 0, idx, ridx, 0);
|
|
171
178
|
}
|
|
172
179
|
|
|
173
|
-
/*
|
|
174
|
-
block
|
|
175
|
-
|
|
180
|
+
/* The map! family yields inside self's attach window and converts
|
|
181
|
+
what the block returns, so each loop runs through ca_attach_window:
|
|
182
|
+
a raise, a break or a throw out of the block still syncs the cells
|
|
183
|
+
already stored and detaches self. */
|
|
184
|
+
|
|
185
|
+
typedef struct {
|
|
186
|
+
VALUE self;
|
|
187
|
+
CArray *ca;
|
|
188
|
+
volatile VALUE ridx;
|
|
189
|
+
int mode;
|
|
190
|
+
} ca_map_ctx_t;
|
|
191
|
+
|
|
176
192
|
static VALUE
|
|
177
|
-
|
|
193
|
+
ca_map_bang_body (VALUE arg)
|
|
178
194
|
{
|
|
195
|
+
ca_map_ctx_t *c = (ca_map_ctx_t *) arg;
|
|
179
196
|
volatile VALUE obj;
|
|
180
|
-
CArray *ca;
|
|
181
|
-
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
|
182
197
|
ca_size_t i;
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
198
|
+
for (i=0; i<c->ca->elements; i++) {
|
|
199
|
+
obj = rb_yield(rb_ca_fetch_addr(c->self, i));
|
|
200
|
+
rb_ca_store_addr(c->self, i, obj);
|
|
201
|
+
}
|
|
202
|
+
return Qnil;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
static VALUE
|
|
206
|
+
ca_map_with_addr_bang_body (VALUE arg)
|
|
207
|
+
{
|
|
208
|
+
ca_map_ctx_t *c = (ca_map_ctx_t *) arg;
|
|
209
|
+
volatile VALUE obj;
|
|
210
|
+
ca_size_t i;
|
|
211
|
+
for (i=0; i<c->ca->elements; i++) {
|
|
212
|
+
obj = rb_yield_values(2, rb_ca_fetch_addr(c->self, i), SIZE2NUM(i));
|
|
213
|
+
rb_ca_store_addr(c->self, i, obj);
|
|
214
|
+
}
|
|
215
|
+
return Qnil;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
static VALUE
|
|
219
|
+
ca_map_addr_bang_body (VALUE arg)
|
|
220
|
+
{
|
|
221
|
+
ca_map_ctx_t *c = (ca_map_ctx_t *) arg;
|
|
222
|
+
volatile VALUE obj;
|
|
223
|
+
ca_size_t i;
|
|
224
|
+
for (i=0; i<c->ca->elements; i++) {
|
|
225
|
+
obj = rb_yield(SIZE2NUM(i));
|
|
226
|
+
rb_ca_store_addr(c->self, i, obj);
|
|
190
227
|
}
|
|
191
|
-
|
|
192
|
-
|
|
228
|
+
return Qnil;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
static VALUE
|
|
232
|
+
ca_map_index_walk_body (VALUE arg)
|
|
233
|
+
{
|
|
234
|
+
ca_map_ctx_t *c = (ca_map_ctx_t *) arg;
|
|
235
|
+
ca_size_t idx[CA_RANK_MAX];
|
|
236
|
+
rb_ca_index_walk(c->self, c->ca, 0, idx, c->ridx, c->mode);
|
|
237
|
+
return Qnil;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* Runs body over self in a write window. mode is for the index walk. */
|
|
241
|
+
static VALUE
|
|
242
|
+
ca_map_bang_run (VALUE self, VALUE (*body)(VALUE), int mode)
|
|
243
|
+
{
|
|
244
|
+
ca_map_ctx_t c;
|
|
245
|
+
rb_ca_modify(self);
|
|
246
|
+
TypedData_Get_Struct(self, CArray, &carray_data_type, c.ca);
|
|
247
|
+
c.self = self;
|
|
248
|
+
c.ridx = rb_ary_new2(c.ca->ndim);
|
|
249
|
+
c.mode = mode;
|
|
250
|
+
ca_attach_window(1, &c.ca, "w", body, (VALUE) &c);
|
|
193
251
|
return self;
|
|
194
252
|
}
|
|
195
253
|
|
|
254
|
+
/* CArray#map! {|elem| ... } -- yield each cell value, store the
|
|
255
|
+
block's return back at the same flat address. Mutates self. */
|
|
256
|
+
static VALUE
|
|
257
|
+
rb_ca_map_bang (VALUE self)
|
|
258
|
+
{
|
|
259
|
+
RETURN_ENUMERATOR(self, 0, 0);
|
|
260
|
+
return ca_map_bang_run(self, ca_map_bang_body, 0);
|
|
261
|
+
}
|
|
262
|
+
|
|
196
263
|
/* CArray#each_with_index {|elem, i, j, ...| ... } -- yield each cell
|
|
197
264
|
value followed by its multi-dim index components (individual args;
|
|
198
265
|
see rb_ca_index_walk header). */
|
|
@@ -215,18 +282,9 @@ rb_ca_each_with_index (VALUE self)
|
|
|
215
282
|
static VALUE
|
|
216
283
|
rb_ca_map_with_index_bang (VALUE self)
|
|
217
284
|
{
|
|
218
|
-
CArray *ca;
|
|
219
|
-
ca_size_t idx[CA_RANK_MAX];
|
|
220
|
-
volatile VALUE ridx;
|
|
221
285
|
RETURN_ENUMERATOR(self, 0, 0);
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
ca_attach(ca);
|
|
225
|
-
ridx = rb_ary_new2(ca->ndim);
|
|
226
|
-
rb_ca_index_walk(self, ca, 0, idx, ridx, CA_LOOP_WITH_VALUE | CA_LOOP_STORE);
|
|
227
|
-
ca_sync(ca);
|
|
228
|
-
ca_detach(ca);
|
|
229
|
-
return self;
|
|
286
|
+
return ca_map_bang_run(self, ca_map_index_walk_body,
|
|
287
|
+
CA_LOOP_WITH_VALUE | CA_LOOP_STORE);
|
|
230
288
|
}
|
|
231
289
|
|
|
232
290
|
|
|
@@ -236,18 +294,8 @@ rb_ca_map_with_index_bang (VALUE self)
|
|
|
236
294
|
static VALUE
|
|
237
295
|
rb_ca_map_index_bang (VALUE self)
|
|
238
296
|
{
|
|
239
|
-
CArray *ca;
|
|
240
|
-
ca_size_t idx[CA_RANK_MAX];
|
|
241
|
-
volatile VALUE ridx;
|
|
242
297
|
RETURN_ENUMERATOR(self, 0, 0);
|
|
243
|
-
|
|
244
|
-
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
245
|
-
ca_attach(ca);
|
|
246
|
-
ridx = rb_ary_new2(ca->ndim);
|
|
247
|
-
rb_ca_index_walk(self, ca, 0, idx, ridx, CA_LOOP_STORE);
|
|
248
|
-
ca_sync(ca);
|
|
249
|
-
ca_detach(ca);
|
|
250
|
-
return self;
|
|
298
|
+
return ca_map_bang_run(self, ca_map_index_walk_body, CA_LOOP_STORE);
|
|
251
299
|
}
|
|
252
300
|
|
|
253
301
|
/* CArray#map_with_addr! {|elem, addr| ... } -- yield (value, flat
|
|
@@ -255,21 +303,8 @@ rb_ca_map_index_bang (VALUE self)
|
|
|
255
303
|
static VALUE
|
|
256
304
|
rb_ca_map_with_addr_bang (VALUE self)
|
|
257
305
|
{
|
|
258
|
-
volatile VALUE obj;
|
|
259
|
-
CArray *ca;
|
|
260
|
-
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
|
261
|
-
ca_size_t i;
|
|
262
306
|
RETURN_ENUMERATOR(self, 0, 0);
|
|
263
|
-
|
|
264
|
-
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
265
|
-
ca_attach(ca);
|
|
266
|
-
for (i=0; i<elements; i++) {
|
|
267
|
-
obj = rb_yield_values(2, rb_ca_fetch_addr(self, i), SIZE2NUM(i));
|
|
268
|
-
rb_ca_store_addr(self, i, obj);
|
|
269
|
-
}
|
|
270
|
-
ca_sync(ca);
|
|
271
|
-
ca_detach(ca);
|
|
272
|
-
return self;
|
|
307
|
+
return ca_map_bang_run(self, ca_map_with_addr_bang_body, 0);
|
|
273
308
|
}
|
|
274
309
|
|
|
275
310
|
|
|
@@ -278,21 +313,8 @@ rb_ca_map_with_addr_bang (VALUE self)
|
|
|
278
313
|
static VALUE
|
|
279
314
|
rb_ca_map_addr_bang (VALUE self)
|
|
280
315
|
{
|
|
281
|
-
volatile VALUE obj;
|
|
282
|
-
CArray *ca;
|
|
283
|
-
ca_size_t elements = NUM2SIZE(rb_ca_elements(self));
|
|
284
|
-
ca_size_t i;
|
|
285
316
|
RETURN_ENUMERATOR(self, 0, 0);
|
|
286
|
-
|
|
287
|
-
TypedData_Get_Struct(self, CArray, &carray_data_type, ca);
|
|
288
|
-
ca_attach(ca);
|
|
289
|
-
for (i=0; i<elements; i++) {
|
|
290
|
-
obj = rb_yield(SIZE2NUM(i));
|
|
291
|
-
rb_ca_store_addr(self, i, obj);
|
|
292
|
-
}
|
|
293
|
-
ca_sync(ca);
|
|
294
|
-
ca_detach(ca);
|
|
295
|
-
return self;
|
|
317
|
+
return ca_map_bang_run(self, ca_map_addr_bang_body, 0);
|
|
296
318
|
}
|
|
297
319
|
|
|
298
320
|
|