carray 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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_cast_func.rb
CHANGED
@@ -169,7 +169,7 @@ puts %{
|
|
169
169
|
#include "carray.h"
|
170
170
|
|
171
171
|
static void
|
172
|
-
ca_cast_not_implemented(
|
172
|
+
ca_cast_not_implemented(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
173
173
|
{
|
174
174
|
rb_raise(rb_eCADataTypeError,
|
175
175
|
"can not cast data type from <%s> to <%s>",
|
@@ -187,12 +187,12 @@ FIXLEN.each do |type1|
|
|
187
187
|
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
188
188
|
puts <<-END_DEF .gsub(/^ {6}/, '')
|
189
189
|
static void
|
190
|
-
ca_cast_#{ctype1}_#{ctype2}(
|
190
|
+
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
191
191
|
{
|
192
192
|
char *p1 = ptr1;
|
193
|
-
|
193
|
+
ca_size_t bytes1;
|
194
194
|
char *p2 = ptr2;
|
195
|
-
|
195
|
+
ca_size_t bytes2;
|
196
196
|
if ( a1 == NULL || a2 == NULL ) {
|
197
197
|
rb_raise(rb_eRuntimeError, "[BUG] failed to cast fixlen -> fixlen");
|
198
198
|
}
|
@@ -240,10 +240,10 @@ FIXLEN.each do |type1|
|
|
240
240
|
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
241
241
|
puts <<-END_DEF .gsub(/^ {6}/, '')
|
242
242
|
static void
|
243
|
-
ca_cast_#{ctype1}_#{ctype2}(
|
243
|
+
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
244
244
|
{
|
245
245
|
char *p1 = ptr1;
|
246
|
-
|
246
|
+
ca_size_t bytes;
|
247
247
|
VALUE *p2 = ptr2;
|
248
248
|
if ( a1 == NULL ) {
|
249
249
|
rb_raise(rb_eRuntimeError, "[BUG] failed to cast fixlen -> object");
|
@@ -278,7 +278,7 @@ puts
|
|
278
278
|
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
279
279
|
puts <<-END_DEF .gsub(/^ {6}/, '')
|
280
280
|
static void
|
281
|
-
ca_cast_#{ctype1}_#{ctype2}(
|
281
|
+
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
282
282
|
{
|
283
283
|
#{ctype1} *p1 = ptr1;
|
284
284
|
#{ctype2} *p2 = ptr2;
|
@@ -325,13 +325,13 @@ puts
|
|
325
325
|
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
326
326
|
puts <<-END_DEF .gsub(/^ {6}/, '')
|
327
327
|
static void
|
328
|
-
ca_cast_#{ctype1}_#{ctype2}(
|
328
|
+
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
329
329
|
{
|
330
330
|
#{ctype1} *q1 = ptr1;
|
331
331
|
#{ctype1} *p1 = q1;
|
332
332
|
#{ctype2} *q2 = ptr2;
|
333
333
|
#{ctype2} *p2 = q2;
|
334
|
-
|
334
|
+
ca_size_t k;
|
335
335
|
if ( m ) {
|
336
336
|
boolean8_t *pm = m;
|
337
337
|
#ifdef _OPENMP
|
@@ -375,18 +375,18 @@ puts
|
|
375
375
|
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
376
376
|
puts <<-END_DEF .gsub(/^ {6}/, '')
|
377
377
|
static void
|
378
|
-
ca_cast_#{ctype1}_#{ctype2}(
|
378
|
+
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
379
379
|
{
|
380
380
|
#{ctype1} *p1 = ptr1;
|
381
381
|
VALUE *p2 = ptr2;
|
382
382
|
if ( m ) {
|
383
383
|
while ( n-- ) {
|
384
|
-
if ( !*m ) { *p2 = #{conv}(*p1); }
|
384
|
+
if ( !*m ) { *p2 = (VALUE) #{conv}(*p1); }
|
385
385
|
p1++; p2++; m++;
|
386
386
|
}
|
387
387
|
}
|
388
388
|
else {
|
389
|
-
while ( n-- ) { *p2 = #{conv}(*p1); p1++; p2++; }
|
389
|
+
while ( n-- ) { *p2 = (VALUE) #{conv}(*p1); p1++; p2++; }
|
390
390
|
}
|
391
391
|
return;
|
392
392
|
}
|
@@ -404,11 +404,11 @@ OBJECT.each do |type1|
|
|
404
404
|
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
405
405
|
puts <<-END_DEF .gsub(/^ {6}/, '')
|
406
406
|
static void
|
407
|
-
ca_cast_#{ctype1}_#{ctype2}(
|
407
|
+
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
408
408
|
{
|
409
409
|
VALUE *p1 = ptr1;
|
410
410
|
char *p2 = ptr2;
|
411
|
-
|
411
|
+
ca_size_t bytes;
|
412
412
|
if ( a2 == NULL ) {
|
413
413
|
rb_raise(rb_eRuntimeError, "[BUG] failed to cast object -> fixlen");
|
414
414
|
}
|
@@ -463,18 +463,18 @@ OBJECT.each do |type1|
|
|
463
463
|
CA_CAST_TABLE[type1][type2] = "ca_cast_#{ctype1}_#{ctype2}"
|
464
464
|
puts <<-END_DEF .gsub(/^ {6}/, '')
|
465
465
|
static void
|
466
|
-
ca_cast_#{ctype1}_#{ctype2}(
|
466
|
+
ca_cast_#{ctype1}_#{ctype2}(ca_size_t n, CArray *a1, void *ptr1, CArray *a2, void *ptr2, boolean8_t *m)
|
467
467
|
{
|
468
468
|
VALUE *p1 = ptr1;
|
469
469
|
#{ctype2} *p2 = ptr2;
|
470
470
|
if ( m ) {
|
471
471
|
while ( n-- ) {
|
472
|
-
if ( !*m ) { *p2 = #{conv}(*p1); }
|
472
|
+
if ( !*m ) { *p2 = (#{ctype2}) #{conv}(*p1); }
|
473
473
|
p1++; p2++; m++;
|
474
474
|
}
|
475
475
|
}
|
476
476
|
else {
|
477
|
-
while ( n-- ) { *p2 = #{conv}(*p1); p1++; p2++; }
|
477
|
+
while ( n-- ) { *p2 = (#{ctype2}) #{conv}(*p1); p1++; p2++; }
|
478
478
|
}
|
479
479
|
return;
|
480
480
|
}
|
data/carray_class.c
CHANGED
@@ -70,9 +70,9 @@ static VALUE
|
|
70
70
|
rb_ca_s_sizeof (VALUE klass, VALUE rtype)
|
71
71
|
{
|
72
72
|
int8_t data_type;
|
73
|
-
|
74
|
-
rb_ca_guess_type_and_bytes(rtype,
|
75
|
-
return
|
73
|
+
ca_size_t bytes;
|
74
|
+
rb_ca_guess_type_and_bytes(rtype, INT2NUM(0), &data_type, &bytes);
|
75
|
+
return SIZE2NUM(bytes);
|
76
76
|
}
|
77
77
|
|
78
78
|
|
data/carray_conversion.c
CHANGED
@@ -19,11 +19,11 @@
|
|
19
19
|
#endif
|
20
20
|
|
21
21
|
static void
|
22
|
-
rb_ca_to_a_loop (VALUE self, int32_t level,
|
22
|
+
rb_ca_to_a_loop (VALUE self, int32_t level, ca_size_t *idx, VALUE ary)
|
23
23
|
{
|
24
24
|
volatile VALUE obj;
|
25
25
|
CArray *ca;
|
26
|
-
|
26
|
+
ca_size_t i;
|
27
27
|
|
28
28
|
Data_Get_Struct(self, CArray, ca);
|
29
29
|
|
@@ -57,7 +57,7 @@ rb_ca_to_a (VALUE self)
|
|
57
57
|
{
|
58
58
|
volatile VALUE ary;
|
59
59
|
CArray *ca;
|
60
|
-
|
60
|
+
ca_size_t idx[CA_RANK_MAX];
|
61
61
|
Data_Get_Struct(self, CArray, ca);
|
62
62
|
ary = rb_ary_new2(ca->dim[0]);
|
63
63
|
ca_attach(ca);
|
@@ -80,7 +80,7 @@ rb_ca_convert (int argc, VALUE *argv, VALUE self)
|
|
80
80
|
{
|
81
81
|
volatile VALUE obj;
|
82
82
|
CArray *ca;
|
83
|
-
|
83
|
+
ca_size_t i;
|
84
84
|
|
85
85
|
obj = rb_apply(self, rb_intern("template"), rb_ary_new4(argc, argv));
|
86
86
|
|
@@ -235,15 +235,15 @@ rb_ca_load_binary (VALUE self, VALUE io)
|
|
235
235
|
case T_STRING:
|
236
236
|
if ( ca_length(ca) > RSTRING_LEN(io) ) {
|
237
237
|
rb_raise(rb_eRuntimeError,
|
238
|
-
"data size mismatch (%
|
239
|
-
RSTRING_LEN(io), ca_length(ca));
|
238
|
+
"data size mismatch (%lld for %lld)",
|
239
|
+
(ca_size_t) RSTRING_LEN(io), (ca_size_t) ca_length(ca));
|
240
240
|
}
|
241
241
|
memcpy(ca->ptr, StringValuePtr(io), ca_length(ca));
|
242
242
|
OBJ_INFECT(self, io);
|
243
243
|
break;
|
244
244
|
default:
|
245
245
|
if ( rb_respond_to(io, rb_intern("read") ) ) {
|
246
|
-
VALUE buf = rb_funcall(io, rb_intern("read"), 1,
|
246
|
+
VALUE buf = rb_funcall(io, rb_intern("read"), 1, SIZE2NUM(ca_length(ca)));
|
247
247
|
memcpy(ca->ptr, StringValuePtr(buf), ca_length(ca));
|
248
248
|
OBJ_INFECT(self, io);
|
249
249
|
}
|
@@ -271,10 +271,10 @@ ca_to_cptr (void *ap)
|
|
271
271
|
CArray *ca = (CArray *) ap;
|
272
272
|
void **ptr, **p, **r;
|
273
273
|
char *q;
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
274
|
+
ca_size_t offset[CA_RANK_MAX];
|
275
|
+
ca_size_t count[CA_RANK_MAX];
|
276
|
+
ca_size_t ptr_num;
|
277
|
+
ca_size_t i, j;
|
278
278
|
|
279
279
|
if ( ! ca_is_attached(ca) ) {
|
280
280
|
rb_raise(rb_eRuntimeError, "[BUG] ca_to_cptr called for detached array");
|
@@ -331,12 +331,12 @@ rb_ca_format (int argc, VALUE *argv, VALUE self)
|
|
331
331
|
{
|
332
332
|
volatile VALUE obj, elem, val;
|
333
333
|
CArray *ca;
|
334
|
-
|
334
|
+
ca_size_t i, j;
|
335
335
|
ID id_format = rb_intern("format");
|
336
336
|
|
337
337
|
Data_Get_Struct(self, CArray, ca);
|
338
338
|
|
339
|
-
obj = rb_ca_template_with_type(self,
|
339
|
+
obj = rb_ca_template_with_type(self, INT2NUM(CA_OBJECT), INT2NUM(0));
|
340
340
|
|
341
341
|
ca_attach(ca);
|
342
342
|
if ( ca_has_mask(ca) ) {
|
@@ -379,7 +379,7 @@ rb_ca_strptime (VALUE self, VALUE rfmt)
|
|
379
379
|
CArray *ca;
|
380
380
|
char *fmt;
|
381
381
|
struct tm tmv;
|
382
|
-
|
382
|
+
ca_size_t i;
|
383
383
|
|
384
384
|
ca = ca_wrap_readonly(self, CA_OBJECT);
|
385
385
|
|
@@ -431,7 +431,7 @@ rb_ca_strftime (VALUE self, VALUE rfmt)
|
|
431
431
|
{
|
432
432
|
volatile VALUE obj, elem, val;
|
433
433
|
CArray *ca;
|
434
|
-
|
434
|
+
ca_size_t i;
|
435
435
|
ID id_strftime = rb_intern("strftime");
|
436
436
|
|
437
437
|
ca = ca_wrap_readonly(self, CA_OBJECT);
|
data/carray_copy.c
CHANGED
@@ -89,7 +89,7 @@ ca_template_safe (void *ap)
|
|
89
89
|
}
|
90
90
|
|
91
91
|
CArray *
|
92
|
-
ca_template_safe2 (void *ap, int8_t data_type,
|
92
|
+
ca_template_safe2 (void *ap, int8_t data_type, ca_size_t bytes)
|
93
93
|
{
|
94
94
|
CArray *ca = (CArray *) ap;
|
95
95
|
CA_CHECK_DATA_TYPE(data_type);
|
@@ -119,9 +119,9 @@ rb_ca_template_method (int argc, VALUE *argv, VALUE self)
|
|
119
119
|
volatile VALUE obj, rtype, rbytes = Qnil;
|
120
120
|
CArray *ca, *co;
|
121
121
|
int8_t data_type;
|
122
|
-
|
122
|
+
ca_size_t bytes;
|
123
123
|
|
124
|
-
rb_scan_args(argc, argv, "01", &rtype);
|
124
|
+
rb_scan_args(argc, argv, "01", (VALUE *) &rtype);
|
125
125
|
rb_scan_options(ropt, "bytes", &rbytes);
|
126
126
|
|
127
127
|
Data_Get_Struct(self, CArray, ca);
|
@@ -168,7 +168,7 @@ rb_ca_template_n (int n, ...)
|
|
168
168
|
{
|
169
169
|
volatile VALUE varg, obj;
|
170
170
|
CArray *ca;
|
171
|
-
|
171
|
+
ca_size_t elements = -1;
|
172
172
|
va_list vargs;
|
173
173
|
int i;
|
174
174
|
|
@@ -204,11 +204,11 @@ rb_ca_template_n (int n, ...)
|
|
204
204
|
/* ------------------------------------------------------------------- */
|
205
205
|
|
206
206
|
static void
|
207
|
-
ca_paste_loop (CArray *ca,
|
208
|
-
|
209
|
-
int32_t level,
|
207
|
+
ca_paste_loop (CArray *ca, ca_size_t *offset, ca_size_t *offset0,
|
208
|
+
ca_size_t *size, CArray *cs,
|
209
|
+
int32_t level, ca_size_t *idx, ca_size_t *idx0)
|
210
210
|
{
|
211
|
-
|
211
|
+
ca_size_t i;
|
212
212
|
if ( level == ca->rank - 1 ) {
|
213
213
|
idx[level] = offset[level];
|
214
214
|
idx0[level] = offset0[level];
|
@@ -229,15 +229,15 @@ ca_paste_loop (CArray *ca, int32_t *offset, int32_t *offset0,
|
|
229
229
|
/* ------------------------------------------------------------------- */
|
230
230
|
|
231
231
|
void
|
232
|
-
ca_paste (void *ap,
|
232
|
+
ca_paste (void *ap, ca_size_t *offset, void *sp)
|
233
233
|
{
|
234
234
|
CArray *ca = (CArray *) ap;
|
235
235
|
CArray *cs = (CArray *) sp;
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
236
|
+
ca_size_t size[CA_RANK_MAX];
|
237
|
+
ca_size_t offset0[CA_RANK_MAX];
|
238
|
+
ca_size_t idx[CA_RANK_MAX];
|
239
|
+
ca_size_t idx0[CA_RANK_MAX];
|
240
|
+
int8_t i;
|
241
241
|
|
242
242
|
ca_check_same_data_type(ca, cs);
|
243
243
|
ca_check_same_rank(ca, cs);
|
@@ -298,7 +298,7 @@ static VALUE
|
|
298
298
|
rb_ca_paste (VALUE self, VALUE roffset, VALUE rsrc)
|
299
299
|
{
|
300
300
|
CArray *ca, *cs;
|
301
|
-
|
301
|
+
ca_size_t offset[CA_RANK_MAX];
|
302
302
|
int i;
|
303
303
|
|
304
304
|
rb_ca_modify(self);
|
@@ -313,7 +313,7 @@ rb_ca_paste (VALUE self, VALUE roffset, VALUE rsrc)
|
|
313
313
|
}
|
314
314
|
|
315
315
|
for (i=0; i<ca->rank; i++) {
|
316
|
-
offset[i] =
|
316
|
+
offset[i] = NUM2SIZE(rb_ary_entry(roffset,i));
|
317
317
|
}
|
318
318
|
|
319
319
|
cs = ca_wrap_readonly(rsrc, ca->data_type);
|
@@ -325,11 +325,11 @@ rb_ca_paste (VALUE self, VALUE roffset, VALUE rsrc)
|
|
325
325
|
|
326
326
|
|
327
327
|
static void
|
328
|
-
ca_clip_loop (CArray *ca,
|
329
|
-
|
330
|
-
int32_t level,
|
328
|
+
ca_clip_loop (CArray *ca, ca_size_t *offset, ca_size_t *offset0,
|
329
|
+
ca_size_t *size, CArray *cs,
|
330
|
+
int32_t level, ca_size_t *idx, ca_size_t *idx0)
|
331
331
|
{
|
332
|
-
|
332
|
+
ca_size_t i;
|
333
333
|
if ( level == ca->rank - 1 ) {
|
334
334
|
idx[level] = offset[level];
|
335
335
|
idx0[level] = offset0[level];
|
@@ -347,14 +347,14 @@ ca_clip_loop (CArray *ca, int32_t *offset, int32_t *offset0,
|
|
347
347
|
/* ------------------------------------------------------------------- */
|
348
348
|
|
349
349
|
void
|
350
|
-
ca_clip (void *ap,
|
350
|
+
ca_clip (void *ap, ca_size_t *offset, void *sp)
|
351
351
|
{
|
352
352
|
CArray *ca = (CArray *) ap;
|
353
353
|
CArray *cs = (CArray *) sp;
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
354
|
+
ca_size_t size[CA_RANK_MAX];
|
355
|
+
ca_size_t offset0[CA_RANK_MAX];
|
356
|
+
ca_size_t idx[CA_RANK_MAX];
|
357
|
+
ca_size_t idx0[CA_RANK_MAX];
|
358
358
|
int i;
|
359
359
|
|
360
360
|
ca_check_same_data_type(ca, cs);
|
@@ -414,7 +414,7 @@ static VALUE
|
|
414
414
|
rb_ca_clip (VALUE self, VALUE roffset, VALUE rsrc)
|
415
415
|
{
|
416
416
|
CArray *ca, *cs;
|
417
|
-
|
417
|
+
ca_size_t offset[CA_RANK_MAX];
|
418
418
|
int i;
|
419
419
|
|
420
420
|
Data_Get_Struct(self, CArray, ca);
|
@@ -427,7 +427,7 @@ rb_ca_clip (VALUE self, VALUE roffset, VALUE rsrc)
|
|
427
427
|
}
|
428
428
|
|
429
429
|
for (i=0; i<ca->rank; i++) {
|
430
|
-
offset[i] =
|
430
|
+
offset[i] = NUM2SIZE(rb_ary_entry(roffset, i));
|
431
431
|
}
|
432
432
|
|
433
433
|
cs = ca_wrap_writable(rsrc, ca->data_type);
|
data/carray_core.c
CHANGED
@@ -329,7 +329,7 @@ ca_mark (void *ap)
|
|
329
329
|
if ( ca_is_object_type(ca) ) { /* object type array */
|
330
330
|
if ( ca_is_attached(ca) ) { /* entity array */
|
331
331
|
VALUE *p = (VALUE*) ca->ptr;
|
332
|
-
|
332
|
+
ca_size_t n = ca->elements;
|
333
333
|
while ( n-- ) {
|
334
334
|
rb_gc_mark(*p++);
|
335
335
|
}
|
@@ -377,11 +377,11 @@ ca_wrap_struct (void *ap)
|
|
377
377
|
/* calculate index from address */
|
378
378
|
|
379
379
|
void
|
380
|
-
ca_addr2index (void *ap,
|
380
|
+
ca_addr2index (void *ap, ca_size_t addr, ca_size_t *idx)
|
381
381
|
{
|
382
382
|
CArray *ca = (CArray *) ap;
|
383
|
-
|
384
|
-
|
383
|
+
ca_size_t *dim = ca->dim;
|
384
|
+
int8_t i;
|
385
385
|
for (i=ca->rank-1; i>=0; i--) {
|
386
386
|
idx[i] = addr % dim[i];
|
387
387
|
addr /= dim[i];
|
@@ -390,12 +390,13 @@ ca_addr2index (void *ap, int32_t addr, int32_t *idx)
|
|
390
390
|
|
391
391
|
/* calculate address from index */
|
392
392
|
|
393
|
-
|
394
|
-
ca_index2addr (void *ap,
|
393
|
+
ca_size_t
|
394
|
+
ca_index2addr (void *ap, ca_size_t *idx)
|
395
395
|
{
|
396
396
|
CArray *ca = (CArray *) ap;
|
397
|
-
|
398
|
-
|
397
|
+
ca_size_t *dim = ca->dim;
|
398
|
+
int8_t i;
|
399
|
+
ca_size_t n;
|
399
400
|
n = idx[0];
|
400
401
|
for (i=1; i<ca->rank; i++) {
|
401
402
|
n = dim[i]*n+idx[i];
|
@@ -457,7 +458,7 @@ ca_test_cyclic_check(void *ap, void *ptr)
|
|
457
458
|
/* return pointer of the element at given address */
|
458
459
|
|
459
460
|
void *
|
460
|
-
ca_ptr_at_addr (void *ap,
|
461
|
+
ca_ptr_at_addr (void *ap, ca_size_t addr)
|
461
462
|
{
|
462
463
|
CArray *ca = (CArray *) ap;
|
463
464
|
|
@@ -478,7 +479,7 @@ ca_ptr_at_addr (void *ap, int32_t addr)
|
|
478
479
|
/* return pointer of the element at given index */
|
479
480
|
|
480
481
|
void *
|
481
|
-
ca_ptr_at_index (void *ap,
|
482
|
+
ca_ptr_at_index (void *ap, ca_size_t *idx)
|
482
483
|
{
|
483
484
|
CArray *ca = (CArray *) ap;
|
484
485
|
return ca_func[ca->obj_type].ptr_at_index(ca, idx);
|
@@ -487,7 +488,7 @@ ca_ptr_at_index (void *ap, int32_t *idx)
|
|
487
488
|
/* fetch data of the element at given address to memory pointed by pval */
|
488
489
|
|
489
490
|
void
|
490
|
-
ca_fetch_addr (void *ap,
|
491
|
+
ca_fetch_addr (void *ap, ca_size_t addr, void *pval)
|
491
492
|
{
|
492
493
|
CArray *ca = (CArray *) ap;
|
493
494
|
char *ptr = (char *)pval;
|
@@ -501,7 +502,7 @@ ca_fetch_addr (void *ap, int32_t addr, void *pval)
|
|
501
502
|
ca_func[ca->obj_type].fetch_addr(ca, addr, ptr);
|
502
503
|
}
|
503
504
|
else if ( ca_func[ca->obj_type].fetch_index ) { /* delegate -> fetch_index */
|
504
|
-
|
505
|
+
ca_size_t idx[CA_RANK_MAX];
|
505
506
|
ca_addr2index(ca, addr, idx);
|
506
507
|
ca_func[ca->obj_type].fetch_index(ca, idx, ptr);
|
507
508
|
}
|
@@ -520,7 +521,7 @@ ca_fetch_addr (void *ap, int32_t addr, void *pval)
|
|
520
521
|
/* store value pointed by pval to the element at given address */
|
521
522
|
|
522
523
|
void
|
523
|
-
ca_store_addr (void *ap,
|
524
|
+
ca_store_addr (void *ap, ca_size_t addr, void *pval)
|
524
525
|
{
|
525
526
|
CArray *ca = (CArray *) ap;
|
526
527
|
char *ptr = (char *)pval;
|
@@ -539,7 +540,7 @@ ca_store_addr (void *ap, int32_t addr, void *pval)
|
|
539
540
|
ca_func[ca->obj_type].store_addr(ca, addr, ptr);
|
540
541
|
}
|
541
542
|
else if ( ca_func[ca->obj_type].store_index ) { /* delegate -> store_index */
|
542
|
-
|
543
|
+
ca_size_t idx[CA_RANK_MAX];
|
543
544
|
ca_addr2index(ca, addr, idx);
|
544
545
|
ca_func[ca->obj_type].store_index(ca, idx, ptr);
|
545
546
|
}
|
@@ -558,7 +559,7 @@ ca_store_addr (void *ap, int32_t addr, void *pval)
|
|
558
559
|
/* fetch data of the element at given index to memory pointed by pval */
|
559
560
|
|
560
561
|
void
|
561
|
-
ca_fetch_index (void *ap,
|
562
|
+
ca_fetch_index (void *ap, ca_size_t *idx, void *pval)
|
562
563
|
{
|
563
564
|
CArray *ca = (CArray *) ap;
|
564
565
|
char *ptr = (char *)pval;
|
@@ -569,7 +570,7 @@ ca_fetch_index (void *ap, int32_t *idx, void *pval)
|
|
569
570
|
ca_func[ca->obj_type].fetch_index(ca, idx, ptr);
|
570
571
|
}
|
571
572
|
else if ( ca_func[ca->obj_type].fetch_addr ) { /* delegate -> fetch_addr */
|
572
|
-
|
573
|
+
ca_size_t addr = ca_index2addr(ca, idx);
|
573
574
|
ca_func[ca->obj_type].fetch_addr(ca, addr, ptr);
|
574
575
|
}
|
575
576
|
else {
|
@@ -588,7 +589,7 @@ ca_fetch_index (void *ap, int32_t *idx, void *pval)
|
|
588
589
|
/* store value pointed by pval to the element at given index */
|
589
590
|
|
590
591
|
void
|
591
|
-
ca_store_index (void *ap,
|
592
|
+
ca_store_index (void *ap, ca_size_t *idx, void *pval)
|
592
593
|
{
|
593
594
|
CArray *ca = (CArray *) ap;
|
594
595
|
char *ptr = (char *) pval;
|
@@ -604,7 +605,7 @@ ca_store_index (void *ap, int32_t *idx, void *pval)
|
|
604
605
|
ca_func[ca->obj_type].store_index(ca, idx, ptr);
|
605
606
|
}
|
606
607
|
else if ( ca_func[ca->obj_type].store_addr ) { /* delegate -> store_addr */
|
607
|
-
|
608
|
+
ca_size_t addr = ca_index2addr(ca, idx);
|
608
609
|
ca_func[ca->obj_type].store_addr(ca, addr, ptr);
|
609
610
|
}
|
610
611
|
else {
|
@@ -648,9 +649,9 @@ ca_allocate (void *ap)
|
|
648
649
|
}
|
649
650
|
|
650
651
|
if ( ca->data_type == CA_OBJECT ) { /* protection against GC */
|
651
|
-
volatile VALUE rzero =
|
652
|
+
volatile VALUE rzero = INT2NUM(0);
|
652
653
|
VALUE *p = (VALUE*)ca->ptr;
|
653
|
-
|
654
|
+
ca_size_t i;
|
654
655
|
for (i=0; i<ca->elements; i++) {
|
655
656
|
*p++ = rzero;
|
656
657
|
}
|
@@ -1205,7 +1206,7 @@ rb_ca_field_as_member (VALUE self, VALUE sym)
|
|
1205
1206
|
}
|
1206
1207
|
else if ( rb_obj_is_kind_of(sym, rb_cInteger) ) {
|
1207
1208
|
VALUE member_names = rb_const_get(data_class, rb_intern("MEMBERS"));
|
1208
|
-
sym = rb_ary_entry(member_names,
|
1209
|
+
sym = rb_ary_entry(member_names, NUM2SIZE(sym));
|
1209
1210
|
}
|
1210
1211
|
|
1211
1212
|
obj = rb_hash_aref(member, sym);
|