carray 1.3.5 → 1.5.1
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/LICENSES +22 -0
- data/README.md +18 -21
- data/Rakefile +31 -0
- data/carray.gemspec +13 -26
- data/{ca_iter_block.c → ext/ca_iter_block.c} +13 -13
- data/{ca_iter_dimension.c → ext/ca_iter_dimension.c} +16 -16
- data/{ca_iter_window.c → ext/ca_iter_window.c} +10 -10
- data/{ca_obj_array.c → ext/ca_obj_array.c} +60 -55
- data/{ca_obj_bitarray.c → ext/ca_obj_bitarray.c} +12 -12
- data/{ca_obj_bitfield.c → ext/ca_obj_bitfield.c} +7 -7
- data/{ca_obj_block.c → ext/ca_obj_block.c} +42 -42
- data/{ca_obj_fake.c → ext/ca_obj_fake.c} +7 -7
- data/{ca_obj_farray.c → ext/ca_obj_farray.c} +18 -18
- data/{ca_obj_field.c → ext/ca_obj_field.c} +15 -15
- data/{ca_obj_grid.c → ext/ca_obj_grid.c} +27 -27
- data/{ca_obj_mapping.c → ext/ca_obj_mapping.c} +9 -9
- data/{ca_obj_object.c → ext/ca_obj_object.c} +37 -37
- data/{ca_obj_reduce.c → ext/ca_obj_reduce.c} +1 -1
- data/{ca_obj_refer.c → ext/ca_obj_refer.c} +33 -33
- data/{ca_obj_repeat.c → ext/ca_obj_repeat.c} +43 -43
- data/{ca_obj_select.c → ext/ca_obj_select.c} +2 -2
- data/{ca_obj_shift.c → ext/ca_obj_shift.c} +23 -23
- data/{ca_obj_transpose.c → ext/ca_obj_transpose.c} +23 -23
- data/{ca_obj_unbound_repeat.c → ext/ca_obj_unbound_repeat.c} +55 -55
- data/{ca_obj_window.c → ext/ca_obj_window.c} +26 -26
- data/{carray.h → ext/carray.h} +77 -51
- data/{carray_access.c → ext/carray_access.c} +133 -91
- data/{carray_attribute.c → ext/carray_attribute.c} +12 -12
- data/{carray_call_cfunc.c → ext/carray_call_cfunc.c} +0 -0
- data/{carray_cast.c → ext/carray_cast.c} +6 -6
- data/{carray_cast_func.rb → ext/carray_cast_func.rb} +0 -0
- data/{carray_class.c → ext/carray_class.c} +0 -0
- data/{carray_conversion.c → ext/carray_conversion.c} +11 -13
- data/{carray_copy.c → ext/carray_copy.c} +19 -19
- data/{carray_core.c → ext/carray_core.c} +2 -2
- data/ext/carray_data_type.c +66 -0
- data/{carray_element.c → ext/carray_element.c} +9 -9
- data/{carray_generate.c → ext/carray_generate.c} +67 -1
- data/{carray_iterator.c → ext/carray_iterator.c} +40 -38
- data/{carray_loop.c → ext/carray_loop.c} +24 -24
- data/{carray_mask.c → ext/carray_mask.c} +17 -6
- data/{carray_math.rb → ext/carray_math.rb} +25 -25
- data/ext/{mathfunc/carray_mathfunc.c → carray_mathfunc.c} +0 -0
- data/{carray_numeric.c → ext/carray_numeric.c} +1 -1
- data/{carray_operator.c → ext/carray_operator.c} +32 -9
- data/{carray_order.c → ext/carray_order.c} +2 -153
- data/{carray_sort_addr.c → ext/carray_sort_addr.c} +0 -0
- data/{carray_stat.c → ext/carray_stat.c} +5 -5
- data/{carray_stat_proc.rb → ext/carray_stat_proc.rb} +23 -23
- data/{carray_test.c → ext/carray_test.c} +22 -21
- data/{carray_undef.c → ext/carray_undef.c} +0 -0
- data/{carray_utils.c → ext/carray_utils.c} +0 -0
- data/{extconf.rb → ext/extconf.rb} +0 -5
- data/{mkmath.rb → ext/mkmath.rb} +12 -2
- data/{ruby_carray.c → ext/ruby_carray.c} +9 -2
- data/{ruby_ccomplex.c → ext/ruby_ccomplex.c} +0 -0
- data/{ruby_float_func.c → ext/ruby_float_func.c} +0 -0
- data/{version.h → ext/version.h} +5 -5
- data/{version.rb → ext/version.rb} +0 -0
- data/lib/carray.rb +49 -7
- data/lib/carray/{base/autoload.rb → autoload.rb} +48 -6
- data/lib/carray/autoload/autoload_base.rb +1 -5
- data/lib/carray/autoload/autoload_gem_cairo.rb +9 -0
- data/lib/carray/autoload/autoload_gem_ffi.rb +9 -0
- data/lib/carray/autoload/autoload_gem_gnuplot.rb +2 -0
- data/lib/carray/autoload/autoload_gem_io_csv.rb +14 -0
- data/lib/carray/autoload/autoload_gem_io_pg.rb +6 -0
- data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +12 -0
- data/lib/carray/autoload/autoload_gem_narray.rb +10 -0
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +15 -0
- data/lib/carray/autoload/autoload_gem_opencv.rb +16 -0
- data/lib/carray/autoload/autoload_gem_random.rb +8 -0
- data/lib/carray/autoload/autoload_gem_rmagick.rb +23 -0
- data/lib/carray/autoload/{autoload_graphics_zimg.rb → autoload_gem_zimg.rb} +0 -0
- data/lib/carray/basic.rb +193 -0
- data/lib/carray/compose.rb +291 -0
- data/lib/carray/construct.rb +445 -0
- data/lib/carray/convert.rb +115 -0
- data/lib/carray/{base/inspect.rb → inspect.rb} +6 -6
- data/lib/carray/io/imagemagick.rb +1 -1
- data/lib/carray/{base/iterator.rb → iterator.rb} +3 -3
- data/lib/carray/mask.rb +91 -0
- data/lib/carray/{base/math.rb → math.rb} +17 -47
- data/lib/carray/math/histogram.rb +7 -7
- data/lib/carray/mkmf.rb +8 -0
- data/lib/carray/object/ca_obj_pack.rb +8 -8
- data/lib/carray/obsolete.rb +272 -0
- data/lib/carray/ordering.rb +157 -0
- data/lib/carray/{base/serialize.rb → serialize.rb} +28 -53
- data/lib/carray/string.rb +190 -0
- data/lib/carray/{base/struct.rb → struct.rb} +20 -20
- data/lib/carray/{io/table.rb → table.rb} +1 -9
- data/lib/carray/testing.rb +56 -0
- data/lib/carray/time.rb +78 -0
- data/lib/carray/transform.rb +100 -0
- data/misc/Methods.ja.md +182 -0
- data/{NOTE → misc/NOTE} +0 -0
- data/test/test_ALL.rb +0 -2
- data/test/test_order.rb +7 -7
- data/test/test_ref_store.rb +13 -13
- data/test/test_stat.rb +7 -15
- data/{devel → utils}/guess_shape.rb +0 -0
- data/utils/{diff_method.rb → monkey_patch_methods.rb} +17 -7
- metadata +100 -254
- data/COPYING +0 -56
- data/GPL +0 -340
- data/Gemfile +0 -8
- data/Gemfile.lock +0 -33
- data/LEGAL +0 -50
- data/TODO +0 -5
- data/carray_random.c +0 -531
- data/ext/calculus/carray_calculus.c +0 -931
- data/ext/calculus/carray_interp.c +0 -358
- data/ext/calculus/extconf.rb +0 -12
- data/ext/calculus/lib/autoload/autoload_math_calculus.rb +0 -2
- data/ext/calculus/lib/math/calculus.rb +0 -119
- data/ext/calculus/lib/math/interp/adapter_interp1d.rb +0 -31
- data/ext/fortio/extconf.rb +0 -3
- data/ext/fortio/lib/carray/autoload/autoload_fortran_format.rb +0 -5
- data/ext/fortio/lib/carray/io/fortran_format.rb +0 -43
- data/ext/fortio/lib/fortio.rb +0 -3
- data/ext/fortio/lib/fortio/fortran_format.rb +0 -605
- data/ext/fortio/lib/fortio/fortran_format.tab.rb +0 -536
- data/ext/fortio/lib/fortio/fortran_format.y +0 -215
- data/ext/fortio/lib/fortio/fortran_namelist.rb +0 -151
- data/ext/fortio/lib/fortio/fortran_namelist.tab.rb +0 -470
- data/ext/fortio/lib/fortio/fortran_namelist.y +0 -213
- data/ext/fortio/lib/fortio/fortran_sequential.rb +0 -345
- data/ext/fortio/ruby_fortio.c +0 -182
- data/ext/fortio/test/test_H.rb +0 -5
- data/ext/fortio/test/test_T.rb +0 -7
- data/ext/fortio/test/test_fortran_format.rb +0 -86
- data/ext/fortio/test/test_namelist.rb +0 -25
- data/ext/fortio/test/test_namelist_write.rb +0 -10
- data/ext/fortio/test/test_sequential.rb +0 -13
- data/ext/fortio/test/test_sequential2.rb +0 -13
- data/ext/fortio/work/test.rb +0 -10
- data/ext/fortio/work/test_e.rb +0 -19
- data/ext/fortio/work/test_ep.rb +0 -10
- data/ext/fortio/work/test_parse.rb +0 -12
- data/ext/imagemap/carray_imagemap.c +0 -495
- data/ext/imagemap/doc/call_graph.dot +0 -28
- data/ext/imagemap/draw.c +0 -567
- data/ext/imagemap/extconf.rb +0 -13
- data/ext/imagemap/lib/autoload/autoload_graphics_imagemap.rb +0 -1
- data/ext/imagemap/lib/graphics/imagemap.rb +0 -273
- data/ext/imagemap/lib/image_map.rb +0 -4
- data/ext/imagemap/test/swath_index.rb +0 -83
- data/ext/imagemap/test/swath_warp.rb +0 -99
- data/ext/imagemap/test/test.rb +0 -23
- data/ext/imagemap/test/test_image.rb +0 -42
- data/ext/imagemap/test/test_line.rb +0 -14
- data/ext/imagemap/test/test_rotate.rb +0 -17
- data/ext/imagemap/test/test_triangle.rb +0 -20
- data/ext/imagemap/test/test_warp.rb +0 -26
- data/ext/mathfunc/extconf.rb +0 -18
- data/ext/mathfunc/lib/autoload/autoload_math_mathfunc.rb +0 -1
- data/ext/mathfunc/lib/math/mathfunc.rb +0 -15
- data/ext/mathfunc/test/test_hypot.rb +0 -5
- data/ext/mathfunc/test/test_j0.rb +0 -22
- data/ext/mathfunc/test/test_jn.rb +0 -8
- data/ext/mathfunc/test/test_sph.rb +0 -9
- data/ext/narray/README +0 -22
- data/ext/narray/ca_wrap_narray.c +0 -500
- data/ext/narray/carray_narray.c +0 -21
- data/ext/narray/extconf.rb +0 -57
- data/ext/narray/lib/autoload/autoload_math_narray.rb +0 -1
- data/ext/narray/lib/autoload/autoload_math_narray_miss.rb +0 -11
- data/ext/narray/lib/math/narray.rb +0 -17
- data/ext/narray/lib/math/narray_miss.rb +0 -45
- data/lib/carray/autoload/autoload_graphics_gnuplot.rb +0 -2
- data/lib/carray/autoload/autoload_io_csv.rb +0 -14
- data/lib/carray/autoload/autoload_io_pg.rb +0 -6
- data/lib/carray/autoload/autoload_io_sqlite3.rb +0 -12
- data/lib/carray/autoload/autoload_io_table.rb +0 -1
- data/lib/carray/autoload/autoload_math_interp.rb +0 -4
- data/lib/carray/base/basic.rb +0 -1090
- data/lib/carray/base/obsolete.rb +0 -131
- data/lib/carray/graphics/gnuplot.rb +0 -2131
- data/lib/carray/graphics/zimg.rb +0 -296
- data/lib/carray/io/csv.rb +0 -572
- data/lib/carray/io/pg.rb +0 -101
- data/lib/carray/io/sqlite3.rb +0 -215
- data/lib/carray/math/interp.rb +0 -57
- data/lib/carray/math/interp/adapter_gsl_spline.rb +0 -47
- data/mt19937ar.c +0 -182
- data/mt19937ar.h +0 -86
- data/rdoc_main.rb +0 -27
- data/rdoc_math.rb +0 -5
- data/rdoc_stat.rb +0 -31
- data/test/test_narray.rb +0 -64
- data/test/test_random.rb +0 -15
- data/utils/create_rdoc.sh +0 -9
- data/utils/make_tgz.sh +0 -3
@@ -42,7 +42,7 @@ double ca_mem_count = 0.0;
|
|
42
42
|
|
43
43
|
/* Threshold for forced garbage collection and its default value */
|
44
44
|
double ca_gc_interval;
|
45
|
-
const double ca_default_gc_interval =
|
45
|
+
const double ca_default_gc_interval = 100.0; /* 100MB */
|
46
46
|
|
47
47
|
#define MB (1024*1024)
|
48
48
|
|
@@ -117,7 +117,7 @@ rb_ca_reset_gc_interval (VALUE self)
|
|
117
117
|
|
118
118
|
static int
|
119
119
|
carray_setup_i (CArray *ca,
|
120
|
-
int8_t data_type, int8_t
|
120
|
+
int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
121
121
|
CArray *mask, int allocate, int use_calloc)
|
122
122
|
{
|
123
123
|
ca_size_t elements;
|
@@ -127,14 +127,14 @@ carray_setup_i (CArray *ca,
|
|
127
127
|
|
128
128
|
/* check arguments */
|
129
129
|
CA_CHECK_DATA_TYPE(data_type);
|
130
|
-
CA_CHECK_RANK(
|
131
|
-
CA_CHECK_DIM(
|
130
|
+
CA_CHECK_RANK(ndim);
|
131
|
+
CA_CHECK_DIM(ndim, dim);
|
132
132
|
CA_CHECK_BYTES(data_type, bytes);
|
133
133
|
|
134
134
|
/* calculate total number of elements */
|
135
135
|
elements = 1;
|
136
136
|
length = bytes;
|
137
|
-
for (i=0; i<
|
137
|
+
for (i=0; i<ndim; i++) {
|
138
138
|
elements *= dim[i];
|
139
139
|
length *= dim[i];
|
140
140
|
}
|
@@ -153,11 +153,11 @@ carray_setup_i (CArray *ca,
|
|
153
153
|
|
154
154
|
ca->data_type = data_type;
|
155
155
|
ca->flags = 0;
|
156
|
-
ca->
|
156
|
+
ca->ndim = ndim;
|
157
157
|
ca->bytes = bytes;
|
158
158
|
ca->elements = elements;
|
159
|
-
ca->dim = ALLOC_N(ca_size_t,
|
160
|
-
memcpy(ca->dim, dim,
|
159
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
160
|
+
memcpy(ca->dim, dim, ndim*sizeof(ca_size_t));
|
161
161
|
|
162
162
|
if ( allocate ) { /* allocate == true */
|
163
163
|
|
@@ -201,26 +201,26 @@ carray_setup_i (CArray *ca,
|
|
201
201
|
|
202
202
|
int
|
203
203
|
carray_setup (CArray *ca,
|
204
|
-
int8_t data_type, int8_t
|
204
|
+
int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes, CArray *mask)
|
205
205
|
{
|
206
|
-
return carray_setup_i(ca, data_type,
|
206
|
+
return carray_setup_i(ca, data_type, ndim, dim, bytes, mask, 1, 0);
|
207
207
|
}
|
208
208
|
|
209
209
|
int
|
210
210
|
carray_safe_setup (CArray *ca,
|
211
|
-
int8_t data_type, int8_t
|
211
|
+
int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes, CArray *mask)
|
212
212
|
{
|
213
|
-
return carray_setup_i(ca, data_type,
|
213
|
+
return carray_setup_i(ca, data_type, ndim, dim, bytes, mask, 1, 1);
|
214
214
|
}
|
215
215
|
|
216
216
|
int
|
217
217
|
ca_wrap_setup (CArray *ca,
|
218
|
-
int8_t data_type, int8_t
|
218
|
+
int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
219
219
|
CArray *mask, char *ptr)
|
220
220
|
{
|
221
221
|
int ret;
|
222
222
|
|
223
|
-
ret = carray_setup_i(ca, data_type,
|
223
|
+
ret = carray_setup_i(ca, data_type, ndim, dim, bytes, mask, 0, 0);
|
224
224
|
if ( (!ptr) && (ca->elements != 0) ) {
|
225
225
|
rb_raise(rb_eRuntimeError, "wrapping NULL pointer with an non-empty array");
|
226
226
|
}
|
@@ -230,49 +230,49 @@ ca_wrap_setup (CArray *ca,
|
|
230
230
|
|
231
231
|
int
|
232
232
|
ca_wrap_setup_null (CArray *ca,
|
233
|
-
int8_t data_type, int8_t
|
233
|
+
int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
234
234
|
CArray *mask)
|
235
235
|
{
|
236
236
|
int ret;
|
237
237
|
|
238
|
-
ret = carray_setup_i(ca, data_type,
|
238
|
+
ret = carray_setup_i(ca, data_type, ndim, dim, bytes, mask, 0, 0);
|
239
239
|
ca->ptr = NULL;
|
240
240
|
return ret;
|
241
241
|
}
|
242
242
|
|
243
243
|
CArray *
|
244
|
-
carray_new (int8_t data_type, int8_t
|
244
|
+
carray_new (int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
245
245
|
CArray *mask)
|
246
246
|
{
|
247
247
|
CArray *ca = ALLOC(CArray);
|
248
|
-
carray_setup(ca, data_type,
|
248
|
+
carray_setup(ca, data_type, ndim, dim, bytes, mask);
|
249
249
|
return ca;
|
250
250
|
}
|
251
251
|
|
252
252
|
CArray *
|
253
|
-
carray_new_safe (int8_t data_type, int8_t
|
253
|
+
carray_new_safe (int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
254
254
|
CArray *mask)
|
255
255
|
{
|
256
256
|
CArray *ca = ALLOC(CArray);
|
257
|
-
carray_safe_setup(ca, data_type,
|
257
|
+
carray_safe_setup(ca, data_type, ndim, dim, bytes, mask);
|
258
258
|
return ca;
|
259
259
|
}
|
260
260
|
|
261
261
|
CAWrap *
|
262
|
-
ca_wrap_new (int8_t data_type, int8_t
|
262
|
+
ca_wrap_new (int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
263
263
|
CArray *mask, char *ptr)
|
264
264
|
{
|
265
265
|
CAWrap *ca = ALLOC(CAWrap);
|
266
|
-
ca_wrap_setup(ca, data_type,
|
266
|
+
ca_wrap_setup(ca, data_type, ndim, dim, bytes, mask, ptr);
|
267
267
|
return ca;
|
268
268
|
}
|
269
269
|
|
270
270
|
CAWrap *
|
271
|
-
ca_wrap_new_null (int8_t data_type, int8_t
|
271
|
+
ca_wrap_new_null (int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
272
272
|
CArray *mask)
|
273
273
|
{
|
274
274
|
CAWrap *ca = ALLOC(CAWrap);
|
275
|
-
ca_wrap_setup_null(ca, data_type,
|
275
|
+
ca_wrap_setup_null(ca, data_type, ndim, dim, bytes, mask);
|
276
276
|
return ca;
|
277
277
|
}
|
278
278
|
|
@@ -313,7 +313,7 @@ cscalar_setup (CScalar *ca,
|
|
313
313
|
ca->obj_type = CA_OBJ_SCALAR;
|
314
314
|
ca->data_type = data_type;
|
315
315
|
ca->flags = 0;
|
316
|
-
ca->
|
316
|
+
ca->ndim = 1;
|
317
317
|
ca->bytes = bytes;
|
318
318
|
ca->elements = 1;
|
319
319
|
ca->dim = &(ca->_dim);
|
@@ -388,7 +388,7 @@ ca_array_func_clone (void *ap)
|
|
388
388
|
{
|
389
389
|
CArray *ca = (CArray *) ap;
|
390
390
|
CArray *co;
|
391
|
-
co = carray_new(ca->data_type, ca->
|
391
|
+
co = carray_new(ca->data_type, ca->ndim, ca->dim, ca->bytes, ca->mask);
|
392
392
|
memcpy(co->ptr, ca->ptr, ca_length(ca));
|
393
393
|
return co;
|
394
394
|
}
|
@@ -407,9 +407,9 @@ ca_array_func_ptr_at_index (void *ap, ca_size_t *idx)
|
|
407
407
|
ca_size_t *dim = ca->dim;
|
408
408
|
int8_t i;
|
409
409
|
ca_size_t n;
|
410
|
-
n = idx[0]; /* n = idx[0]*dim[1]*dim[2]*...*dim[
|
411
|
-
for (i=1; i<ca->
|
412
|
-
n = dim[i]*n+idx[i]; /* ... + idx[
|
410
|
+
n = idx[0]; /* n = idx[0]*dim[1]*dim[2]*...*dim[ndim-1] */
|
411
|
+
for (i=1; i<ca->ndim; i++) { /* + idx[1]*dim[1]*dim[2]*...*dim[ndim-1] */
|
412
|
+
n = dim[i]*n+idx[i]; /* ... + idx[ndim-2]*dim[1] + idx[ndim-1] */
|
413
413
|
}
|
414
414
|
return ca->ptr + ca->bytes * n;
|
415
415
|
}
|
@@ -429,7 +429,7 @@ ca_array_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
|
429
429
|
int8_t i;
|
430
430
|
ca_size_t n;
|
431
431
|
n = idx[0];
|
432
|
-
for (i=1; i<ca->
|
432
|
+
for (i=1; i<ca->ndim; i++) {
|
433
433
|
n = dim[i]*n+idx[i];
|
434
434
|
}
|
435
435
|
memcpy(ptr, ca->ptr + ca->bytes * n, ca->bytes);
|
@@ -450,7 +450,7 @@ ca_array_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
|
450
450
|
int8_t i;
|
451
451
|
ca_size_t n;
|
452
452
|
n = idx[0];
|
453
|
-
for (i=1; i<ca->
|
453
|
+
for (i=1; i<ca->ndim; i++) {
|
454
454
|
n = dim[i]*n+idx[i];
|
455
455
|
}
|
456
456
|
memcpy(ca->ptr + ca->bytes * n, ptr, ca->bytes);
|
@@ -547,7 +547,7 @@ void
|
|
547
547
|
ca_array_func_create_mask (void *ap)
|
548
548
|
{
|
549
549
|
CArray *ca = (CArray *) ap;
|
550
|
-
ca->mask = carray_new_safe(CA_BOOLEAN, ca->
|
550
|
+
ca->mask = carray_new_safe(CA_BOOLEAN, ca->ndim, ca->dim, 0, NULL);
|
551
551
|
}
|
552
552
|
|
553
553
|
ca_operation_function_t ca_array_func = {
|
@@ -654,18 +654,18 @@ ca_operation_function_t ca_scalar_func = {
|
|
654
654
|
/* ------------------------------------------------------------------- */
|
655
655
|
|
656
656
|
VALUE
|
657
|
-
rb_carray_new (int8_t data_type, int8_t
|
657
|
+
rb_carray_new (int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
658
658
|
CArray *mask)
|
659
659
|
{
|
660
|
-
CArray *ca = carray_new(data_type,
|
660
|
+
CArray *ca = carray_new(data_type, ndim, dim, bytes, mask);
|
661
661
|
return ca_wrap_struct(ca);
|
662
662
|
}
|
663
663
|
|
664
664
|
VALUE
|
665
|
-
rb_carray_new_safe (int8_t data_type, int8_t
|
665
|
+
rb_carray_new_safe (int8_t data_type, int8_t ndim, ca_size_t *dim, ca_size_t bytes,
|
666
666
|
CArray *mask)
|
667
667
|
{
|
668
|
-
CArray *ca = carray_new_safe(data_type,
|
668
|
+
CArray *ca = carray_new_safe(data_type, ndim, dim, bytes, mask);
|
669
669
|
return ca_wrap_struct(ca);
|
670
670
|
}
|
671
671
|
|
@@ -704,7 +704,7 @@ rb_ca_s_allocate (VALUE klass)
|
|
704
704
|
# CArray.new(data_type, dim, bytes=0) { ... }
|
705
705
|
#
|
706
706
|
# Constructs a new CArray object of <i>data_type</i>, which has the
|
707
|
-
#
|
707
|
+
# ndim and the dimensions specified by an <code>Array</code> of
|
708
708
|
# <code>Integer</code> or an argument list of <code>Integer</code>.
|
709
709
|
# The byte size of each element for the fixed length data type
|
710
710
|
# (<code>data_type == CA_FIXLEN</code>) is specified optional argument
|
@@ -720,7 +720,7 @@ rb_ca_initialize (int argc, VALUE *argv, VALUE self)
|
|
720
720
|
{
|
721
721
|
volatile VALUE rtype, rdim, ropt, rbytes = Qnil;
|
722
722
|
CArray *ca;
|
723
|
-
int8_t data_type,
|
723
|
+
int8_t data_type, ndim;
|
724
724
|
ca_size_t dim[CA_RANK_MAX];
|
725
725
|
ca_size_t bytes;
|
726
726
|
int8_t i;
|
@@ -732,13 +732,13 @@ rb_ca_initialize (int argc, VALUE *argv, VALUE self)
|
|
732
732
|
rb_ca_data_type_import(self, rtype);
|
733
733
|
|
734
734
|
Check_Type(rdim, T_ARRAY);
|
735
|
-
|
736
|
-
for (i=0; i<
|
735
|
+
ndim = RARRAY_LEN(rdim);
|
736
|
+
for (i=0; i<ndim; i++) {
|
737
737
|
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
738
738
|
}
|
739
739
|
|
740
740
|
Data_Get_Struct(self, CArray, ca);
|
741
|
-
carray_safe_setup(ca, data_type,
|
741
|
+
carray_safe_setup(ca, data_type, ndim, dim, bytes, NULL);
|
742
742
|
|
743
743
|
if ( rb_block_given_p() ) {
|
744
744
|
volatile VALUE rval = rb_yield(self);
|
@@ -759,13 +759,18 @@ rb_ca_s_fixlen (int argc, VALUE *argv, VALUE klass)
|
|
759
759
|
return rb_class_new_instance(3, args, klass);
|
760
760
|
}
|
761
761
|
|
762
|
-
#define rb_ca_s_type(type, code)
|
763
|
-
rb_ca_s_## type (int argc, VALUE *argv, VALUE klass)
|
764
|
-
{
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
762
|
+
#define rb_ca_s_type(type, code) \
|
763
|
+
rb_ca_s_## type (int argc, VALUE *argv, VALUE klass) \
|
764
|
+
{ \
|
765
|
+
if ( argc == 0 ) { \
|
766
|
+
return ca_data_type_class(code); \
|
767
|
+
} \
|
768
|
+
else { \
|
769
|
+
volatile VALUE ropt = rb_pop_options(&argc, &argv); \
|
770
|
+
volatile VALUE rdim = rb_ary_new4(argc, argv); \
|
771
|
+
VALUE args[3] = { INT2NUM(code), rdim, ropt }; \
|
772
|
+
return rb_class_new_instance(3, args, klass); \
|
773
|
+
} \
|
769
774
|
}
|
770
775
|
|
771
776
|
/*
|
@@ -820,7 +825,7 @@ rb_ca_initialize_copy (VALUE self, VALUE other)
|
|
820
825
|
Data_Get_Struct(other, CArray, cs);
|
821
826
|
|
822
827
|
ca_update_mask(cs);
|
823
|
-
carray_setup(ca, cs->data_type, cs->
|
828
|
+
carray_setup(ca, cs->data_type, cs->ndim, cs->dim, cs->bytes, cs->mask);
|
824
829
|
|
825
830
|
memcpy(ca->ptr, cs->ptr, ca_length(cs));
|
826
831
|
|
@@ -837,7 +842,7 @@ rb_ca_s_wrap (int argc, VALUE *argv, VALUE self)
|
|
837
842
|
{
|
838
843
|
volatile VALUE obj, target, rtype, rdim, ropt, rbytes = Qnil;
|
839
844
|
CArray *ca;
|
840
|
-
int8_t data_type,
|
845
|
+
int8_t data_type, ndim;
|
841
846
|
ca_size_t dim[CA_RANK_MAX];
|
842
847
|
ca_size_t bytes;
|
843
848
|
int8_t i;
|
@@ -848,15 +853,15 @@ rb_ca_s_wrap (int argc, VALUE *argv, VALUE self)
|
|
848
853
|
rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
|
849
854
|
|
850
855
|
Check_Type(rdim, T_ARRAY);
|
851
|
-
|
852
|
-
for (i=0; i<
|
856
|
+
ndim = RARRAY_LEN(rdim);
|
857
|
+
for (i=0; i<ndim; i++) {
|
853
858
|
dim[i] = NUM2SIZE(rb_ary_entry(rdim, i));
|
854
859
|
}
|
855
860
|
|
856
861
|
target = rb_yield_values(0);
|
857
862
|
|
858
863
|
obj = Data_Make_Struct(rb_cCAWrap, CAWrap, ca_mark, ca_free, ca);
|
859
|
-
ca_wrap_setup_null(ca, data_type,
|
864
|
+
ca_wrap_setup_null(ca, data_type, ndim, dim, bytes, NULL);
|
860
865
|
|
861
866
|
rb_funcall(target, rb_intern("wrap_as_carray"), 1, obj);
|
862
867
|
rb_ivar_set(obj, rb_intern("referred_object"), target);
|
@@ -865,13 +870,13 @@ rb_ca_s_wrap (int argc, VALUE *argv, VALUE self)
|
|
865
870
|
}
|
866
871
|
|
867
872
|
VALUE
|
868
|
-
rb_carray_wrap_ptr (int8_t data_type, int8_t
|
873
|
+
rb_carray_wrap_ptr (int8_t data_type, int8_t ndim, ca_size_t *dim,
|
869
874
|
ca_size_t bytes, CArray *mask, char *ptr, VALUE refer)
|
870
875
|
{
|
871
876
|
volatile VALUE obj;
|
872
877
|
CArray *ca;
|
873
878
|
|
874
|
-
ca = ca_wrap_new(data_type,
|
879
|
+
ca = ca_wrap_new(data_type, ndim, dim, bytes, mask, ptr);
|
875
880
|
obj = ca_wrap_struct(ca);
|
876
881
|
|
877
882
|
rb_ivar_set(obj, rb_intern("referred_object"), refer);
|
@@ -15,7 +15,7 @@
|
|
15
15
|
typedef struct {
|
16
16
|
int16_t obj_type;
|
17
17
|
int8_t data_type;
|
18
|
-
int8_t
|
18
|
+
int8_t ndim;
|
19
19
|
int32_t flags;
|
20
20
|
ca_size_t bytes;
|
21
21
|
ca_size_t elements;
|
@@ -55,7 +55,7 @@ static uint8_t bits[8] = {
|
|
55
55
|
int
|
56
56
|
ca_bitarray_setup (CABitarray *ca, CArray *parent)
|
57
57
|
{
|
58
|
-
int8_t
|
58
|
+
int8_t ndim;
|
59
59
|
ca_size_t bitlen, elements;
|
60
60
|
|
61
61
|
/* check arguments */
|
@@ -64,19 +64,19 @@ ca_bitarray_setup (CABitarray *ca, CArray *parent)
|
|
64
64
|
rb_raise(rb_eCADataTypeError, "invalid data_type for bitarray");
|
65
65
|
}
|
66
66
|
|
67
|
-
|
67
|
+
ndim = parent->ndim + 1;
|
68
68
|
bitlen = 8 * parent->bytes;
|
69
69
|
elements = bitlen * parent->elements;
|
70
70
|
|
71
71
|
ca->obj_type = CA_OBJ_BITARRAY;
|
72
72
|
ca->data_type = CA_BOOLEAN;
|
73
73
|
ca->flags = 0;
|
74
|
-
ca->
|
74
|
+
ca->ndim = ndim;
|
75
75
|
ca->bytes = 1;
|
76
76
|
ca->elements = elements;
|
77
77
|
ca->ptr = NULL;
|
78
78
|
ca->mask = NULL;
|
79
|
-
ca->dim = ALLOC_N(ca_size_t,
|
79
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
80
80
|
|
81
81
|
ca->parent = parent;
|
82
82
|
ca->attach = 0;
|
@@ -85,8 +85,8 @@ ca_bitarray_setup (CABitarray *ca, CArray *parent)
|
|
85
85
|
ca->bytelen = parent->bytes;
|
86
86
|
ca->bitlen = bitlen;
|
87
87
|
|
88
|
-
memcpy(ca->dim, parent->dim, (
|
89
|
-
ca->dim[
|
88
|
+
memcpy(ca->dim, parent->dim, (ndim-1) * sizeof(ca_size_t));
|
89
|
+
ca->dim[ndim-1] = bitlen;
|
90
90
|
|
91
91
|
if ( ca_has_mask(parent) ) {
|
92
92
|
ca_create_mask(ca);
|
@@ -158,7 +158,7 @@ ca_bitarray_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
|
158
158
|
{
|
159
159
|
CABitarray *ca = (CABitarray *) ap;
|
160
160
|
ca_size_t bytes = ca->parent->bytes;
|
161
|
-
ca_size_t offset = idx[ca->
|
161
|
+
ca_size_t offset = idx[ca->ndim-1];
|
162
162
|
ca_size_t major, minor;
|
163
163
|
|
164
164
|
if ( ca_endian == CA_BIG_ENDIAN &&
|
@@ -190,7 +190,7 @@ ca_bitarray_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
|
190
190
|
{
|
191
191
|
CABitarray *ca = (CABitarray *) ap;
|
192
192
|
uint8_t test = *(uint8_t *) ptr;
|
193
|
-
ca_size_t offset = idx[ca->
|
193
|
+
ca_size_t offset = idx[ca->ndim-1];
|
194
194
|
ca_size_t bytes = ca->parent->bytes;
|
195
195
|
ca_size_t major, minor;
|
196
196
|
|
@@ -310,16 +310,16 @@ ca_bitarray_func_create_mask (void *ap)
|
|
310
310
|
ca_size_t count[CA_RANK_MAX];
|
311
311
|
int8_t i;
|
312
312
|
|
313
|
-
for (i=0; i<ca->
|
313
|
+
for (i=0; i<ca->ndim-1; i++) {
|
314
314
|
count[i] = 0;
|
315
315
|
}
|
316
|
-
count[ca->
|
316
|
+
count[ca->ndim-1] = ca->bitlen;
|
317
317
|
|
318
318
|
ca_update_mask(ca->parent);
|
319
319
|
if ( ! ca->parent->mask ) {
|
320
320
|
ca_create_mask(ca->parent);
|
321
321
|
}
|
322
|
-
ca->mask = (CArray *) ca_repeat_new(ca->parent->mask, ca->
|
322
|
+
ca->mask = (CArray *) ca_repeat_new(ca->parent->mask, ca->ndim, count);
|
323
323
|
|
324
324
|
ca_unset_flag(ca->mask, CA_FLAG_READ_ONLY);
|
325
325
|
}
|
@@ -15,7 +15,7 @@
|
|
15
15
|
typedef struct {
|
16
16
|
int16_t obj_type;
|
17
17
|
int8_t data_type;
|
18
|
-
int8_t
|
18
|
+
int8_t ndim;
|
19
19
|
int32_t flags;
|
20
20
|
ca_size_t bytes;
|
21
21
|
ca_size_t elements;
|
@@ -211,7 +211,7 @@ int
|
|
211
211
|
ca_bitfield_setup (CABitfield *ca, CArray *parent,
|
212
212
|
ca_size_t offset, ca_size_t bitlen)
|
213
213
|
{
|
214
|
-
int8_t
|
214
|
+
int8_t ndim;
|
215
215
|
int8_t data_type;
|
216
216
|
ca_size_t bytes = 0, elements;
|
217
217
|
ca_size_t bitsize;
|
@@ -228,7 +228,7 @@ ca_bitfield_setup (CABitfield *ca, CArray *parent,
|
|
228
228
|
}
|
229
229
|
*/
|
230
230
|
|
231
|
-
|
231
|
+
ndim = parent->ndim;
|
232
232
|
bitsize = parent->bytes * 8;
|
233
233
|
elements = parent->elements;
|
234
234
|
|
@@ -293,12 +293,12 @@ ca_bitfield_setup (CABitfield *ca, CArray *parent,
|
|
293
293
|
ca->obj_type = CA_OBJ_BITFIELD;
|
294
294
|
ca->data_type = data_type;
|
295
295
|
ca->flags = 0;
|
296
|
-
ca->
|
296
|
+
ca->ndim = ndim;
|
297
297
|
ca->bytes = bytes;
|
298
298
|
ca->elements = elements;
|
299
299
|
ca->ptr = NULL;
|
300
300
|
ca->mask = NULL;
|
301
|
-
ca->dim = ALLOC_N(ca_size_t,
|
301
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
302
302
|
|
303
303
|
ca->parent = parent;
|
304
304
|
ca->attach = 0;
|
@@ -308,7 +308,7 @@ ca_bitfield_setup (CABitfield *ca, CArray *parent,
|
|
308
308
|
ca->bit_offset = bit_offset;
|
309
309
|
ca->bit_mask = bit_mask;
|
310
310
|
|
311
|
-
memcpy(ca->dim, parent->dim,
|
311
|
+
memcpy(ca->dim, parent->dim, ndim * sizeof(ca_size_t));
|
312
312
|
|
313
313
|
if ( ca_has_mask(parent) ) {
|
314
314
|
ca_create_mask(ca);
|
@@ -484,7 +484,7 @@ ca_bitfield_func_create_mask (void *ap)
|
|
484
484
|
}
|
485
485
|
|
486
486
|
ca->mask = (CArray *) ca_refer_new(ca->parent->mask,
|
487
|
-
CA_BOOLEAN, ca->
|
487
|
+
CA_BOOLEAN, ca->ndim, ca->dim, 0, 0);
|
488
488
|
}
|
489
489
|
|
490
490
|
ca_operation_function_t ca_bitfield_func = {
|