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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9d973497b72643e3eff0ba9fe6f27d1c1551b30
|
4
|
+
data.tar.gz: 4d498ed02138ef9003d36ffa9b22e1e1d970923b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79ed70d463d345e8ddec07d9742054bd85d9fcaf4645d4f9f40ee5f872ce85b99b5cc92e5743ca2b3949cf530497762d45d1651ba365e22024a64819ea102b83
|
7
|
+
data.tar.gz: de527fdb98be83795c552c69fe350581f0b4773bff013a5d68947c5fb46305a369d48cba9aedeaa76b426bb372c048f8433a6f4a2969bc7f0a99b9ef34371d75
|
data/Gemfile
CHANGED
data/ca_iter_block.c
CHANGED
@@ -25,9 +25,9 @@ typedef struct {
|
|
25
25
|
int8_t data_type;
|
26
26
|
int8_t rank;
|
27
27
|
int32_t flags;
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
ca_size_t bytes;
|
29
|
+
ca_size_t elements;
|
30
|
+
ca_size_t *dim;
|
31
31
|
char *ptr;
|
32
32
|
CArray *mask;
|
33
33
|
CArray *parent;
|
@@ -35,24 +35,24 @@ typedef struct {
|
|
35
35
|
uint8_t nosync;
|
36
36
|
// ----------
|
37
37
|
int8_t maxdim_index;
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
38
|
+
ca_size_t maxdim_step;
|
39
|
+
ca_size_t maxdim_step0;
|
40
|
+
ca_size_t offset;
|
41
|
+
ca_size_t *start;
|
42
|
+
ca_size_t *step;
|
43
|
+
ca_size_t *count;
|
44
|
+
ca_size_t *size0;
|
45
45
|
} CABlock; // 68 + 20*(rank) (bytes)
|
46
46
|
*/
|
47
47
|
|
48
48
|
typedef struct {
|
49
49
|
int8_t rank;
|
50
|
-
|
50
|
+
ca_size_t dim[CA_RANK_MAX];
|
51
51
|
CArray *reference;
|
52
|
-
CArray * (*kernel_at_addr)(void *,
|
53
|
-
CArray * (*kernel_at_index)(void *,
|
54
|
-
CArray * (*kernel_move_to_addr)(void *,
|
55
|
-
CArray * (*kernel_move_to_index)(void *,
|
52
|
+
CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
|
53
|
+
CArray * (*kernel_at_index)(void *, ca_size_t *, CArray *);
|
54
|
+
CArray * (*kernel_move_to_addr)(void *, ca_size_t, CArray *);
|
55
|
+
CArray * (*kernel_move_to_index)(void *, ca_size_t *, CArray *);
|
56
56
|
/* ----------- */
|
57
57
|
CABlock *kernel;
|
58
58
|
} CABlockIterator;
|
@@ -60,11 +60,12 @@ typedef struct {
|
|
60
60
|
/* ----------------------------------------------------------------- */
|
61
61
|
|
62
62
|
static CArray *
|
63
|
-
ca_bi_kernel_at_index (void *it,
|
63
|
+
ca_bi_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
|
64
64
|
{
|
65
65
|
CABlockIterator *bit = (CABlockIterator *) it;
|
66
66
|
CABlock *kernel;
|
67
|
-
|
67
|
+
int8_t i;
|
68
|
+
ca_size_t j;
|
68
69
|
|
69
70
|
if ( ref == bit->reference ) {
|
70
71
|
kernel = (CABlock *)ca_clone(bit->kernel);
|
@@ -92,12 +93,12 @@ ca_bi_kernel_at_index (void *it, int32_t *idx, CArray *ref)
|
|
92
93
|
}
|
93
94
|
|
94
95
|
static CArray *
|
95
|
-
ca_bi_kernel_at_addr (void *it,
|
96
|
+
ca_bi_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
|
96
97
|
{
|
97
98
|
CABlockIterator *bit = (CABlockIterator *) it;
|
98
|
-
|
99
|
-
|
100
|
-
|
99
|
+
ca_size_t *dim = bit->dim;
|
100
|
+
ca_size_t idx[CA_RANK_MAX];
|
101
|
+
int8_t i;
|
101
102
|
for (i=bit->rank-1; i>=0; i--) {
|
102
103
|
idx[i] = addr % dim[i];
|
103
104
|
addr /= dim[i];
|
@@ -107,11 +108,12 @@ ca_bi_kernel_at_addr (void *it, int32_t addr, CArray *ref)
|
|
107
108
|
|
108
109
|
|
109
110
|
static CArray *
|
110
|
-
ca_bi_kernel_move_to_index (void *it,
|
111
|
+
ca_bi_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
|
111
112
|
{
|
112
113
|
CABlockIterator *bit = (CABlockIterator *) it;
|
113
114
|
CABlock *kernel = (CABlock *) kern;
|
114
|
-
|
115
|
+
int8_t i;
|
116
|
+
ca_size_t j;
|
115
117
|
|
116
118
|
ca_update_mask(kernel);
|
117
119
|
|
@@ -128,12 +130,12 @@ ca_bi_kernel_move_to_index (void *it, int32_t *idx, CArray *kern)
|
|
128
130
|
}
|
129
131
|
|
130
132
|
static CArray *
|
131
|
-
ca_bi_kernel_move_to_addr (void *it,
|
133
|
+
ca_bi_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
|
132
134
|
{
|
133
135
|
CABlockIterator *bit = (CABlockIterator *) it;
|
134
|
-
|
135
|
-
|
136
|
-
|
136
|
+
ca_size_t *dim = bit->dim;
|
137
|
+
ca_size_t idx[CA_RANK_MAX];
|
138
|
+
int8_t i;
|
137
139
|
for (i=bit->rank-1; i>=0; i--) {
|
138
140
|
idx[i] = addr % dim[i];
|
139
141
|
addr /= dim[i];
|
@@ -147,8 +149,8 @@ ca_bi_setup (VALUE self, VALUE rref, VALUE rker)
|
|
147
149
|
CABlockIterator *it;
|
148
150
|
CArray *ref;
|
149
151
|
CABlock *ker;
|
150
|
-
|
151
|
-
|
152
|
+
ca_size_t dim[CA_RANK_MAX];
|
153
|
+
int8_t i;
|
152
154
|
|
153
155
|
rker = rb_obj_clone(rker);
|
154
156
|
|
@@ -173,7 +175,7 @@ ca_bi_setup (VALUE self, VALUE rref, VALUE rker)
|
|
173
175
|
}
|
174
176
|
|
175
177
|
it->rank = ref->rank;
|
176
|
-
memcpy(it->dim, dim, it->rank * sizeof(
|
178
|
+
memcpy(it->dim, dim, it->rank * sizeof(ca_size_t));
|
177
179
|
it->reference = ref;
|
178
180
|
it->kernel = ker;
|
179
181
|
it->kernel_at_addr = ca_bi_kernel_at_addr;
|
data/ca_iter_dimension.c
CHANGED
@@ -22,12 +22,12 @@ VALUE rb_cCADimIterator;
|
|
22
22
|
|
23
23
|
typedef struct {
|
24
24
|
int8_t rank;
|
25
|
-
|
25
|
+
ca_size_t dim[CA_RANK_MAX];
|
26
26
|
CArray *reference;
|
27
|
-
CArray * (*kernel_at_addr)(void *,
|
28
|
-
CArray * (*kernel_at_index)(void *,
|
29
|
-
CArray * (*kernel_move_to_addr)(void *,
|
30
|
-
CArray * (*kernel_move_to_index)(void *,
|
27
|
+
CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
|
28
|
+
CArray * (*kernel_at_index)(void *, ca_size_t *, CArray *);
|
29
|
+
CArray * (*kernel_move_to_addr)(void *, ca_size_t, CArray *);
|
30
|
+
CArray * (*kernel_move_to_index)(void *, ca_size_t *, CArray *);
|
31
31
|
/* ----------- */
|
32
32
|
CArray *kernel;
|
33
33
|
int8_t symflag[CA_RANK_MAX];
|
@@ -37,11 +37,12 @@ typedef struct {
|
|
37
37
|
/* -------------------------------------------------------------------- */
|
38
38
|
|
39
39
|
static CArray *
|
40
|
-
ca_di_kernel_at_index (void *it,
|
40
|
+
ca_di_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
|
41
41
|
{
|
42
42
|
CADimIterator *dit = (CADimIterator *)it;
|
43
43
|
CABlock *kernel;
|
44
|
-
|
44
|
+
int8_t i;
|
45
|
+
ca_size_t val;
|
45
46
|
|
46
47
|
if ( ref == dit->reference ) {
|
47
48
|
kernel = ca_clone(dit->kernel);
|
@@ -70,12 +71,12 @@ ca_di_kernel_at_index (void *it, int32_t *idx, CArray *ref)
|
|
70
71
|
}
|
71
72
|
|
72
73
|
static CArray *
|
73
|
-
ca_di_kernel_at_addr (void *it,
|
74
|
+
ca_di_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
|
74
75
|
{
|
75
76
|
CADimIterator *dit = (CADimIterator *) it;
|
76
|
-
|
77
|
-
|
78
|
-
|
77
|
+
ca_size_t *dim = dit->dim;
|
78
|
+
ca_size_t idx[CA_RANK_MAX];
|
79
|
+
int8_t i;
|
79
80
|
for (i=dit->rank-1; i>=0; i--) {
|
80
81
|
idx[i] = addr % dim[i];
|
81
82
|
addr /= dim[i];
|
@@ -84,11 +85,12 @@ ca_di_kernel_at_addr (void *it, int32_t addr, CArray *ref)
|
|
84
85
|
}
|
85
86
|
|
86
87
|
static CArray *
|
87
|
-
ca_di_kernel_move_to_index (void *it,
|
88
|
+
ca_di_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
|
88
89
|
{
|
89
90
|
CADimIterator *dit = (CADimIterator *)it;
|
90
91
|
CABlock *kernel = (CABlock *) kern;
|
91
|
-
|
92
|
+
int8_t i;
|
93
|
+
ca_size_t val;
|
92
94
|
|
93
95
|
ca_update_mask(kernel);
|
94
96
|
|
@@ -106,12 +108,12 @@ ca_di_kernel_move_to_index (void *it, int32_t *idx, CArray *kern)
|
|
106
108
|
}
|
107
109
|
|
108
110
|
static CArray *
|
109
|
-
ca_di_kernel_move_to_addr (void *it,
|
111
|
+
ca_di_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
|
110
112
|
{
|
111
113
|
CADimIterator *dit = (CADimIterator *) it;
|
112
|
-
|
113
|
-
|
114
|
-
|
114
|
+
ca_size_t *dim = dit->dim;
|
115
|
+
ca_size_t idx[CA_RANK_MAX];
|
116
|
+
int8_t i;
|
115
117
|
for (i=dit->rank-1; i>=0; i--) {
|
116
118
|
idx[i] = addr % dim[i];
|
117
119
|
addr /= dim[i];
|
@@ -157,11 +159,11 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
|
|
157
159
|
|
158
160
|
for (i=0; i<info->rank; i++) {
|
159
161
|
if ( info->index_type[i] == CA_IDX_SCALAR ) {
|
160
|
-
rb_ary_store(rindex, i,
|
162
|
+
rb_ary_store(rindex, i, SIZE2NUM(info->index[i].scalar));
|
161
163
|
continue; /* escape from j++ */
|
162
164
|
}
|
163
165
|
else if ( info->index_type[i] == CA_IDX_SYMBOL ) {
|
164
|
-
rb_ary_store(rindex, i, rb_ary_new3(1,
|
166
|
+
rb_ary_store(rindex, i, rb_ary_new3(1, SIZE2NUM(0)));
|
165
167
|
it->symflag[j] = 1;
|
166
168
|
it->symindex[rank] = j;
|
167
169
|
rank++;
|
@@ -172,9 +174,9 @@ ca_di_setup (VALUE self, VALUE rref, CAIndexInfo *info)
|
|
172
174
|
}
|
173
175
|
else if ( info->index_type[i] == CA_IDX_BLOCK ) {
|
174
176
|
rb_ary_store(rindex, i,
|
175
|
-
rb_ary_new3(3,
|
176
|
-
|
177
|
-
|
177
|
+
rb_ary_new3(3, SIZE2NUM(0),
|
178
|
+
SIZE2NUM(info->index[i].block.count),
|
179
|
+
SIZE2NUM(1)));
|
178
180
|
it->symflag[j] = 0;
|
179
181
|
}
|
180
182
|
j++;
|
data/ca_iter_window.c
CHANGED
@@ -14,15 +14,15 @@
|
|
14
14
|
|
15
15
|
typedef struct {
|
16
16
|
int8_t rank;
|
17
|
-
|
17
|
+
ca_size_t dim[CA_RANK_MAX];
|
18
18
|
CArray *reference;
|
19
|
-
CArray * (*kernel_at_addr)(void *,
|
20
|
-
CArray * (*kernel_at_index)(void *,
|
21
|
-
CArray * (*kernel_move_to_addr)(void *,
|
22
|
-
CArray * (*kernel_move_to_index)(void *,
|
19
|
+
CArray * (*kernel_at_addr)(void *, ca_size_t, CArray *);
|
20
|
+
CArray * (*kernel_at_index)(void *, ca_size_t *, CArray *);
|
21
|
+
CArray * (*kernel_move_to_addr)(void *, ca_size_t, CArray *);
|
22
|
+
CArray * (*kernel_move_to_index)(void *, ca_size_t *, CArray *);
|
23
23
|
/* ----------- */
|
24
24
|
CArray *kernel;
|
25
|
-
|
25
|
+
ca_size_t offset[CA_RANK_MAX];
|
26
26
|
} CAWindowIterator;
|
27
27
|
|
28
28
|
VALUE rb_cCAWindowIterator;
|
@@ -38,15 +38,16 @@ extern int8_t CA_OBJ_WINDOW;
|
|
38
38
|
|
39
39
|
CAWindow *
|
40
40
|
ca_window_new (CArray *carray,
|
41
|
-
|
41
|
+
ca_size_t *start, ca_size_t *count, int8_t bounds, char *fill);
|
42
42
|
|
43
43
|
|
44
44
|
static CArray *
|
45
|
-
ca_vi_kernel_at_index (void *it,
|
45
|
+
ca_vi_kernel_at_index (void *it, ca_size_t *idx, CArray *ref)
|
46
46
|
{
|
47
47
|
CAWindowIterator *vit = (CAWindowIterator *) it;
|
48
48
|
CAWindow *kernel;
|
49
|
-
|
49
|
+
int8_t i;
|
50
|
+
ca_size_t j;
|
50
51
|
|
51
52
|
if ( ref == vit->reference ) {
|
52
53
|
kernel = (CAWindow *)ca_clone(vit->kernel);
|
@@ -71,12 +72,12 @@ ca_vi_kernel_at_index (void *it, int32_t *idx, CArray *ref)
|
|
71
72
|
}
|
72
73
|
|
73
74
|
static CArray *
|
74
|
-
ca_vi_kernel_at_addr (void *it,
|
75
|
+
ca_vi_kernel_at_addr (void *it, ca_size_t addr, CArray *ref)
|
75
76
|
{
|
76
77
|
CAWindowIterator *vit = (CAWindowIterator *) it;
|
77
|
-
|
78
|
-
|
79
|
-
|
78
|
+
ca_size_t *dim = vit->dim;
|
79
|
+
ca_size_t idx[CA_RANK_MAX];
|
80
|
+
int8_t i;
|
80
81
|
for (i=vit->rank-1; i>=0; i--) {
|
81
82
|
idx[i] = addr % dim[i];
|
82
83
|
addr /= dim[i];
|
@@ -85,13 +86,14 @@ ca_vi_kernel_at_addr (void *it, int32_t addr, CArray *ref)
|
|
85
86
|
}
|
86
87
|
|
87
88
|
static CArray *
|
88
|
-
ca_vi_kernel_move_to_index (void *it,
|
89
|
+
ca_vi_kernel_move_to_index (void *it, ca_size_t *idx, CArray *kern)
|
89
90
|
{
|
90
91
|
CAWindowIterator *vit = (CAWindowIterator *) it;
|
91
92
|
CAWindow *kernel = (CAWindow *) kern;
|
92
|
-
|
93
|
-
|
94
|
-
|
93
|
+
ca_size_t *dim = vit->dim;
|
94
|
+
ca_size_t *offset = vit->offset;
|
95
|
+
int8_t i;
|
96
|
+
ca_size_t j;
|
95
97
|
|
96
98
|
ca_update_mask(kernel);
|
97
99
|
|
@@ -108,12 +110,12 @@ ca_vi_kernel_move_to_index (void *it, int32_t *idx, CArray *kern)
|
|
108
110
|
}
|
109
111
|
|
110
112
|
static CArray *
|
111
|
-
ca_vi_kernel_move_to_addr (void *it,
|
113
|
+
ca_vi_kernel_move_to_addr (void *it, ca_size_t addr, CArray *ref)
|
112
114
|
{
|
113
115
|
CAWindowIterator *vit = (CAWindowIterator *) it;
|
114
|
-
|
115
|
-
|
116
|
-
|
116
|
+
ca_size_t *dim = vit->dim;
|
117
|
+
ca_size_t idx[CA_RANK_MAX];
|
118
|
+
int8_t i;
|
117
119
|
for (i=vit->rank-1; i>=0; i--) {
|
118
120
|
idx[i] = addr % dim[i];
|
119
121
|
addr /= dim[i];
|
@@ -126,7 +128,7 @@ ca_vi_setup (VALUE self, VALUE rref, VALUE rker)
|
|
126
128
|
{
|
127
129
|
CAWindowIterator *it;
|
128
130
|
CArray *ref, *ker;
|
129
|
-
|
131
|
+
int8_t i;
|
130
132
|
|
131
133
|
rker = rb_obj_clone(rker);
|
132
134
|
|
@@ -139,7 +141,7 @@ ca_vi_setup (VALUE self, VALUE rref, VALUE rker)
|
|
139
141
|
}
|
140
142
|
|
141
143
|
it->rank = ref->rank;
|
142
|
-
memcpy(it->dim, ref->dim, it->rank * sizeof(
|
144
|
+
memcpy(it->dim, ref->dim, it->rank * sizeof(ca_size_t));
|
143
145
|
it->reference = ref;
|
144
146
|
it->kernel = ker;
|
145
147
|
it->kernel_at_addr = ca_vi_kernel_at_addr;
|
data/ca_obj_array.c
CHANGED
@@ -15,8 +15,6 @@
|
|
15
15
|
#include "rubysig.h"
|
16
16
|
#endif
|
17
17
|
|
18
|
-
|
19
|
-
|
20
18
|
/* ------------------------------------------------------------------- */
|
21
19
|
|
22
20
|
VALUE rb_cCArray, rb_cCAWrap, rb_cCScalar, rb_cCAVirtual;
|
@@ -119,12 +117,13 @@ rb_ca_reset_gc_interval (VALUE self)
|
|
119
117
|
|
120
118
|
static int
|
121
119
|
carray_setup_i (CArray *ca,
|
122
|
-
int8_t data_type, int8_t rank,
|
120
|
+
int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
123
121
|
CArray *mask, int allocate, int use_calloc)
|
124
122
|
{
|
125
|
-
|
123
|
+
ca_size_t elements;
|
126
124
|
double length;
|
127
|
-
|
125
|
+
int8_t i;
|
126
|
+
ca_size_t k;
|
128
127
|
|
129
128
|
/* check arguments */
|
130
129
|
CA_CHECK_DATA_TYPE(data_type);
|
@@ -157,8 +156,8 @@ carray_setup_i (CArray *ca,
|
|
157
156
|
ca->rank = rank;
|
158
157
|
ca->bytes = bytes;
|
159
158
|
ca->elements = elements;
|
160
|
-
ca->dim = ALLOC_N(
|
161
|
-
memcpy(ca->dim, dim, rank*sizeof(
|
159
|
+
ca->dim = ALLOC_N(ca_size_t, rank);
|
160
|
+
memcpy(ca->dim, dim, rank*sizeof(ca_size_t));
|
162
161
|
|
163
162
|
if ( allocate ) { /* allocate == true */
|
164
163
|
|
@@ -178,9 +177,9 @@ carray_setup_i (CArray *ca,
|
|
178
177
|
|
179
178
|
/* initialize elements with Qnil for CA_OBJECT data_type */
|
180
179
|
if ( allocate && data_type == CA_OBJECT ) {
|
181
|
-
volatile VALUE zero =
|
180
|
+
volatile VALUE zero = SIZE2NUM(0);
|
182
181
|
VALUE *p = (VALUE *) ca->ptr;
|
183
|
-
for (
|
182
|
+
for (k=0; k<elements; k++) {
|
184
183
|
*p++ = zero;
|
185
184
|
}
|
186
185
|
}
|
@@ -202,21 +201,21 @@ carray_setup_i (CArray *ca,
|
|
202
201
|
|
203
202
|
int
|
204
203
|
carray_setup (CArray *ca,
|
205
|
-
int8_t data_type, int8_t rank,
|
204
|
+
int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes, CArray *mask)
|
206
205
|
{
|
207
206
|
return carray_setup_i(ca, data_type, rank, dim, bytes, mask, 1, 0);
|
208
207
|
}
|
209
208
|
|
210
209
|
int
|
211
210
|
carray_safe_setup (CArray *ca,
|
212
|
-
int8_t data_type, int8_t rank,
|
211
|
+
int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes, CArray *mask)
|
213
212
|
{
|
214
213
|
return carray_setup_i(ca, data_type, rank, dim, bytes, mask, 1, 1);
|
215
214
|
}
|
216
215
|
|
217
216
|
int
|
218
217
|
ca_wrap_setup (CArray *ca,
|
219
|
-
int8_t data_type, int8_t rank,
|
218
|
+
int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
220
219
|
CArray *mask, char *ptr)
|
221
220
|
{
|
222
221
|
int ret;
|
@@ -231,7 +230,7 @@ ca_wrap_setup (CArray *ca,
|
|
231
230
|
|
232
231
|
int
|
233
232
|
ca_wrap_setup_null (CArray *ca,
|
234
|
-
int8_t data_type, int8_t rank,
|
233
|
+
int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
235
234
|
CArray *mask)
|
236
235
|
{
|
237
236
|
int ret;
|
@@ -242,7 +241,7 @@ ca_wrap_setup_null (CArray *ca,
|
|
242
241
|
}
|
243
242
|
|
244
243
|
CArray *
|
245
|
-
carray_new (int8_t data_type, int8_t rank,
|
244
|
+
carray_new (int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
246
245
|
CArray *mask)
|
247
246
|
{
|
248
247
|
CArray *ca = ALLOC(CArray);
|
@@ -251,7 +250,7 @@ carray_new (int8_t data_type, int8_t rank, int32_t *dim, int32_t bytes,
|
|
251
250
|
}
|
252
251
|
|
253
252
|
CArray *
|
254
|
-
carray_new_safe (int8_t data_type, int8_t rank,
|
253
|
+
carray_new_safe (int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
255
254
|
CArray *mask)
|
256
255
|
{
|
257
256
|
CArray *ca = ALLOC(CArray);
|
@@ -260,7 +259,7 @@ carray_new_safe (int8_t data_type, int8_t rank, int32_t *dim, int32_t bytes,
|
|
260
259
|
}
|
261
260
|
|
262
261
|
CAWrap *
|
263
|
-
ca_wrap_new (int8_t data_type, int8_t rank,
|
262
|
+
ca_wrap_new (int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
264
263
|
CArray *mask, char *ptr)
|
265
264
|
{
|
266
265
|
CAWrap *ca = ALLOC(CAWrap);
|
@@ -269,7 +268,7 @@ ca_wrap_new (int8_t data_type, int8_t rank, int32_t *dim, int32_t bytes,
|
|
269
268
|
}
|
270
269
|
|
271
270
|
CAWrap *
|
272
|
-
ca_wrap_new_null (int8_t data_type, int8_t rank,
|
271
|
+
ca_wrap_new_null (int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
273
272
|
CArray *mask)
|
274
273
|
{
|
275
274
|
CAWrap *ca = ALLOC(CAWrap);
|
@@ -306,7 +305,7 @@ free_ca_wrap (void *ap)
|
|
306
305
|
|
307
306
|
static int
|
308
307
|
cscalar_setup (CScalar *ca,
|
309
|
-
int8_t data_type,
|
308
|
+
int8_t data_type, ca_size_t bytes, CArray *mask)
|
310
309
|
{
|
311
310
|
CA_CHECK_DATA_TYPE(data_type);
|
312
311
|
CA_CHECK_BYTES(data_type, bytes);
|
@@ -326,7 +325,7 @@ cscalar_setup (CScalar *ca,
|
|
326
325
|
ca_mem_usage += (double)(ca->bytes);
|
327
326
|
|
328
327
|
if ( data_type == CA_OBJECT ) {
|
329
|
-
*((VALUE*) ca->ptr) =
|
328
|
+
*((VALUE*) ca->ptr) = SIZE2NUM(0);
|
330
329
|
}
|
331
330
|
else {
|
332
331
|
MEMZERO(ca->ptr, char, ca->bytes);
|
@@ -346,7 +345,7 @@ cscalar_setup (CScalar *ca,
|
|
346
345
|
*/
|
347
346
|
|
348
347
|
CScalar *
|
349
|
-
cscalar_new (int8_t data_type,
|
348
|
+
cscalar_new (int8_t data_type, ca_size_t bytes, CArray *mask)
|
350
349
|
{
|
351
350
|
CScalar *ca = ALLOC(CScalar);
|
352
351
|
cscalar_setup(ca, data_type, bytes, mask);
|
@@ -358,7 +357,7 @@ cscalar_new (int8_t data_type, int32_t bytes, CArray *mask)
|
|
358
357
|
*/
|
359
358
|
|
360
359
|
CScalar *
|
361
|
-
cscalar_new2 (int8_t data_type,
|
360
|
+
cscalar_new2 (int8_t data_type, ca_size_t bytes, char *val)
|
362
361
|
{
|
363
362
|
CScalar *ca = ALLOC(CScalar);
|
364
363
|
cscalar_setup(ca, data_type, bytes, NULL);
|
@@ -395,18 +394,19 @@ ca_array_func_clone (void *ap)
|
|
395
394
|
}
|
396
395
|
|
397
396
|
char *
|
398
|
-
ca_array_func_ptr_at_addr (void *ap,
|
397
|
+
ca_array_func_ptr_at_addr (void *ap, ca_size_t addr)
|
399
398
|
{
|
400
399
|
CArray *ca = (CArray *) ap;
|
401
400
|
return ca->ptr + ca->bytes * addr;
|
402
401
|
}
|
403
402
|
|
404
403
|
char *
|
405
|
-
ca_array_func_ptr_at_index (void *ap,
|
404
|
+
ca_array_func_ptr_at_index (void *ap, ca_size_t *idx)
|
406
405
|
{
|
407
406
|
CArray *ca = (CArray *) ap;
|
408
|
-
|
409
|
-
|
407
|
+
ca_size_t *dim = ca->dim;
|
408
|
+
int8_t i;
|
409
|
+
ca_size_t n;
|
410
410
|
n = idx[0]; /* n = idx[0]*dim[1]*dim[2]*...*dim[rank-1] */
|
411
411
|
for (i=1; i<ca->rank; i++) { /* + idx[1]*dim[1]*dim[2]*...*dim[rank-1] */
|
412
412
|
n = dim[i]*n+idx[i]; /* ... + idx[rank-2]*dim[1] + idx[rank-1] */
|
@@ -415,18 +415,19 @@ ca_array_func_ptr_at_index (void *ap, int32_t *idx)
|
|
415
415
|
}
|
416
416
|
|
417
417
|
void
|
418
|
-
ca_array_func_fetch_addr (void *ap,
|
418
|
+
ca_array_func_fetch_addr (void *ap, ca_size_t addr, void *ptr)
|
419
419
|
{
|
420
420
|
CArray *ca = (CArray *) ap;
|
421
421
|
memcpy(ptr, ca->ptr + ca->bytes * addr, ca->bytes);
|
422
422
|
}
|
423
423
|
|
424
424
|
void
|
425
|
-
ca_array_func_fetch_index (void *ap,
|
425
|
+
ca_array_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
426
426
|
{
|
427
427
|
CArray *ca = (CArray *) ap;
|
428
|
-
|
429
|
-
|
428
|
+
ca_size_t *dim = ca->dim;
|
429
|
+
int8_t i;
|
430
|
+
ca_size_t n;
|
430
431
|
n = idx[0];
|
431
432
|
for (i=1; i<ca->rank; i++) {
|
432
433
|
n = dim[i]*n+idx[i];
|
@@ -435,18 +436,19 @@ ca_array_func_fetch_index (void *ap, int32_t *idx, void *ptr)
|
|
435
436
|
}
|
436
437
|
|
437
438
|
void
|
438
|
-
ca_array_func_store_addr (void *ap,
|
439
|
+
ca_array_func_store_addr (void *ap, ca_size_t addr, void *ptr)
|
439
440
|
{
|
440
441
|
CArray *ca = (CArray *) ap;
|
441
442
|
memcpy(ca->ptr + ca->bytes * addr, ptr, ca->bytes);
|
442
443
|
}
|
443
444
|
|
444
445
|
void
|
445
|
-
ca_array_func_store_index (void *ap,
|
446
|
+
ca_array_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
446
447
|
{
|
447
448
|
CArray *ca = (CArray *) ap;
|
448
|
-
|
449
|
-
|
449
|
+
ca_size_t *dim = ca->dim;
|
450
|
+
int8_t i;
|
451
|
+
ca_size_t n;
|
450
452
|
n = idx[0];
|
451
453
|
for (i=1; i<ca->rank; i++) {
|
452
454
|
n = dim[i]*n+idx[i];
|
@@ -495,8 +497,8 @@ ca_array_func_sync_data (void *ap, void *ptr)
|
|
495
497
|
|
496
498
|
#define proc_fill_bang_fixlen() \
|
497
499
|
{ \
|
498
|
-
|
499
|
-
|
500
|
+
ca_size_t i; \
|
501
|
+
ca_size_t bytes = ca->bytes; \
|
500
502
|
char *p = ca->ptr; \
|
501
503
|
for (i=ca->elements; i; i--, p+=bytes) { \
|
502
504
|
memcpy(p, val, bytes); \
|
@@ -505,7 +507,7 @@ ca_array_func_sync_data (void *ap, void *ptr)
|
|
505
507
|
|
506
508
|
#define proc_fill_bang(type) \
|
507
509
|
{ \
|
508
|
-
|
510
|
+
ca_size_t i; \
|
509
511
|
type *p = (type *)ca->ptr; \
|
510
512
|
type v = *(type *)val; \
|
511
513
|
for (i=ca->elements; i; i--, p++) { \
|
@@ -604,14 +606,14 @@ ca_scalar_func_clone (void *ap)
|
|
604
606
|
}
|
605
607
|
|
606
608
|
char *
|
607
|
-
ca_scalar_func_ptr_at_addr (void *ap,
|
609
|
+
ca_scalar_func_ptr_at_addr (void *ap, ca_size_t addr)
|
608
610
|
{
|
609
611
|
CArray *ca = (CArray *) ap;
|
610
612
|
return ca->ptr;
|
611
613
|
}
|
612
614
|
|
613
615
|
char *
|
614
|
-
ca_scalar_func_ptr_at_index (void *ap,
|
616
|
+
ca_scalar_func_ptr_at_index (void *ap, ca_size_t *idx)
|
615
617
|
{
|
616
618
|
CArray *ca = (CArray *) ap;
|
617
619
|
return ca->ptr;
|
@@ -652,7 +654,7 @@ ca_operation_function_t ca_scalar_func = {
|
|
652
654
|
/* ------------------------------------------------------------------- */
|
653
655
|
|
654
656
|
VALUE
|
655
|
-
rb_carray_new (int8_t data_type, int8_t rank,
|
657
|
+
rb_carray_new (int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
656
658
|
CArray *mask)
|
657
659
|
{
|
658
660
|
CArray *ca = carray_new(data_type, rank, dim, bytes, mask);
|
@@ -660,7 +662,7 @@ rb_carray_new (int8_t data_type, int8_t rank, int32_t *dim, int32_t bytes,
|
|
660
662
|
}
|
661
663
|
|
662
664
|
VALUE
|
663
|
-
rb_carray_new_safe (int8_t data_type, int8_t rank,
|
665
|
+
rb_carray_new_safe (int8_t data_type, int8_t rank, ca_size_t *dim, ca_size_t bytes,
|
664
666
|
CArray *mask)
|
665
667
|
{
|
666
668
|
CArray *ca = carray_new_safe(data_type, rank, dim, bytes, mask);
|
@@ -668,14 +670,14 @@ rb_carray_new_safe (int8_t data_type, int8_t rank, int32_t *dim, int32_t bytes,
|
|
668
670
|
}
|
669
671
|
|
670
672
|
VALUE
|
671
|
-
rb_cscalar_new (int8_t data_type,
|
673
|
+
rb_cscalar_new (int8_t data_type, ca_size_t bytes, CArray *mask)
|
672
674
|
{
|
673
675
|
CScalar *ca = cscalar_new(data_type, bytes, mask);
|
674
676
|
return ca_wrap_struct(ca);
|
675
677
|
}
|
676
678
|
|
677
679
|
VALUE
|
678
|
-
rb_cscalar_new_with_value (int8_t data_type,
|
680
|
+
rb_cscalar_new_with_value (int8_t data_type, ca_size_t bytes, VALUE rval)
|
679
681
|
{
|
680
682
|
volatile VALUE obj;
|
681
683
|
obj = rb_cscalar_new(data_type, bytes, NULL);
|
@@ -719,11 +721,11 @@ rb_ca_initialize (int argc, VALUE *argv, VALUE self)
|
|
719
721
|
volatile VALUE rtype, rdim, ropt, rbytes = Qnil;
|
720
722
|
CArray *ca;
|
721
723
|
int8_t data_type, rank;
|
722
|
-
|
723
|
-
|
724
|
-
|
724
|
+
ca_size_t dim[CA_RANK_MAX];
|
725
|
+
ca_size_t bytes;
|
726
|
+
int8_t i;
|
725
727
|
|
726
|
-
rb_scan_args(argc, argv, "21", &rtype, &rdim, &ropt);
|
728
|
+
rb_scan_args(argc, argv, "21", (VALUE *)&rtype, (VALUE *) &rdim, (VALUE *) &ropt);
|
727
729
|
rb_scan_options(ropt, "bytes", &rbytes);
|
728
730
|
|
729
731
|
rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
|
@@ -732,7 +734,7 @@ rb_ca_initialize (int argc, VALUE *argv, VALUE self)
|
|
732
734
|
Check_Type(rdim, T_ARRAY);
|
733
735
|
rank = RARRAY_LEN(rdim);
|
734
736
|
for (i=0; i<rank; i++) {
|
735
|
-
dim[i] =
|
737
|
+
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
736
738
|
}
|
737
739
|
|
738
740
|
Data_Get_Struct(self, CArray, ca);
|
@@ -836,11 +838,11 @@ rb_ca_s_wrap (int argc, VALUE *argv, VALUE self)
|
|
836
838
|
volatile VALUE obj, target, rtype, rdim, ropt, rbytes = Qnil;
|
837
839
|
CArray *ca;
|
838
840
|
int8_t data_type, rank;
|
839
|
-
|
840
|
-
|
841
|
-
|
841
|
+
ca_size_t dim[CA_RANK_MAX];
|
842
|
+
ca_size_t bytes;
|
843
|
+
int8_t i;
|
842
844
|
|
843
|
-
rb_scan_args(argc, argv, "21", &rtype, &rdim, &ropt);
|
845
|
+
rb_scan_args(argc, argv, "21", (VALUE *) &rtype, (VALUE *) &rdim, (VALUE *) &ropt);
|
844
846
|
rb_scan_options(ropt, "bytes", &rbytes);
|
845
847
|
|
846
848
|
rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
|
@@ -848,7 +850,7 @@ rb_ca_s_wrap (int argc, VALUE *argv, VALUE self)
|
|
848
850
|
Check_Type(rdim, T_ARRAY);
|
849
851
|
rank = RARRAY_LEN(rdim);
|
850
852
|
for (i=0; i<rank; i++) {
|
851
|
-
dim[i] =
|
853
|
+
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
852
854
|
}
|
853
855
|
|
854
856
|
target = rb_yield_values(0);
|
@@ -863,8 +865,8 @@ rb_ca_s_wrap (int argc, VALUE *argv, VALUE self)
|
|
863
865
|
}
|
864
866
|
|
865
867
|
VALUE
|
866
|
-
rb_carray_wrap_ptr (int8_t data_type, int8_t rank,
|
867
|
-
|
868
|
+
rb_carray_wrap_ptr (int8_t data_type, int8_t rank, ca_size_t *dim,
|
869
|
+
ca_size_t bytes, CArray *mask, char *ptr, VALUE refer)
|
868
870
|
{
|
869
871
|
volatile VALUE obj;
|
870
872
|
CArray *ca;
|
@@ -906,9 +908,9 @@ rb_cs_initialize (int argc, VALUE *argv, VALUE self)
|
|
906
908
|
volatile VALUE rtype, ropt, rbytes = Qnil;
|
907
909
|
CScalar *ca;
|
908
910
|
int8_t data_type;
|
909
|
-
|
911
|
+
ca_size_t bytes;
|
910
912
|
|
911
|
-
rb_scan_args(argc, argv, "11", &rtype, &ropt);
|
913
|
+
rb_scan_args(argc, argv, "11", (VALUE *) &rtype, (VALUE *) &ropt);
|
912
914
|
rb_scan_options(ropt, "bytes", &rbytes);
|
913
915
|
|
914
916
|
rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
|