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_mask.c
CHANGED
@@ -39,7 +39,7 @@ ca_has_mask (void *ap)
|
|
39
39
|
else if ( ca_is_caobject(ca) ) { /* CAObject */
|
40
40
|
CAObject *co = (CAObject *) ca;
|
41
41
|
if ( rb_obj_respond_to(co->self, rb_intern("mask_created?"), Qtrue) ) {
|
42
|
-
return rb_funcall(co->self, rb_intern("mask_created?"), 0);
|
42
|
+
return RTEST(rb_funcall(co->self, rb_intern("mask_created?"), 0));
|
43
43
|
}
|
44
44
|
return ( ca->mask != NULL ) ? 1 : 0;
|
45
45
|
}
|
@@ -60,7 +60,7 @@ ca_is_any_masked (void *ap)
|
|
60
60
|
{
|
61
61
|
CArray *ca = (CArray *) ap;
|
62
62
|
boolean8_t *m;
|
63
|
-
|
63
|
+
ca_size_t i;
|
64
64
|
int flag = 0;
|
65
65
|
|
66
66
|
ca_update_mask(ca);
|
@@ -84,7 +84,7 @@ ca_is_all_masked (void *ap)
|
|
84
84
|
{
|
85
85
|
CArray *ca = (CArray *) ap;
|
86
86
|
boolean8_t *m;
|
87
|
-
|
87
|
+
ca_size_t i;
|
88
88
|
int flag;
|
89
89
|
|
90
90
|
ca_update_mask(ca);
|
@@ -177,20 +177,20 @@ ca_setup_mask (void *ap, CArray *mask)
|
|
177
177
|
}
|
178
178
|
|
179
179
|
/*
|
180
|
-
ca_copy_mask_overlay_n (void *ap,
|
180
|
+
ca_copy_mask_overlay_n (void *ap, ca_size_t elements, int n, CArray **slist)
|
181
181
|
|
182
182
|
+ slist[i] can be NULL (simply skipped)
|
183
183
|
|
184
184
|
*/
|
185
185
|
|
186
186
|
void
|
187
|
-
ca_copy_mask_overlay_n (void *ap,
|
187
|
+
ca_copy_mask_overlay_n (void *ap, ca_size_t elements, int n, CArray **slist)
|
188
188
|
{
|
189
189
|
CArray *ca = (CArray *) ap;
|
190
190
|
CArray *cs;
|
191
191
|
boolean8_t *ma, *ms;
|
192
192
|
int i, some_has_mask = 0;
|
193
|
-
|
193
|
+
ca_size_t j;
|
194
194
|
|
195
195
|
for (i=0; i<n; i++) {
|
196
196
|
if ( slist[i] && ca_has_mask(slist[i]) ) {
|
@@ -247,7 +247,7 @@ ca_copy_mask_overlay_n (void *ap, int32_t elements, int n, CArray **slist)
|
|
247
247
|
}
|
248
248
|
|
249
249
|
void
|
250
|
-
ca_copy_mask_overlay (void *ap,
|
250
|
+
ca_copy_mask_overlay (void *ap, ca_size_t elements, int n, ...)
|
251
251
|
{
|
252
252
|
CArray *ca = (CArray *) ap;
|
253
253
|
CArray **slist;
|
@@ -267,7 +267,7 @@ ca_copy_mask_overlay (void *ap, int32_t elements, int n, ...)
|
|
267
267
|
}
|
268
268
|
|
269
269
|
void
|
270
|
-
ca_copy_mask_overwrite_n (void *ap,
|
270
|
+
ca_copy_mask_overwrite_n (void *ap, ca_size_t elements, int n, CArray **slist)
|
271
271
|
{
|
272
272
|
CArray *ca = (CArray *) ap;
|
273
273
|
|
@@ -281,7 +281,7 @@ ca_copy_mask_overwrite_n (void *ap, int32_t elements, int n, CArray **slist)
|
|
281
281
|
}
|
282
282
|
|
283
283
|
void
|
284
|
-
ca_copy_mask_overwrite (void *ap,
|
284
|
+
ca_copy_mask_overwrite (void *ap, ca_size_t elements, int n, ...)
|
285
285
|
{
|
286
286
|
CArray *ca = (CArray *) ap;
|
287
287
|
CArray **slist;
|
@@ -315,12 +315,12 @@ ca_copy_mask (void *ap, void *ao)
|
|
315
315
|
ca_copy_mask_overlay(ca, ca->elements, 1, co);
|
316
316
|
}
|
317
317
|
|
318
|
-
|
318
|
+
ca_size_t
|
319
319
|
ca_count_masked (void *ap)
|
320
320
|
{
|
321
321
|
CArray *ca = (CArray *) ap;
|
322
322
|
boolean8_t *m;
|
323
|
-
|
323
|
+
ca_size_t i, count = 0;
|
324
324
|
|
325
325
|
ca_update_mask(ca);
|
326
326
|
|
@@ -338,7 +338,7 @@ ca_count_masked (void *ap)
|
|
338
338
|
return count;
|
339
339
|
}
|
340
340
|
|
341
|
-
|
341
|
+
ca_size_t
|
342
342
|
ca_count_not_masked (void *ap)
|
343
343
|
{
|
344
344
|
CArray *ca = (CArray *) ap;
|
@@ -347,7 +347,7 @@ ca_count_not_masked (void *ap)
|
|
347
347
|
|
348
348
|
#define proc_fill_bang(type) \
|
349
349
|
{ \
|
350
|
-
|
350
|
+
ca_size_t i; \
|
351
351
|
type *p = (type *)ca->ptr; \
|
352
352
|
type v = *(type *)fill_value; \
|
353
353
|
boolean8_t *m = (boolean8_t *) ca->mask->ptr; \
|
@@ -362,7 +362,7 @@ ca_count_not_masked (void *ap)
|
|
362
362
|
|
363
363
|
#define proc_fill_bang_fixlen() \
|
364
364
|
{ \
|
365
|
-
|
365
|
+
ca_size_t i; \
|
366
366
|
char *p = ca->ptr; \
|
367
367
|
boolean8_t *m = (boolean8_t *) ca->mask->ptr; \
|
368
368
|
for (i=0; i<ca->elements; i++) { \
|
@@ -424,7 +424,7 @@ ca_unmask_copy (void *ap, char *fill_value)
|
|
424
424
|
CArray *co;
|
425
425
|
char *p, *q;
|
426
426
|
boolean8_t *m;
|
427
|
-
|
427
|
+
ca_size_t i;
|
428
428
|
|
429
429
|
co = ca_template(ca);
|
430
430
|
ca_copy_data(ca, co->ptr);
|
@@ -451,7 +451,7 @@ ca_invert_mask (void *ap)
|
|
451
451
|
{
|
452
452
|
CArray *ca = (CArray *) ap;
|
453
453
|
boolean8_t *m;
|
454
|
-
|
454
|
+
ca_size_t i;
|
455
455
|
|
456
456
|
ca_update_mask(ca);
|
457
457
|
|
@@ -475,7 +475,7 @@ ca_allocate_mask_iterator_n (int n, CArray **slist)
|
|
475
475
|
{
|
476
476
|
boolean8_t *m, *mp, *ms;
|
477
477
|
CArray *cs;
|
478
|
-
|
478
|
+
ca_size_t j, elements = -1;
|
479
479
|
int i, some_has_mask = 0;
|
480
480
|
|
481
481
|
for (i=0; i<n; i++) {
|
@@ -771,7 +771,7 @@ rb_ca_is_masked (VALUE self)
|
|
771
771
|
CArray *ca, *cm, *co;
|
772
772
|
boolean8_t zero = 0;
|
773
773
|
boolean8_t *m, *p;
|
774
|
-
|
774
|
+
ca_size_t i;
|
775
775
|
|
776
776
|
Data_Get_Struct(self, CArray, ca);
|
777
777
|
|
@@ -814,7 +814,7 @@ rb_ca_is_not_masked (VALUE self)
|
|
814
814
|
CArray *ca, *cm, *co;
|
815
815
|
boolean8_t one = 1;
|
816
816
|
boolean8_t *m, *p;
|
817
|
-
|
817
|
+
ca_size_t i;
|
818
818
|
|
819
819
|
Data_Get_Struct(self, CArray, ca);
|
820
820
|
|
@@ -853,7 +853,7 @@ rb_ca_count_masked (VALUE self)
|
|
853
853
|
{
|
854
854
|
CArray *ca;
|
855
855
|
Data_Get_Struct(self, CArray, ca);
|
856
|
-
return
|
856
|
+
return SIZE2NUM(ca_count_masked(ca));
|
857
857
|
}
|
858
858
|
|
859
859
|
/* rdoc:
|
@@ -869,7 +869,7 @@ rb_ca_count_not_masked (VALUE self)
|
|
869
869
|
{
|
870
870
|
CArray *ca;
|
871
871
|
Data_Get_Struct(self, CArray, ca);
|
872
|
-
return
|
872
|
+
return SIZE2NUM(ca_count_not_masked(ca));
|
873
873
|
}
|
874
874
|
|
875
875
|
static VALUE
|
data/carray_math.rb
CHANGED
@@ -148,7 +148,7 @@ monfunc("rcp", "rcp",
|
|
148
148
|
INT_TYPES => "if ((#1)==0) {ca_zerodiv();}; (#2) = 1/(#1);",
|
149
149
|
FLOAT_TYPES => "(#2) = 1/(#1);",
|
150
150
|
CMPLX_TYPES => HAVE_COMPLEX ? "(#2) = 1/(#1);" : nil,
|
151
|
-
OBJ_TYPES => '(#2) = rb_funcall(
|
151
|
+
OBJ_TYPES => '(#2) = rb_funcall(INT2NUM(1), id_slash, 1, (#1));')
|
152
152
|
monfunc("sqrt", "sqrt",
|
153
153
|
FLOAT_TYPES => "(#2) = sqrt(#1);",
|
154
154
|
CMPLX_TYPES => HAVE_COMPLEX ? "(#2) = csqrt(#1);" : nil,
|
@@ -283,10 +283,10 @@ static VALUE
|
|
283
283
|
rb_ca_bit_and (VALUE self, VALUE other)
|
284
284
|
{
|
285
285
|
if ( rb_ca_is_boolean_type(self) ) {
|
286
|
-
return rb_ca_bit_and_i(self, rb_ca_wrap_readonly(other,
|
286
|
+
return rb_ca_bit_and_i(self, rb_ca_wrap_readonly(other, INT2NUM(CA_BOOLEAN)));
|
287
287
|
}
|
288
288
|
else if ( rb_obj_is_carray(other) && rb_ca_is_boolean_type(other) ) {
|
289
|
-
return rb_ca_bit_and_i(rb_ca_wrap_readonly(self,
|
289
|
+
return rb_ca_bit_and_i(rb_ca_wrap_readonly(self, INT2NUM(CA_BOOLEAN)), other);
|
290
290
|
}
|
291
291
|
else {
|
292
292
|
return rb_ca_bit_and_i(self, other);
|
@@ -297,10 +297,10 @@ static VALUE
|
|
297
297
|
rb_ca_bit_or (VALUE self, VALUE other)
|
298
298
|
{
|
299
299
|
if ( rb_ca_is_boolean_type(self) ) {
|
300
|
-
return rb_ca_bit_or_i(self, rb_ca_wrap_readonly(other,
|
300
|
+
return rb_ca_bit_or_i(self, rb_ca_wrap_readonly(other, INT2NUM(CA_BOOLEAN)));
|
301
301
|
}
|
302
302
|
else if ( rb_obj_is_carray(other) && rb_ca_is_boolean_type(other) ) {
|
303
|
-
return rb_ca_bit_or_i(rb_ca_wrap_readonly(self,
|
303
|
+
return rb_ca_bit_or_i(rb_ca_wrap_readonly(self, INT2NUM(CA_BOOLEAN)), other);
|
304
304
|
}
|
305
305
|
else {
|
306
306
|
return rb_ca_bit_or_i(self, other);
|
@@ -311,10 +311,10 @@ static VALUE
|
|
311
311
|
rb_ca_bit_xor (VALUE self, VALUE other)
|
312
312
|
{
|
313
313
|
if ( rb_ca_is_boolean_type(self) ) {
|
314
|
-
return rb_ca_bit_xor_i(self, rb_ca_wrap_readonly(other,
|
314
|
+
return rb_ca_bit_xor_i(self, rb_ca_wrap_readonly(other, INT2NUM(CA_BOOLEAN)));
|
315
315
|
}
|
316
316
|
else if ( rb_obj_is_carray(other) && rb_ca_is_boolean_type(other) ) {
|
317
|
-
return rb_ca_bit_xor_i(rb_ca_wrap_readonly(self,
|
317
|
+
return rb_ca_bit_xor_i(rb_ca_wrap_readonly(self, INT2NUM(CA_BOOLEAN)), other);
|
318
318
|
}
|
319
319
|
else {
|
320
320
|
return rb_ca_bit_xor_i(self, other);
|
@@ -415,10 +415,10 @@ static VALUE
|
|
415
415
|
rb_ca_and (VALUE self, VALUE other)
|
416
416
|
{
|
417
417
|
if ( rb_ca_is_boolean_type(self) ) {
|
418
|
-
return rb_ca_and_i(self, rb_ca_wrap_readonly(other,
|
418
|
+
return rb_ca_and_i(self, rb_ca_wrap_readonly(other, INT2NUM(CA_BOOLEAN)));
|
419
419
|
}
|
420
420
|
else if ( rb_obj_is_carray(other) && rb_ca_is_boolean_type(other) ) {
|
421
|
-
return rb_ca_and_i(rb_ca_wrap_readonly(self,
|
421
|
+
return rb_ca_and_i(rb_ca_wrap_readonly(self, INT2NUM(CA_BOOLEAN)), other);
|
422
422
|
}
|
423
423
|
else {
|
424
424
|
return rb_ca_and_i(self, other);
|
@@ -429,10 +429,10 @@ static VALUE
|
|
429
429
|
rb_ca_or (VALUE self, VALUE other)
|
430
430
|
{
|
431
431
|
if ( rb_ca_is_boolean_type(self) ) {
|
432
|
-
return rb_ca_or_i(self, rb_ca_wrap_readonly(other,
|
432
|
+
return rb_ca_or_i(self, rb_ca_wrap_readonly(other, INT2NUM(CA_BOOLEAN)));
|
433
433
|
}
|
434
434
|
else if ( rb_obj_is_carray(other) && rb_ca_is_boolean_type(other) ) {
|
435
|
-
return rb_ca_or_i(rb_ca_wrap_readonly(self,
|
435
|
+
return rb_ca_or_i(rb_ca_wrap_readonly(self, INT2NUM(CA_BOOLEAN)), other);
|
436
436
|
}
|
437
437
|
else {
|
438
438
|
return rb_ca_or_i(self, other);
|
@@ -443,10 +443,10 @@ static VALUE
|
|
443
443
|
rb_ca_xor (VALUE self, VALUE other)
|
444
444
|
{
|
445
445
|
if ( rb_ca_is_boolean_type(self) ) {
|
446
|
-
return rb_ca_xor_i(self, rb_ca_wrap_readonly(other,
|
446
|
+
return rb_ca_xor_i(self, rb_ca_wrap_readonly(other, INT2NUM(CA_BOOLEAN)));
|
447
447
|
}
|
448
448
|
else if ( rb_obj_is_carray(other) && rb_ca_is_boolean_type(other) ) {
|
449
|
-
return rb_ca_xor_i(rb_ca_wrap_readonly(self,
|
449
|
+
return rb_ca_xor_i(rb_ca_wrap_readonly(self, INT2NUM(CA_BOOLEAN)), other);
|
450
450
|
}
|
451
451
|
else {
|
452
452
|
return rb_ca_xor_i(self, other);
|
@@ -571,7 +571,7 @@ op_powi_fc(cmplx64_t);
|
|
571
571
|
op_powi_fc(cmplx128_t);
|
572
572
|
|
573
573
|
static void
|
574
|
-
ca_ipower_float32_t (
|
574
|
+
ca_ipower_float32_t (ca_size_t n, boolean8_t *m,
|
575
575
|
char *ptr1, int32_t ipow, char *ptr2)
|
576
576
|
{
|
577
577
|
float32_t *p1 = (float32_t *) ptr1, *p2 = (float32_t *) ptr2;
|
@@ -586,7 +586,7 @@ ca_ipower_float32_t (int32_t n, boolean8_t *m,
|
|
586
586
|
}
|
587
587
|
|
588
588
|
static void
|
589
|
-
ca_ipower_float64_t (
|
589
|
+
ca_ipower_float64_t (ca_size_t n, boolean8_t *m,
|
590
590
|
char *ptr1, int32_t ipow, char *ptr2)
|
591
591
|
{
|
592
592
|
float64_t *p1 = (float64_t *) ptr1, *p2 = (float64_t *) ptr2;
|
@@ -601,7 +601,7 @@ ca_ipower_float64_t (int32_t n, boolean8_t *m,
|
|
601
601
|
}
|
602
602
|
|
603
603
|
static void
|
604
|
-
ca_ipower_float128_t (
|
604
|
+
ca_ipower_float128_t (ca_size_t n, boolean8_t *m,
|
605
605
|
char *ptr1, int32_t ipow, char *ptr2)
|
606
606
|
{
|
607
607
|
float128_t *p1 = (float128_t *) ptr1, *p2 = (float128_t *) ptr2;
|
@@ -616,7 +616,7 @@ ca_ipower_float128_t (int32_t n, boolean8_t *m,
|
|
616
616
|
}
|
617
617
|
|
618
618
|
static void
|
619
|
-
ca_ipower_cmplx64_t (
|
619
|
+
ca_ipower_cmplx64_t (ca_size_t n, boolean8_t *m,
|
620
620
|
char *ptr1, int32_t ipow, char *ptr2)
|
621
621
|
{
|
622
622
|
cmplx64_t *p1 = (cmplx64_t *) ptr1, *p2 = (cmplx64_t *) ptr2;
|
@@ -631,7 +631,7 @@ ca_ipower_cmplx64_t (int32_t n, boolean8_t *m,
|
|
631
631
|
}
|
632
632
|
|
633
633
|
static void
|
634
|
-
ca_ipower_cmplx128_t (
|
634
|
+
ca_ipower_cmplx128_t (ca_size_t n, boolean8_t *m,
|
635
635
|
char *ptr1, int32_t ipow, char *ptr2)
|
636
636
|
{
|
637
637
|
cmplx128_t *p1 = (cmplx128_t *) ptr1, *p2 = (cmplx128_t *) ptr2;
|
data/carray_numeric.c
CHANGED
@@ -146,7 +146,7 @@ rb_hack_star (VALUE x, VALUE y)
|
|
146
146
|
type *p = (type *) ca->ptr; \
|
147
147
|
double *q = (double *) co->ptr; \
|
148
148
|
boolean8_t *m = (ca->mask) ? (boolean8_t *) ca->mask->ptr : NULL; \
|
149
|
-
|
149
|
+
ca_size_t i; \
|
150
150
|
if ( m ) { \
|
151
151
|
for (i=ca->elements; i; i--, p++, q++) { \
|
152
152
|
if ( ! *m++ ) \
|
data/carray_operator.c
CHANGED
@@ -150,8 +150,8 @@ rb_ca_call_binop (volatile VALUE self, volatile VALUE other,
|
|
150
150
|
}
|
151
151
|
else { /* array vs array */
|
152
152
|
if ( ca1->elements != ca2->elements ) {
|
153
|
-
rb_raise(rb_eRuntimeError, "elements mismatch (%
|
154
|
-
|
153
|
+
rb_raise(rb_eRuntimeError, "elements mismatch (%lld <-> %lld)",
|
154
|
+
(ca_size_t) ca1->elements, (ca_size_t) ca2->elements);
|
155
155
|
}
|
156
156
|
if ( ca_has_mask(ca1) || ca_has_mask(ca2) ) {
|
157
157
|
ca3 = ca_template_safe(ca1);
|
@@ -212,8 +212,8 @@ rb_ca_call_binop_bang (VALUE self, VALUE other, ca_binop_func_t func[])
|
|
212
212
|
}
|
213
213
|
else { /* scalar vs array */
|
214
214
|
if ( ca1->elements != ca2->elements ) {
|
215
|
-
rb_raise(rb_eRuntimeError, "elements mismatch (%
|
216
|
-
ca1->elements, ca2->elements);
|
215
|
+
rb_raise(rb_eRuntimeError, "elements mismatch (%lld <-> %lld)",
|
216
|
+
(ca_size_t) ca1->elements, (ca_size_t) ca2->elements);
|
217
217
|
}
|
218
218
|
|
219
219
|
ca_copy_mask_overlay(ca1, ca1->elements, 2, ca1, ca2);
|
@@ -233,8 +233,8 @@ rb_ca_call_binop_bang (VALUE self, VALUE other, ca_binop_func_t func[])
|
|
233
233
|
}
|
234
234
|
else { /* array vs array */
|
235
235
|
if ( ca1->elements != ca2->elements ) {
|
236
|
-
rb_raise(rb_eRuntimeError, "elements mismatch in binop (%
|
237
|
-
ca1->elements, ca2->elements);
|
236
|
+
rb_raise(rb_eRuntimeError, "elements mismatch in binop (%lld <-> %lld)",
|
237
|
+
(ca_size_t) ca1->elements, (ca_size_t) ca2->elements);
|
238
238
|
}
|
239
239
|
|
240
240
|
ca_copy_mask_overlay(ca1, ca1->elements, 2, ca1, ca2);
|
@@ -285,6 +285,7 @@ rb_ca_call_moncmp (VALUE self, ca_moncmp_func_t func[])
|
|
285
285
|
return out;
|
286
286
|
}
|
287
287
|
|
288
|
+
|
288
289
|
extern ca_monop_func_t ca_bincmp_eq[CA_NTYPE];
|
289
290
|
extern ca_monop_func_t ca_bincmp_ne[CA_NTYPE];
|
290
291
|
|
@@ -352,8 +353,8 @@ rb_ca_call_bincmp (volatile VALUE self, volatile VALUE other,
|
|
352
353
|
}
|
353
354
|
else { /* array vs array */
|
354
355
|
if ( ca1->elements != ca2->elements ) {
|
355
|
-
rb_raise(rb_eRuntimeError, "elements mismatch in bincmp (%
|
356
|
-
ca1->elements, ca2->elements);
|
356
|
+
rb_raise(rb_eRuntimeError, "elements mismatch in bincmp (%lld <-> %lld)",
|
357
|
+
(ca_size_t) ca1->elements, (ca_size_t) ca2->elements);
|
357
358
|
}
|
358
359
|
out = rb_carray_new(CA_BOOLEAN, ca1->rank, ca1->dim, 0, NULL);
|
359
360
|
Data_Get_Struct(out, CArray, ca3);
|
@@ -378,28 +379,28 @@ rb_ca_call_bincmp (volatile VALUE self, volatile VALUE other,
|
|
378
379
|
}
|
379
380
|
|
380
381
|
void
|
381
|
-
ca_monop_not_implement(
|
382
|
+
ca_monop_not_implement(ca_size_t n, char *ptr1, char *ptr2)
|
382
383
|
{
|
383
384
|
rb_raise(rb_eCADataTypeError,
|
384
385
|
"invalid data type for monop (not implemented)");
|
385
386
|
}
|
386
387
|
|
387
388
|
void
|
388
|
-
ca_binop_not_implement(
|
389
|
+
ca_binop_not_implement(ca_size_t n, char *ptr1, char *ptr2, char *ptr3)
|
389
390
|
{
|
390
391
|
rb_raise(rb_eCADataTypeError,
|
391
392
|
"invalid data_type for binop (not implemented)");
|
392
393
|
}
|
393
394
|
|
394
395
|
void
|
395
|
-
ca_moncmp_not_implement(
|
396
|
+
ca_moncmp_not_implement(ca_size_t n, char *ptr1, char *ptr2)
|
396
397
|
{
|
397
398
|
rb_raise(rb_eCADataTypeError,
|
398
399
|
"invalid data_type for moncmp (not implemented)");
|
399
400
|
}
|
400
401
|
|
401
402
|
void
|
402
|
-
ca_bincmp_not_implement (
|
403
|
+
ca_bincmp_not_implement (ca_size_t n, char *ptr1, char *ptr2, char *ptr3)
|
403
404
|
{
|
404
405
|
rb_raise(rb_eTypeError, "invalid data_type for bincmp (not implemented)");
|
405
406
|
}
|
@@ -470,11 +471,11 @@ rb_ca_coerce (VALUE self, VALUE other)
|
|
470
471
|
{ \
|
471
472
|
type *p1 = (type*)ca->ptr; \
|
472
473
|
type *p2; \
|
473
|
-
|
474
|
+
ca_size_t s2; \
|
474
475
|
boolean8_t *m = mi; \
|
475
476
|
type sum = 0; \
|
476
|
-
|
477
|
-
|
477
|
+
ca_size_t count = 0; \
|
478
|
+
ca_size_t i; \
|
478
479
|
ca_set_iterator(1, cw, &p2, &s2); \
|
479
480
|
if ( m ) { \
|
480
481
|
count = 0; \
|
@@ -509,10 +510,10 @@ rb_ca_mul_add (int argc, VALUE *argv, volatile VALUE self)
|
|
509
510
|
volatile VALUE rfval = Qnil;
|
510
511
|
CArray *ca, *cw;
|
511
512
|
boolean8_t *mi = NULL;
|
512
|
-
|
513
|
+
ca_size_t min_count;
|
513
514
|
|
514
515
|
/* FIXME: to parse :mask_limit, :fill_value */
|
515
|
-
rb_scan_args(argc, argv, "12", &weight, &rmin_count, &rfval);
|
516
|
+
rb_scan_args(argc, argv, "12", (VALUE *) &weight, (VALUE *) &rmin_count, (VALUE *) &rfval);
|
516
517
|
|
517
518
|
/* do implicit casting and resolving unbound repeat array */
|
518
519
|
rb_ca_cast_self_or_other(&self, &weight);
|
@@ -533,7 +534,7 @@ rb_ca_mul_add (int argc, VALUE *argv, volatile VALUE self)
|
|
533
534
|
}
|
534
535
|
|
535
536
|
min_count = ( NIL_P(rmin_count) || ( ! mi ) ) ?
|
536
|
-
ca->elements - 1 :
|
537
|
+
ca->elements - 1 : NUM2SIZE(rmin_count);
|
537
538
|
|
538
539
|
if ( min_count < 0 ) {
|
539
540
|
min_count += ca->elements;
|
data/carray_order.c
CHANGED
@@ -67,9 +67,9 @@ rb_ca_value_not_masked (VALUE self)
|
|
67
67
|
static void
|
68
68
|
ca_project_loop (CArray *co, CArray *ca, CArray *ci, char *lfill, char *ufill)
|
69
69
|
{
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
ca_size_t map_elements = ca->elements;
|
71
|
+
ca_size_t *ip = (ca_size_t*) ci->ptr;
|
72
|
+
ca_size_t n, i;
|
73
73
|
boolean8_t *mi, *ma;
|
74
74
|
boolean8_t *mio, *mii, *mia;
|
75
75
|
|
@@ -154,12 +154,12 @@ rb_ca_project (int argc, VALUE *argv, VALUE self)
|
|
154
154
|
CArray *ca, *ci, *co;
|
155
155
|
char *lfval, *ufval;
|
156
156
|
|
157
|
-
rb_scan_args(argc, argv, "12", &rindex, &vlfval, &vufval);
|
157
|
+
rb_scan_args(argc, argv, "12", (VALUE *) &rindex, (VALUE *) &vlfval, (VALUE *) &vufval);
|
158
158
|
|
159
159
|
Data_Get_Struct(self, CArray, ca);
|
160
160
|
|
161
161
|
rb_check_carray_object(rindex);
|
162
|
-
ci = ca_wrap_readonly(rindex,
|
162
|
+
ci = ca_wrap_readonly(rindex, CA_SIZE);
|
163
163
|
|
164
164
|
lfval = malloc_with_check(ca->bytes);
|
165
165
|
ufval = malloc_with_check(ca->bytes);
|
@@ -215,7 +215,7 @@ rb_ca_project (int argc, VALUE *argv, VALUE self)
|
|
215
215
|
|
216
216
|
#define proc_reverse_bang_data() \
|
217
217
|
{ \
|
218
|
-
|
218
|
+
ca_size_t bytes = ca->bytes; \
|
219
219
|
char *p = ca->ptr; \
|
220
220
|
char *q = ca->ptr + bytes * (ca->elements - 1); \
|
221
221
|
char *v = malloc_with_check(bytes); \
|
@@ -299,7 +299,7 @@ rb_ca_reversed_copy (VALUE self)
|
|
299
299
|
/* ------------------------------------------------------------------------- */
|
300
300
|
|
301
301
|
typedef struct {
|
302
|
-
|
302
|
+
ca_size_t bytes;
|
303
303
|
char *ptr;
|
304
304
|
} cmp_data;
|
305
305
|
|
@@ -410,7 +410,7 @@ rb_ca_sort_bang (VALUE self)
|
|
410
410
|
if ( ca_is_fixlen_type(ca) ) {
|
411
411
|
cmp_data *cmp_ptr, *p;
|
412
412
|
char *ca_ptr, *q;
|
413
|
-
|
413
|
+
ca_size_t i;
|
414
414
|
cmp_ptr = malloc_with_check(sizeof(cmp_data)*ca->elements);
|
415
415
|
ca_ptr = malloc_with_check(ca_length(ca));
|
416
416
|
for (i=0, p=cmp_ptr, q=ca->ptr; i<ca->elements; i++, p++, q+=ca->bytes) {
|
@@ -468,7 +468,7 @@ rb_ca_sorted_copy (VALUE self)
|
|
468
468
|
|
469
469
|
#define proc_shuffle(type) \
|
470
470
|
{ \
|
471
|
-
|
471
|
+
ca_size_t idx, jdx; \
|
472
472
|
type *ptr, *p, *q; \
|
473
473
|
type t1; \
|
474
474
|
ptr = (type *) ca->ptr; \
|
@@ -498,10 +498,10 @@ rb_ca_sorted_copy (VALUE self)
|
|
498
498
|
|
499
499
|
#define proc_shuffle_fixlen() \
|
500
500
|
{ \
|
501
|
-
|
501
|
+
ca_size_t idx, jdx; \
|
502
502
|
char *ptr, *p, *q; \
|
503
503
|
char *t = (char*) malloc_with_check(ca->bytes); \
|
504
|
-
|
504
|
+
ca_size_t bytes = ca->bytes; \
|
505
505
|
ptr = ca->ptr; \
|
506
506
|
if ( ca->mask ) { \
|
507
507
|
boolean8_t *mptr, *mp, *mq; \
|
@@ -636,18 +636,18 @@ rb_ca_binary_search (VALUE self, volatile VALUE rval)
|
|
636
636
|
volatile VALUE vidx;
|
637
637
|
CArray *cv, *co;
|
638
638
|
char *ptr, *val;
|
639
|
-
|
639
|
+
ca_size_t i, idx;
|
640
640
|
Data_Get_Struct(rval, CArray, cv);
|
641
641
|
if ( ca->data_type != cv->data_type ) {
|
642
642
|
cv = ca_wrap_readonly(rval, ca->data_type);
|
643
643
|
}
|
644
|
-
co = carray_new(
|
644
|
+
co = carray_new(CA_SIZE, cv->rank, cv->dim, 0, NULL);
|
645
645
|
out = ca_wrap_struct(co);
|
646
646
|
ca_attach(cv);
|
647
647
|
if ( ca_is_fixlen_type(ca) ) {
|
648
648
|
cmp_data *cmp_ptr, *p, *ptr, cmp_val;
|
649
649
|
char *q;
|
650
|
-
|
650
|
+
ca_size_t i;
|
651
651
|
cmp_val.bytes = ca->bytes;
|
652
652
|
cmp_ptr = malloc_with_check(sizeof(cmp_data)*ca->elements);
|
653
653
|
for (i=0, p=cmp_ptr, q=ca->ptr; i<ca->elements; i++, p++, q+=ca->bytes) {
|
@@ -658,7 +658,7 @@ rb_ca_binary_search (VALUE self, volatile VALUE rval)
|
|
658
658
|
cmp_val.ptr = ca_ptr_at_addr(cv, i);
|
659
659
|
ptr = bsearch(&cmp_val, cmp_ptr, ca->elements, sizeof(cmp_data),
|
660
660
|
ca_qsort_cmp[CA_FIXLEN]);
|
661
|
-
vidx = ( ! ptr ) ? CA_UNDEF :
|
661
|
+
vidx = ( ! ptr ) ? CA_UNDEF : SIZE2NUM(ptr - cmp_ptr);
|
662
662
|
rb_ca_store_addr(out, i, vidx);
|
663
663
|
}
|
664
664
|
free(cmp_ptr);
|
@@ -685,7 +685,7 @@ rb_ca_binary_search (VALUE self, volatile VALUE rval)
|
|
685
685
|
if ( ca_is_fixlen_type(ca) ) {
|
686
686
|
cmp_data *cmp_ptr, *p, *ptr, cmp_val;
|
687
687
|
char *q;
|
688
|
-
|
688
|
+
ca_size_t i;
|
689
689
|
cmp_val.bytes = ca->bytes;
|
690
690
|
cmp_val.ptr = val;
|
691
691
|
cmp_ptr = malloc_with_check(sizeof(cmp_data)*ca->elements);
|
@@ -695,14 +695,14 @@ rb_ca_binary_search (VALUE self, volatile VALUE rval)
|
|
695
695
|
}
|
696
696
|
ptr = bsearch(&cmp_val, cmp_ptr, ca->elements, sizeof(cmp_data),
|
697
697
|
ca_qsort_cmp[CA_FIXLEN]);
|
698
|
-
out = ( ! ptr ) ? Qnil :
|
698
|
+
out = ( ! ptr ) ? Qnil : SIZE2NUM((ptr - cmp_ptr));
|
699
699
|
free(cmp_ptr);
|
700
700
|
}
|
701
701
|
else {
|
702
702
|
char *ptr;
|
703
703
|
ptr = bsearch(val, ca->ptr, ca->elements, ca->bytes,
|
704
704
|
ca_qsort_cmp[ca->data_type]);
|
705
|
-
out = ( ! ptr ) ? Qnil :
|
705
|
+
out = ( ! ptr ) ? Qnil : SIZE2NUM((ptr - ca->ptr)/ca->bytes);
|
706
706
|
}
|
707
707
|
}
|
708
708
|
ca_detach(ca);
|
@@ -729,8 +729,8 @@ rb_ca_binary_search_index (VALUE self, volatile VALUE rval)
|
|
729
729
|
{ \
|
730
730
|
type *ptr = (type *) ca->ptr; \
|
731
731
|
boolean8_t *m = (ca->mask) ? (boolean8_t*) ca->mask->ptr : NULL; \
|
732
|
-
type val = (type)
|
733
|
-
|
732
|
+
type val = (type) NUM2LL(value); \
|
733
|
+
ca_size_t i; \
|
734
734
|
if ( m ) { \
|
735
735
|
for (i=0; i<ca->elements; i++, ptr++) { \
|
736
736
|
if ( ! *m++ ) { \
|
@@ -757,7 +757,7 @@ rb_ca_binary_search_index (VALUE self, volatile VALUE rval)
|
|
757
757
|
boolean8_t *m = (ca->mask) ? (boolean8_t*) ca->mask->ptr : NULL; \
|
758
758
|
type val = (type) NUM2DBL(value); \
|
759
759
|
double eps = (NIL_P(veps)) ? defeps*fabs(val) : NUM2DBL(veps); \
|
760
|
-
|
760
|
+
ca_size_t i; \
|
761
761
|
if ( m ) { \
|
762
762
|
for (i=0; i<ca->elements; i++, ptr++) { \
|
763
763
|
if ( ! *m++ ) { \
|
@@ -784,7 +784,7 @@ rb_ca_binary_search_index (VALUE self, volatile VALUE rval)
|
|
784
784
|
boolean8_t *m = (ca->mask) ? (boolean8_t*) ca->mask->ptr : NULL; \
|
785
785
|
type val = (type) NUM2CC(value); \
|
786
786
|
double eps = (NIL_P(veps)) ? defeps*cabs(val) : NUM2DBL(veps); \
|
787
|
-
|
787
|
+
ca_size_t i; \
|
788
788
|
if ( m ) { \
|
789
789
|
for (i=0; i<ca->elements; i++, ptr++) { \
|
790
790
|
if ( ! *m++ ) { \
|
@@ -809,7 +809,7 @@ rb_ca_binary_search_index (VALUE self, volatile VALUE rval)
|
|
809
809
|
{ \
|
810
810
|
VALUE *ptr = (VALUE *) ca->ptr; \
|
811
811
|
boolean8_t *m = (ca->mask) ? (boolean8_t*) ca->mask->ptr : NULL; \
|
812
|
-
|
812
|
+
ca_size_t i; \
|
813
813
|
if ( m ) { \
|
814
814
|
for (i=0; i<ca->elements; i++, ptr++) { \
|
815
815
|
if ( ! *m++ ) { \
|
@@ -843,9 +843,9 @@ rb_ca_linear_search (int argc, VALUE *argv, VALUE self)
|
|
843
843
|
{
|
844
844
|
volatile VALUE value, veps;
|
845
845
|
CArray *ca;
|
846
|
-
|
846
|
+
ca_size_t addr;
|
847
847
|
|
848
|
-
rb_scan_args(argc, argv, "11", &value, &veps);
|
848
|
+
rb_scan_args(argc, argv, "11", (VALUE *) &value, (VALUE *) &veps);
|
849
849
|
|
850
850
|
Data_Get_Struct(self, CArray, ca);
|
851
851
|
|
@@ -878,7 +878,7 @@ rb_ca_linear_search (int argc, VALUE *argv, VALUE self)
|
|
878
878
|
|
879
879
|
ca_detach(ca);
|
880
880
|
|
881
|
-
return ( addr == -1 ) ? Qnil :
|
881
|
+
return ( addr == -1 ) ? Qnil : SIZE2NUM(addr);
|
882
882
|
}
|
883
883
|
|
884
884
|
/* rdoc:
|
@@ -904,7 +904,7 @@ rb_ca_linear_search_index (int argc, VALUE *argv, VALUE self)
|
|
904
904
|
type val = (type) from(value); \
|
905
905
|
double trial; \
|
906
906
|
double diff = 1.0/0.0; \
|
907
|
-
|
907
|
+
ca_size_t i; \
|
908
908
|
addr = -1; \
|
909
909
|
if ( m ) { \
|
910
910
|
for (i=0; i<ca->elements; i++, ptr++) { \
|
@@ -935,7 +935,7 @@ rb_ca_linear_search_index (int argc, VALUE *argv, VALUE self)
|
|
935
935
|
VALUE val = value; \
|
936
936
|
VALUE trial; \
|
937
937
|
VALUE diff = rb_float_new(1.0/0.0); \
|
938
|
-
|
938
|
+
ca_size_t i; \
|
939
939
|
addr = -1; \
|
940
940
|
if ( m ) { \
|
941
941
|
for (i=0; i<ca->elements; i++, ptr++) { \
|
@@ -970,7 +970,7 @@ static VALUE
|
|
970
970
|
rb_ca_linear_search_nearest (VALUE self, VALUE value)
|
971
971
|
{
|
972
972
|
CArray *ca;
|
973
|
-
|
973
|
+
ca_size_t addr;
|
974
974
|
|
975
975
|
Data_Get_Struct(self, CArray, ca);
|
976
976
|
|
@@ -1001,7 +1001,7 @@ rb_ca_linear_search_nearest (VALUE self, VALUE value)
|
|
1001
1001
|
|
1002
1002
|
ca_detach(ca);
|
1003
1003
|
|
1004
|
-
return ( addr == -1 ) ? Qnil :
|
1004
|
+
return ( addr == -1 ) ? Qnil : SIZE2NUM(addr);
|
1005
1005
|
}
|
1006
1006
|
|
1007
1007
|
static VALUE
|