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
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);
|