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_attribute.c
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
/* rdoc
|
18
18
|
class CArray
|
19
19
|
# returns the object type (e.g. CA_OBJ_ARRAY, CA_OBJ_BLOCK, ...).
|
20
|
-
#
|
20
|
+
# Since the object type can be known from the class of the object,
|
21
21
|
# this attribute method is rarely used.
|
22
22
|
def obj_type
|
23
23
|
end
|
@@ -29,7 +29,7 @@ rb_ca_obj_type (VALUE self)
|
|
29
29
|
{
|
30
30
|
CArray *ca;
|
31
31
|
Data_Get_Struct(self, CArray, ca);
|
32
|
-
return
|
32
|
+
return INT2NUM(ca->obj_type);
|
33
33
|
}
|
34
34
|
|
35
35
|
/* rdoc
|
@@ -45,14 +45,17 @@ rb_ca_data_type (VALUE self)
|
|
45
45
|
{
|
46
46
|
CArray *ca;
|
47
47
|
Data_Get_Struct(self, CArray, ca);
|
48
|
-
return
|
48
|
+
return INT2NUM(ca->data_type);
|
49
49
|
}
|
50
50
|
|
51
51
|
/* rdoc
|
52
52
|
class CArray
|
53
|
-
|
53
|
+
# use CArray#ndims instead of this methods after carray-1.3.0
|
54
54
|
def rank
|
55
55
|
end
|
56
|
+
# returns the rank (e.g. 1 for 1D array, 3 for 3D array, ...).
|
57
|
+
def ndims
|
58
|
+
end
|
56
59
|
end
|
57
60
|
*/
|
58
61
|
|
@@ -61,7 +64,7 @@ rb_ca_rank (VALUE self)
|
|
61
64
|
{
|
62
65
|
CArray *ca;
|
63
66
|
Data_Get_Struct(self, CArray, ca);
|
64
|
-
return
|
67
|
+
return INT2NUM(ca->rank);
|
65
68
|
}
|
66
69
|
|
67
70
|
/* rdoc
|
@@ -81,7 +84,7 @@ rb_ca_bytes (VALUE self)
|
|
81
84
|
{
|
82
85
|
CArray *ca;
|
83
86
|
Data_Get_Struct(self, CArray, ca);
|
84
|
-
return
|
87
|
+
return SIZE2NUM(ca->bytes);
|
85
88
|
}
|
86
89
|
|
87
90
|
/* rdoc:
|
@@ -103,16 +106,22 @@ rb_ca_elements (VALUE self)
|
|
103
106
|
{
|
104
107
|
CArray *ca;
|
105
108
|
Data_Get_Struct(self, CArray, ca);
|
106
|
-
return
|
109
|
+
return SIZE2NUM(ca->elements);
|
107
110
|
}
|
108
111
|
|
109
112
|
/* rdoc:
|
110
113
|
class CArray
|
114
|
+
# use CArray#shape instead of this method after carray-1.3.0
|
111
115
|
# returns the Array object contains the dimensional shape of array
|
112
116
|
# (e.g. [2,3] for 2D 2x3 array, ...).
|
113
117
|
def dim
|
114
118
|
end
|
115
119
|
|
120
|
+
# returns the Array object contains the dimensional shape of array
|
121
|
+
# (e.g. [2,3] for 2D 2x3 array, ...).
|
122
|
+
def shape
|
123
|
+
end
|
124
|
+
|
116
125
|
# short-hand for dim[0]
|
117
126
|
def dim0
|
118
127
|
end
|
@@ -140,7 +149,7 @@ rb_ca_dim (VALUE self)
|
|
140
149
|
Data_Get_Struct(self, CArray, ca);
|
141
150
|
dim = rb_ary_new2(ca->rank);
|
142
151
|
for (i=0; i<ca->rank; i++) {
|
143
|
-
rb_ary_store(dim, i,
|
152
|
+
rb_ary_store(dim, i, SIZE2NUM(ca->dim[i]));
|
144
153
|
}
|
145
154
|
return dim;
|
146
155
|
}
|
@@ -150,7 +159,7 @@ rb_ca_dim0 (VALUE self)
|
|
150
159
|
{
|
151
160
|
CArray *ca;
|
152
161
|
Data_Get_Struct(self, CArray, ca);
|
153
|
-
return
|
162
|
+
return SIZE2NUM(ca->dim[0]);
|
154
163
|
}
|
155
164
|
|
156
165
|
VALUE
|
@@ -158,7 +167,7 @@ rb_ca_dim1 (VALUE self)
|
|
158
167
|
{
|
159
168
|
CArray *ca;
|
160
169
|
Data_Get_Struct(self, CArray, ca);
|
161
|
-
return ( ca->rank >= 2 ) ?
|
170
|
+
return ( ca->rank >= 2 ) ? SIZE2NUM(ca->dim[1]) : Qnil;
|
162
171
|
}
|
163
172
|
|
164
173
|
VALUE
|
@@ -166,7 +175,7 @@ rb_ca_dim2 (VALUE self)
|
|
166
175
|
{
|
167
176
|
CArray *ca;
|
168
177
|
Data_Get_Struct(self, CArray, ca);
|
169
|
-
return ( ca->rank >= 3 ) ?
|
178
|
+
return ( ca->rank >= 3 ) ? SIZE2NUM(ca->dim[2]) : Qnil;
|
170
179
|
}
|
171
180
|
|
172
181
|
VALUE
|
@@ -174,7 +183,7 @@ rb_ca_dim3 (VALUE self)
|
|
174
183
|
{
|
175
184
|
CArray *ca;
|
176
185
|
Data_Get_Struct(self, CArray, ca);
|
177
|
-
return ( ca->rank >= 4 ) ?
|
186
|
+
return ( ca->rank >= 4 ) ? SIZE2NUM(ca->dim[3]) : Qnil;
|
178
187
|
}
|
179
188
|
|
180
189
|
/* rdoc:
|
@@ -859,7 +868,9 @@ Init_carray_attribute ()
|
|
859
868
|
rb_define_method(rb_cCArray, "obj_type", rb_ca_obj_type, 0);
|
860
869
|
rb_define_method(rb_cCArray, "data_type", rb_ca_data_type, 0);
|
861
870
|
rb_define_method(rb_cCArray, "bytes", rb_ca_bytes, 0);
|
862
|
-
rb_define_method(rb_cCArray, "rank", rb_ca_rank, 0);
|
871
|
+
rb_define_method(rb_cCArray, "rank", rb_ca_rank, 0);
|
872
|
+
rb_define_method(rb_cCArray, "ndim", rb_ca_rank, 0); /* after carray-1.3.0 */
|
873
|
+
rb_define_method(rb_cCArray, "shape", rb_ca_dim, 0); /* after carray-1.3.0 */
|
863
874
|
rb_define_method(rb_cCArray, "dim", rb_ca_dim, 0);
|
864
875
|
rb_define_method(rb_cCArray, "dim0", rb_ca_dim0, 0);
|
865
876
|
rb_define_method(rb_cCArray, "dim1", rb_ca_dim1, 0);
|
data/carray_call_cfunc.c
CHANGED
@@ -17,7 +17,7 @@ ca_call_cfunc_1 (void (*func)(void *p0), const char *fsync,
|
|
17
17
|
VALUE rcx0)
|
18
18
|
{
|
19
19
|
CArray *cx0;
|
20
|
-
|
20
|
+
ca_size_t n;
|
21
21
|
|
22
22
|
if ( strlen(fsync) != 1 ) {
|
23
23
|
rb_raise(rb_eRuntimeError,
|
@@ -31,8 +31,8 @@ ca_call_cfunc_1 (void (*func)(void *p0), const char *fsync,
|
|
31
31
|
{
|
32
32
|
char *p0;
|
33
33
|
char *q0;
|
34
|
-
|
35
|
-
|
34
|
+
ca_size_t s0;
|
35
|
+
ca_size_t k;
|
36
36
|
n = ca_set_iterator(1, cx0, &q0, &s0);
|
37
37
|
s0 *= cx0->bytes;
|
38
38
|
#ifdef _OPENMP
|
@@ -57,7 +57,7 @@ ca_call_cfunc_2 (void (*func)(void *p0, void *p1), const char *fsync,
|
|
57
57
|
{
|
58
58
|
CArray *cx0, *cx1;
|
59
59
|
boolean8_t *m0 = NULL, *m;
|
60
|
-
|
60
|
+
ca_size_t n;
|
61
61
|
|
62
62
|
if ( strlen(fsync) != 2 ) {
|
63
63
|
rb_raise(rb_eRuntimeError,
|
@@ -82,8 +82,8 @@ ca_call_cfunc_2 (void (*func)(void *p0, void *p1), const char *fsync,
|
|
82
82
|
{
|
83
83
|
char *p0, *p1;
|
84
84
|
char *q0, *q1;
|
85
|
-
|
86
|
-
|
85
|
+
ca_size_t s0, s1;
|
86
|
+
ca_size_t k;
|
87
87
|
|
88
88
|
n = ca_set_iterator(2, cx0, &q0, &s0,
|
89
89
|
cx1, &q1, &s1);
|
@@ -129,7 +129,7 @@ ca_call_cfunc_3 (void (*func)(void *p0, void *p1, void *p2), const char *fsync,
|
|
129
129
|
{
|
130
130
|
CArray *cx0, *cx1, *cx2;
|
131
131
|
boolean8_t *m0 = NULL, *m;
|
132
|
-
|
132
|
+
ca_size_t n;
|
133
133
|
|
134
134
|
if ( strlen(fsync) != 3 ) {
|
135
135
|
rb_raise(rb_eRuntimeError,
|
@@ -157,8 +157,8 @@ ca_call_cfunc_3 (void (*func)(void *p0, void *p1, void *p2), const char *fsync,
|
|
157
157
|
{
|
158
158
|
char *p0, *p1, *p2;
|
159
159
|
char *q0, *q1, *q2;
|
160
|
-
|
161
|
-
|
160
|
+
ca_size_t s0, s1, s2;
|
161
|
+
ca_size_t k;
|
162
162
|
|
163
163
|
n = ca_set_iterator(3, cx0, &q0, &s0,
|
164
164
|
cx1, &q1, &s1,
|
@@ -209,7 +209,7 @@ ca_call_cfunc_4 (void (*func)(void *p0, void *p1, void *p2, void *p3), const cha
|
|
209
209
|
{
|
210
210
|
CArray *cx0, *cx1, *cx2, *cx3;
|
211
211
|
boolean8_t *m0 = NULL, *m;
|
212
|
-
|
212
|
+
ca_size_t n;
|
213
213
|
|
214
214
|
if ( strlen(fsync) != 4 ) {
|
215
215
|
rb_raise(rb_eRuntimeError,
|
@@ -240,8 +240,8 @@ ca_call_cfunc_4 (void (*func)(void *p0, void *p1, void *p2, void *p3), const cha
|
|
240
240
|
{
|
241
241
|
char *p0, *p1, *p2, *p3;
|
242
242
|
char *q0, *q1, *q2, *q3;
|
243
|
-
|
244
|
-
|
243
|
+
ca_size_t s0, s1, s2, s3;
|
244
|
+
ca_size_t k;
|
245
245
|
|
246
246
|
n = ca_set_iterator(4, cx0, &q0, &s0,
|
247
247
|
cx1, &q1, &s1,
|
@@ -298,7 +298,7 @@ ca_call_cfunc_5 (void (*func)(void*,void*,void*,void*,void*), const char *fsync,
|
|
298
298
|
{
|
299
299
|
CArray *cx0, *cx1, *cx2, *cx3, *cx4;
|
300
300
|
boolean8_t *m0 = NULL, *m;
|
301
|
-
|
301
|
+
ca_size_t n;
|
302
302
|
|
303
303
|
if ( strlen(fsync) != 5 ) {
|
304
304
|
rb_raise(rb_eRuntimeError,
|
@@ -332,8 +332,8 @@ ca_call_cfunc_5 (void (*func)(void*,void*,void*,void*,void*), const char *fsync,
|
|
332
332
|
{
|
333
333
|
char *p0, *p1, *p2, *p3, *p4;
|
334
334
|
char *q0, *q1, *q2, *q3, *q4;
|
335
|
-
|
336
|
-
|
335
|
+
ca_size_t s0, s1, s2, s3, s4;
|
336
|
+
ca_size_t k;
|
337
337
|
|
338
338
|
n = ca_set_iterator(5, cx0, &q0, &s0,
|
339
339
|
cx1, &q1, &s1,
|
@@ -395,7 +395,7 @@ ca_call_cfunc_6 (void (*func)(void*,void*,void*,void*,void*,void*), const char *
|
|
395
395
|
{
|
396
396
|
CArray *cx0, *cx1, *cx2, *cx3, *cx4, *cx5;
|
397
397
|
boolean8_t *m0 = NULL, *m;
|
398
|
-
|
398
|
+
ca_size_t n;
|
399
399
|
|
400
400
|
if ( strlen(fsync) != 6 ) {
|
401
401
|
rb_raise(rb_eRuntimeError,
|
@@ -432,8 +432,8 @@ ca_call_cfunc_6 (void (*func)(void*,void*,void*,void*,void*,void*), const char *
|
|
432
432
|
{
|
433
433
|
char *p0, *p1, *p2, *p3, *p4, *p5;
|
434
434
|
char *q0, *q1, *q2, *q3, *q4, *q5;
|
435
|
-
|
436
|
-
|
435
|
+
ca_size_t s0, s1, s2, s3, s4, s5;
|
436
|
+
ca_size_t k;
|
437
437
|
|
438
438
|
n = ca_set_iterator(6, cx0, &q0, &s0,
|
439
439
|
cx1, &q1, &s1,
|
@@ -500,7 +500,7 @@ ca_call_cfunc_7 (void (*func)(void*,void*,void*,void*,void*,void*,void*), const
|
|
500
500
|
{
|
501
501
|
CArray *cx0, *cx1, *cx2, *cx3, *cx4, *cx5, *cx6;
|
502
502
|
boolean8_t *m0 = NULL, *m;
|
503
|
-
|
503
|
+
ca_size_t n;
|
504
504
|
|
505
505
|
if ( strlen(fsync) != 7 ) {
|
506
506
|
rb_raise(rb_eRuntimeError,
|
@@ -540,8 +540,8 @@ ca_call_cfunc_7 (void (*func)(void*,void*,void*,void*,void*,void*,void*), const
|
|
540
540
|
{
|
541
541
|
char *p0, *p1, *p2, *p3, *p4, *p5, *p6;
|
542
542
|
char *q0, *q1, *q2, *q3, *q4, *q5, *q6;
|
543
|
-
|
544
|
-
|
543
|
+
ca_size_t s0, s1, s2, s3, s4, s5, s6;
|
544
|
+
ca_size_t k;
|
545
545
|
|
546
546
|
n = ca_set_iterator(7, cx0, &q0, &s0,
|
547
547
|
cx1, &q1, &s1,
|
data/carray_cast.c
CHANGED
@@ -22,7 +22,7 @@ OBJ2BOOL (VALUE v)
|
|
22
22
|
return 1;
|
23
23
|
}
|
24
24
|
else if ( rb_obj_is_kind_of(v, rb_cInteger) ) {
|
25
|
-
int flag =
|
25
|
+
int flag = NUM2INT(v);
|
26
26
|
if ( flag == 0 || flag == 1 ) {
|
27
27
|
return flag;
|
28
28
|
}
|
@@ -37,7 +37,7 @@ OBJ2BOOL (VALUE v)
|
|
37
37
|
VALUE
|
38
38
|
BOOL2OBJ (boolean8_t x)
|
39
39
|
{
|
40
|
-
return ( x != 0 ) ?
|
40
|
+
return ( x != 0 ) ? INT2NUM(1) : INT2NUM(0);
|
41
41
|
}
|
42
42
|
|
43
43
|
double
|
@@ -80,7 +80,7 @@ rb_obj2long (VALUE val)
|
|
80
80
|
{
|
81
81
|
switch ( TYPE(val) ) {
|
82
82
|
case T_FIXNUM:
|
83
|
-
return
|
83
|
+
return NUM2LONG(val);
|
84
84
|
case T_BIGNUM:
|
85
85
|
return (long) NUM2LL(val);
|
86
86
|
case T_NIL:
|
@@ -96,7 +96,7 @@ rb_obj2ulong (VALUE val)
|
|
96
96
|
{
|
97
97
|
switch ( TYPE(val) ) {
|
98
98
|
case T_FIXNUM:
|
99
|
-
return
|
99
|
+
return NUM2ULONG(val);
|
100
100
|
case T_BIGNUM:
|
101
101
|
return (unsigned long) rb_num2ull(val);
|
102
102
|
case T_NIL:
|
@@ -112,7 +112,7 @@ rb_obj2ll (VALUE val)
|
|
112
112
|
{
|
113
113
|
switch ( TYPE(val) ) {
|
114
114
|
case T_FIXNUM:
|
115
|
-
return
|
115
|
+
return NUM2LONG(val);
|
116
116
|
case T_NIL:
|
117
117
|
rb_raise(rb_eTypeError, "no implicit conversion fron nil to integer");
|
118
118
|
break;
|
@@ -126,7 +126,7 @@ rb_obj2ull (VALUE val)
|
|
126
126
|
{
|
127
127
|
switch ( TYPE(val) ) {
|
128
128
|
case T_FIXNUM:
|
129
|
-
return
|
129
|
+
return NUM2ULONG(val);
|
130
130
|
case T_NIL:
|
131
131
|
rb_raise(rb_eTypeError, "no implicit conversion from nil to integer");
|
132
132
|
break;
|
@@ -136,7 +136,7 @@ rb_obj2ull (VALUE val)
|
|
136
136
|
}
|
137
137
|
|
138
138
|
void
|
139
|
-
ca_cast_block (
|
139
|
+
ca_cast_block (ca_size_t n, void *ap1, void *ptr1,
|
140
140
|
void *ap2, void *ptr2)
|
141
141
|
{
|
142
142
|
CArray *ca1 = (CArray *) ap1;
|
@@ -149,7 +149,7 @@ ca_cast_block (int32_t n, void *ap1, void *ptr1,
|
|
149
149
|
}
|
150
150
|
|
151
151
|
void
|
152
|
-
ca_cast_block_with_mask (
|
152
|
+
ca_cast_block_with_mask (ca_size_t n, void *ap1, void *ptr1,
|
153
153
|
void *ap2, void *ptr2, boolean8_t *m)
|
154
154
|
{
|
155
155
|
CArray *ca1 = (CArray *) ap1;
|
@@ -251,7 +251,7 @@ rb_ca_data_class_to_object (VALUE self)
|
|
251
251
|
}
|
252
252
|
|
253
253
|
static VALUE
|
254
|
-
rb_ca_object_to_data_class (VALUE self, VALUE rtype,
|
254
|
+
rb_ca_object_to_data_class (VALUE self, VALUE rtype, ca_size_t bytes)
|
255
255
|
{
|
256
256
|
volatile VALUE obj, rval;
|
257
257
|
CArray *ca;
|
@@ -289,11 +289,11 @@ rb_ca_to_type_internal (int argc, VALUE *argv, VALUE self)
|
|
289
289
|
volatile VALUE obj, rtype = Qnil, ropt, rbytes = Qnil;
|
290
290
|
CArray *ca, *cb;
|
291
291
|
int8_t data_type;
|
292
|
-
|
292
|
+
ca_size_t bytes;
|
293
293
|
|
294
294
|
Data_Get_Struct(self, CArray, ca);
|
295
295
|
|
296
|
-
rb_scan_args(argc, argv, "11", &rtype, &ropt);
|
296
|
+
rb_scan_args(argc, argv, "11", (VALUE *) &rtype, (VALUE *) &ropt);
|
297
297
|
rb_scan_options(ropt, "bytes", &rbytes);
|
298
298
|
|
299
299
|
rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
|
@@ -425,9 +425,9 @@ rb_ca_as_type_internal (int argc, VALUE *argv, VALUE self)
|
|
425
425
|
volatile VALUE obj, rtype = Qnil, ropt, rbytes = Qnil;
|
426
426
|
CArray *ca;
|
427
427
|
int8_t data_type;
|
428
|
-
|
428
|
+
ca_size_t bytes;
|
429
429
|
|
430
|
-
rb_scan_args(argc, argv, "11", &rtype, &ropt);
|
430
|
+
rb_scan_args(argc, argv, "11", (VALUE *) &rtype, (VALUE *) &ropt);
|
431
431
|
rb_scan_options(ropt, "bytes", &rbytes);
|
432
432
|
|
433
433
|
rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
|
@@ -470,7 +470,7 @@ rb_ca_as_fixlen (int argc, VALUE *argv, VALUE self)
|
|
470
470
|
{
|
471
471
|
volatile VALUE rtype, ropt = rb_pop_options(&argc, &argv);
|
472
472
|
VALUE list[2];
|
473
|
-
rb_scan_args(argc, argv, "01", &rtype);
|
473
|
+
rb_scan_args(argc, argv, "01", (VALUE *) &rtype);
|
474
474
|
list[0] = ( NIL_P(rtype) ) ? INT2NUM(CA_FIXLEN) : rtype;
|
475
475
|
list[1] = ropt;
|
476
476
|
return rb_ca_as_type_internal(2, list, self);
|
@@ -530,7 +530,7 @@ VALUE rb_ca_as_type_method(VALUE, CA_OBJECT);
|
|
530
530
|
/* ------------------------------------------------------------------------*/
|
531
531
|
|
532
532
|
VALUE
|
533
|
-
rb_ca_cast_block (
|
533
|
+
rb_ca_cast_block (ca_size_t n, VALUE ra1, void *ptr1,
|
534
534
|
VALUE ra2, void *ptr2)
|
535
535
|
{
|
536
536
|
CArray *ca1, *ca2;
|
@@ -652,7 +652,7 @@ static VALUE
|
|
652
652
|
rb_ca_s_wrap_writable (int argc, VALUE *argv, VALUE klass)
|
653
653
|
{
|
654
654
|
volatile VALUE obj, rtype;
|
655
|
-
rb_scan_args(argc, argv, "11", &obj, &rtype);
|
655
|
+
rb_scan_args(argc, argv, "11", (VALUE *) &obj, (VALUE *) &rtype);
|
656
656
|
return rb_ca_wrap_writable(obj, rtype);
|
657
657
|
}
|
658
658
|
|
@@ -770,7 +770,7 @@ static VALUE
|
|
770
770
|
rb_ca_s_wrap_readonly (int argc, VALUE *argv, VALUE klass)
|
771
771
|
{
|
772
772
|
volatile VALUE obj, rtype;
|
773
|
-
rb_scan_args(argc, argv, "11", &obj, &rtype);
|
773
|
+
rb_scan_args(argc, argv, "11", (VALUE *) &obj, (VALUE *) &rtype);
|
774
774
|
return rb_ca_wrap_readonly(obj, rtype);
|
775
775
|
}
|
776
776
|
|
@@ -781,15 +781,8 @@ rb_ca_cast (volatile VALUE self)
|
|
781
781
|
if ( ! rb_obj_is_carray(obj) ) {
|
782
782
|
switch ( TYPE(obj) ) {
|
783
783
|
case T_FIXNUM:
|
784
|
-
obj = rb_cscalar_new_with_value(CA_INT32, 0, obj);
|
785
|
-
break;
|
786
784
|
case T_BIGNUM:
|
787
|
-
|
788
|
-
obj = rb_cscalar_new_with_value(CA_INT64, 0, obj);
|
789
|
-
}
|
790
|
-
else {
|
791
|
-
obj = rb_cscalar_new_with_value(CA_INT32, 0, obj);
|
792
|
-
}
|
785
|
+
obj = rb_cscalar_new_with_value(CA_INT64, 0, obj);
|
793
786
|
break;
|
794
787
|
case T_FLOAT:
|
795
788
|
obj = rb_cscalar_new_with_value(CA_FLOAT64, 0, obj);
|
@@ -837,37 +830,37 @@ rb_ca_cast_self_or_other (volatile VALUE *self, volatile VALUE *other)
|
|
837
830
|
self_is_object = 1;
|
838
831
|
if ( rb_ca_is_object_type(*other) ) {
|
839
832
|
*self = rb_cscalar_new_with_value(CA_OBJECT, 0, *self);
|
840
|
-
return;
|
841
833
|
}
|
842
|
-
|
843
|
-
case T_FIXNUM:
|
844
|
-
*self = rb_cscalar_new_with_value(CA_INT32, 0, *self);
|
845
|
-
break;
|
846
|
-
case T_BIGNUM:
|
847
|
-
if ( ca_valid[CA_INT64] ) {
|
848
|
-
*self = rb_cscalar_new_with_value(CA_INT64, 0, *self);
|
849
|
-
}
|
850
|
-
else {
|
851
|
-
*self = rb_cscalar_new_with_value(CA_INT32, 0, *self);
|
852
|
-
}
|
853
|
-
break;
|
854
|
-
case T_FLOAT:
|
834
|
+
else if ( rb_ca_is_float_type(*other) ) {
|
855
835
|
*self = rb_cscalar_new_with_value(CA_FLOAT64, 0, *self);
|
856
|
-
|
857
|
-
case T_TRUE:
|
858
|
-
case T_FALSE:
|
859
|
-
*self = rb_cscalar_new_with_value(CA_BOOLEAN, 0, *self);
|
860
|
-
break;
|
861
|
-
default:
|
836
|
+
}
|
862
837
|
#ifdef HAVE_COMPLEX_H
|
863
|
-
|
864
|
-
|
838
|
+
else if ( rb_ca_is_complex_type(*other) ) {
|
839
|
+
*self = rb_cscalar_new_with_value(CA_CMPLX128, 0, *self);
|
840
|
+
}
|
841
|
+
#endif
|
842
|
+
else {
|
843
|
+
switch ( TYPE(*self) ) {
|
844
|
+
case T_FIXNUM:
|
845
|
+
*self = rb_cscalar_new_with_value(CA_INT64, 0, *self);
|
846
|
+
break;
|
847
|
+
case T_FLOAT:
|
848
|
+
*self = rb_cscalar_new_with_value(CA_FLOAT64, 0, *self);
|
849
|
+
break;
|
850
|
+
case T_TRUE:
|
851
|
+
case T_FALSE:
|
852
|
+
*self = rb_cscalar_new_with_value(CA_BOOLEAN, 0, *self);
|
853
|
+
break;
|
854
|
+
default:
|
855
|
+
#ifdef HAVE_COMPLEX_H
|
856
|
+
if ( rb_obj_is_kind_of(*self, rb_cCComplex) ) {
|
857
|
+
*self = rb_cscalar_new_with_value(CA_CMPLX128, 0, *self);
|
858
|
+
break;
|
859
|
+
}
|
860
|
+
#endif
|
861
|
+
*self = rb_cscalar_new_with_value(CA_OBJECT, 0, *self);
|
865
862
|
break;
|
866
863
|
}
|
867
|
-
#endif
|
868
|
-
|
869
|
-
*self = rb_cscalar_new_with_value(CA_OBJECT, 0, *self);
|
870
|
-
break;
|
871
864
|
}
|
872
865
|
}
|
873
866
|
|
@@ -876,38 +869,38 @@ rb_ca_cast_self_or_other (volatile VALUE *self, volatile VALUE *other)
|
|
876
869
|
|
877
870
|
if ( rb_ca_is_object_type(*self) ) {
|
878
871
|
*other = rb_cscalar_new_with_value(CA_OBJECT, 0, *other);
|
879
|
-
return;
|
880
872
|
}
|
881
|
-
|
882
|
-
switch ( TYPE(*other) ) {
|
883
|
-
case T_FIXNUM:
|
884
|
-
*other = rb_cscalar_new_with_value(CA_INT32, 0, *other);
|
885
|
-
break;
|
886
|
-
case T_BIGNUM:
|
887
|
-
if ( ca_valid[CA_INT64] ) {
|
888
|
-
*other = rb_cscalar_new_with_value(CA_INT64, 0, *other);
|
889
|
-
}
|
890
|
-
else {
|
891
|
-
*other = rb_cscalar_new_with_value(CA_INT32, 0, *other);
|
892
|
-
}
|
893
|
-
break;
|
894
|
-
case T_FLOAT:
|
873
|
+
else if ( rb_ca_is_float_type(*self) ) {
|
895
874
|
*other = rb_cscalar_new_with_value(CA_FLOAT64, 0, *other);
|
896
|
-
|
897
|
-
case T_TRUE:
|
898
|
-
case T_FALSE:
|
899
|
-
*other = rb_cscalar_new_with_value(CA_BOOLEAN, 0, *other);
|
900
|
-
break;
|
901
|
-
default:
|
875
|
+
}
|
902
876
|
#ifdef HAVE_COMPLEX_H
|
903
|
-
|
904
|
-
|
877
|
+
else if ( rb_ca_is_complex_type(*self) ) {
|
878
|
+
*other = rb_cscalar_new_with_value(CA_CMPLX128, 0, *other);
|
879
|
+
}
|
880
|
+
#endif
|
881
|
+
else {
|
882
|
+
switch ( TYPE(*other) ) {
|
883
|
+
case T_FIXNUM:
|
884
|
+
case T_BIGNUM:
|
885
|
+
*other = rb_cscalar_new_with_value(CA_INT64, 0, *other);
|
905
886
|
break;
|
906
|
-
|
887
|
+
case T_FLOAT:
|
888
|
+
*other = rb_cscalar_new_with_value(CA_FLOAT64, 0, *other);
|
889
|
+
break;
|
890
|
+
case T_TRUE:
|
891
|
+
case T_FALSE:
|
892
|
+
*other = rb_cscalar_new_with_value(CA_BOOLEAN, 0, *other);
|
893
|
+
break;
|
894
|
+
default:
|
895
|
+
#ifdef HAVE_COMPLEX_H
|
896
|
+
if ( rb_obj_is_kind_of(*other, rb_cCComplex) ) {
|
897
|
+
*other = rb_cscalar_new_with_value(CA_CMPLX128, 0, *other);
|
898
|
+
break;
|
899
|
+
}
|
907
900
|
#endif
|
908
|
-
|
909
|
-
|
910
|
-
|
901
|
+
*other = rb_cscalar_new_with_value(CA_OBJECT, 0, *other);
|
902
|
+
break;
|
903
|
+
}
|
911
904
|
}
|
912
905
|
}
|
913
906
|
|
@@ -934,7 +927,7 @@ rb_ca_cast_self_or_other (volatile VALUE *self, volatile VALUE *other)
|
|
934
927
|
return;
|
935
928
|
}
|
936
929
|
else if ( test > 0 ) {
|
937
|
-
*other = rb_ca_wrap_readonly(*other,
|
930
|
+
*other = rb_ca_wrap_readonly(*other, INT2NUM(ca->data_type));
|
938
931
|
return;
|
939
932
|
}
|
940
933
|
}
|
@@ -945,7 +938,7 @@ rb_ca_cast_self_or_other (volatile VALUE *self, volatile VALUE *other)
|
|
945
938
|
return;
|
946
939
|
}
|
947
940
|
else if ( test > 0 ) {
|
948
|
-
*self = rb_ca_wrap_readonly(*self,
|
941
|
+
*self = rb_ca_wrap_readonly(*self, INT2NUM(cb->data_type));
|
949
942
|
return;
|
950
943
|
}
|
951
944
|
}
|
@@ -957,14 +950,14 @@ rb_ca_cast_self_or_other (volatile VALUE *self, volatile VALUE *other)
|
|
957
950
|
return;
|
958
951
|
}
|
959
952
|
else if ( test > 0 ) {
|
960
|
-
*other = rb_ca_wrap_readonly(*other,
|
953
|
+
*other = rb_ca_wrap_readonly(*other, INT2NUM(ca->data_type));
|
961
954
|
return;
|
962
955
|
}
|
963
956
|
|
964
957
|
test = ca_cast_table[ca->data_type][cb->data_type];
|
965
958
|
|
966
959
|
if ( test > 0 ) {
|
967
|
-
*self = rb_ca_wrap_readonly(*self,
|
960
|
+
*self = rb_ca_wrap_readonly(*self, INT2NUM(cb->data_type));
|
968
961
|
return;
|
969
962
|
}
|
970
963
|
|
@@ -998,44 +991,47 @@ rb_ca_cast_other (VALUE *self, volatile VALUE *other)
|
|
998
991
|
if ( ! rb_obj_is_carray(*other) ) {
|
999
992
|
if ( rb_ca_is_object_type(*self) ) {
|
1000
993
|
*other = rb_cscalar_new_with_value(CA_OBJECT, 0, *other);
|
1001
|
-
return;
|
1002
994
|
}
|
1003
|
-
|
1004
|
-
case T_FIXNUM:
|
1005
|
-
*other = rb_cscalar_new_with_value(CA_INT32, 0, *other);
|
1006
|
-
break;
|
1007
|
-
case T_BIGNUM:
|
1008
|
-
if ( ca_valid[CA_INT64] ) {
|
1009
|
-
*other = rb_cscalar_new_with_value(CA_INT64, 0, *other);
|
1010
|
-
}
|
1011
|
-
else {
|
1012
|
-
*other = rb_cscalar_new_with_value(CA_INT32, 0, *other);
|
1013
|
-
}
|
1014
|
-
break;
|
1015
|
-
case T_FLOAT:
|
995
|
+
else if ( rb_ca_is_float_type(*self) ) {
|
1016
996
|
*other = rb_cscalar_new_with_value(CA_FLOAT64, 0, *other);
|
1017
|
-
|
1018
|
-
case T_TRUE:
|
1019
|
-
case T_FALSE:
|
1020
|
-
*other = rb_cscalar_new_with_value(CA_BOOLEAN, 0, *other);
|
1021
|
-
break;
|
1022
|
-
default:
|
997
|
+
}
|
1023
998
|
#ifdef HAVE_COMPLEX_H
|
1024
|
-
|
1025
|
-
|
999
|
+
else if ( rb_ca_is_complex_type(*self) ) {
|
1000
|
+
*other = rb_cscalar_new_with_value(CA_CMPLX128, 0, *other);
|
1001
|
+
return;
|
1002
|
+
}
|
1003
|
+
#endif
|
1004
|
+
else {
|
1005
|
+
switch ( TYPE(*other) ) {
|
1006
|
+
case T_FIXNUM:
|
1007
|
+
case T_BIGNUM:
|
1008
|
+
*other = rb_cscalar_new_with_value(CA_INT64, 0, *other);
|
1009
|
+
break;
|
1010
|
+
case T_FLOAT:
|
1011
|
+
*other = rb_cscalar_new_with_value(CA_FLOAT64, 0, *other);
|
1012
|
+
break;
|
1013
|
+
case T_TRUE:
|
1014
|
+
case T_FALSE:
|
1015
|
+
*other = rb_cscalar_new_with_value(CA_BOOLEAN, 0, *other);
|
1016
|
+
break;
|
1017
|
+
default:
|
1018
|
+
#ifdef HAVE_COMPLEX_H
|
1019
|
+
if ( rb_obj_is_kind_of(*other, rb_cCComplex) ) {
|
1020
|
+
*other = rb_cscalar_new_with_value(CA_CMPLX128, 0, *other);
|
1021
|
+
break;
|
1022
|
+
}
|
1023
|
+
#endif
|
1024
|
+
*other = rb_cscalar_new_with_value(CA_OBJECT, 0, *other);
|
1026
1025
|
break;
|
1027
1026
|
}
|
1028
|
-
#endif
|
1029
|
-
*other = rb_cscalar_new_with_value(CA_OBJECT, 0, *other);
|
1030
|
-
break;
|
1031
1027
|
}
|
1032
|
-
|
1028
|
+
|
1033
1029
|
Data_Get_Struct(*other, CScalar, cs);
|
1034
1030
|
|
1035
1031
|
test0 = ca_cast_table2[cs->data_type][ca->data_type];
|
1036
1032
|
|
1037
1033
|
if ( test0 > 0 ) {
|
1038
|
-
*other = rb_ca_wrap_readonly(*other,
|
1034
|
+
*other = rb_ca_wrap_readonly(*other, INT2NUM(ca->data_type));
|
1039
1035
|
}
|
1040
1036
|
|
1041
1037
|
}
|
@@ -1053,7 +1049,7 @@ rb_ca_cast_other (VALUE *self, volatile VALUE *other)
|
|
1053
1049
|
return;
|
1054
1050
|
}
|
1055
1051
|
else if ( test1 > 0 ) {
|
1056
|
-
*other = rb_ca_wrap_readonly(*other,
|
1052
|
+
*other = rb_ca_wrap_readonly(*other, INT2NUM(ca->data_type));
|
1057
1053
|
return;
|
1058
1054
|
}
|
1059
1055
|
|