carray 1.4.0 → 1.5.5
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/.yardopts +32 -0
- data/LICENSE +22 -0
- data/NEWS.md +83 -0
- data/README.md +38 -18
- data/Rakefile +2 -2
- data/TODO.md +17 -0
- data/carray.gemspec +13 -18
- data/{ca_iter_block.c → ext/ca_iter_block.c} +16 -18
- data/{ca_iter_dimension.c → ext/ca_iter_dimension.c} +20 -21
- data/{ca_iter_window.c → ext/ca_iter_window.c} +12 -14
- data/{ca_obj_array.c → ext/ca_obj_array.c} +451 -176
- data/{ca_obj_bitarray.c → ext/ca_obj_bitarray.c} +18 -23
- data/{ca_obj_bitfield.c → ext/ca_obj_bitfield.c} +12 -16
- data/{ca_obj_block.c → ext/ca_obj_block.c} +47 -54
- data/{ca_obj_fake.c → ext/ca_obj_fake.c} +10 -12
- data/{ca_obj_farray.c → ext/ca_obj_farray.c} +21 -23
- data/{ca_obj_field.c → ext/ca_obj_field.c} +30 -32
- data/{ca_obj_grid.c → ext/ca_obj_grid.c} +32 -33
- data/{ca_obj_mapping.c → ext/ca_obj_mapping.c} +11 -13
- data/{ca_obj_object.c → ext/ca_obj_object.c} +40 -42
- data/{ca_obj_reduce.c → ext/ca_obj_reduce.c} +3 -5
- data/{ca_obj_refer.c → ext/ca_obj_refer.c} +44 -48
- data/{ca_obj_repeat.c → ext/ca_obj_repeat.c} +45 -47
- data/{ca_obj_select.c → ext/ca_obj_select.c} +4 -6
- data/{ca_obj_shift.c → ext/ca_obj_shift.c} +26 -28
- data/{ca_obj_transpose.c → ext/ca_obj_transpose.c} +26 -28
- data/{ca_obj_unbound_repeat.c → ext/ca_obj_unbound_repeat.c} +106 -160
- data/{ca_obj_window.c → ext/ca_obj_window.c} +33 -35
- data/{carray.h → ext/carray.h} +86 -59
- data/{carray_access.c → ext/carray_access.c} +194 -101
- data/{carray_attribute.c → ext/carray_attribute.c} +161 -207
- data/{carray_call_cfunc.c → ext/carray_call_cfunc.c} +1 -3
- data/{carray_cast.c → ext/carray_cast.c} +351 -150
- data/{carray_cast_func.rb → ext/carray_cast_func.rb} +1 -2
- data/{carray_class.c → ext/carray_class.c} +28 -36
- data/{carray_conversion.c → ext/carray_conversion.c} +63 -68
- data/{carray_copy.c → ext/carray_copy.c} +34 -50
- data/{carray_core.c → ext/carray_core.c} +75 -62
- data/ext/carray_data_type.c +66 -0
- data/{carray_element.c → ext/carray_element.c} +34 -53
- data/{carray_generate.c → ext/carray_generate.c} +71 -50
- data/{carray_iterator.c → ext/carray_iterator.c} +53 -53
- data/{carray_loop.c → ext/carray_loop.c} +77 -106
- data/{carray_mask.c → ext/carray_mask.c} +105 -114
- data/{carray_math.rb → ext/carray_math.rb} +29 -13
- data/ext/{mathfunc/carray_mathfunc.c → carray_mathfunc.c} +1 -3
- data/{carray_numeric.c → ext/carray_numeric.c} +43 -46
- data/{carray_operator.c → ext/carray_operator.c} +49 -36
- data/{carray_order.c → ext/carray_order.c} +232 -217
- data/{carray_sort_addr.c → ext/carray_sort_addr.c} +14 -21
- data/{carray_stat.c → ext/carray_stat.c} +6 -8
- data/{carray_stat_proc.rb → ext/carray_stat_proc.rb} +25 -27
- data/{carray_test.c → ext/carray_test.c} +63 -51
- data/{carray_undef.c → ext/carray_undef.c} +1 -11
- data/{carray_utils.c → ext/carray_utils.c} +12 -4
- data/{extconf.rb → ext/extconf.rb} +10 -7
- data/{mkmath.rb → ext/mkmath.rb} +2 -2
- data/{ruby_carray.c → ext/ruby_carray.c} +20 -8
- data/{ruby_ccomplex.c → ext/ruby_ccomplex.c} +2 -4
- data/{ruby_float_func.c → ext/ruby_float_func.c} +1 -3
- data/ext/version.h +16 -0
- data/{version.rb → ext/version.rb} +0 -0
- data/lib/carray.rb +51 -40
- data/lib/carray/{base/autoload.rb → autoload.rb} +1 -3
- data/lib/carray/autoload/autoload_base.rb +1 -1
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +7 -6
- data/lib/carray/autoload/autoload_gem_random.rb +8 -0
- data/lib/carray/basic.rb +191 -0
- data/lib/carray/broadcast.rb +101 -0
- data/lib/carray/compose.rb +315 -0
- data/lib/carray/construct.rb +484 -0
- data/lib/carray/convert.rb +115 -0
- data/lib/carray/info.rb +1 -3
- data/lib/carray/{base/inspect.rb → inspect.rb} +9 -11
- data/lib/carray/io/imagemagick.rb +2 -4
- data/lib/carray/{base/iterator.rb → iterator.rb} +6 -6
- data/lib/carray/mask.rb +102 -0
- data/lib/carray/{base/math.rb → math.rb} +20 -52
- data/lib/carray/math/histogram.rb +8 -10
- data/lib/carray/math/recurrence.rb +1 -3
- data/lib/carray/mkmf.rb +9 -3
- data/lib/carray/object/ca_obj_iterator.rb +1 -3
- data/lib/carray/object/ca_obj_link.rb +1 -3
- data/lib/carray/object/ca_obj_pack.rb +9 -11
- data/lib/carray/obsolete.rb +256 -0
- data/lib/carray/ordering.rb +181 -0
- data/lib/carray/{base/serialize.rb → serialize.rb} +60 -76
- data/lib/carray/{base/string.rb → string.rb} +10 -64
- data/lib/carray/{base/struct.rb → struct.rb} +19 -21
- data/lib/carray/{io/table.rb → table.rb} +1 -10
- data/lib/carray/testing.rb +51 -0
- data/lib/carray/time.rb +76 -0
- data/lib/carray/transform.rb +109 -0
- data/misc/Methods.ja.md +182 -0
- data/{NOTE → misc/NOTE} +16 -38
- data/spec/Classes/CABitfield_spec.rb +58 -0
- data/spec/Classes/CABlockIterator_spec.rb +114 -0
- data/spec/Classes/CABlock_spec.rb +205 -0
- data/spec/Classes/CAField_spec.rb +39 -0
- data/spec/Classes/CAGrid_spec.rb +75 -0
- data/spec/Classes/CAMap_spec.rb +0 -0
- data/{test/test_CAMapping.rb → spec/Classes/CAMapping_spec.rb} +35 -36
- data/spec/Classes/CAObject_attribute_spec.rb +33 -0
- data/spec/Classes/CAObject_spec.rb +33 -0
- data/spec/Classes/CARefer_spec.rb +93 -0
- data/spec/Classes/CARepeat_spec.rb +65 -0
- data/spec/Classes/CASelect_spec.rb +22 -0
- data/spec/Classes/CAShift_spec.rb +16 -0
- data/spec/Classes/CAStruct_spec.rb +71 -0
- data/{test/test_CATranspose.rb → spec/Classes/CATranspose_spec.rb} +20 -21
- data/spec/Classes/CAUnboudRepeat_spec.rb +102 -0
- data/spec/Classes/CAWindow_spec.rb +54 -0
- data/spec/Classes/CAWrap_spec.rb +8 -0
- data/{test/test_CArray.rb → spec/Classes/CArray_spec.rb} +48 -92
- data/spec/Classes/CScalar_spec.rb +55 -0
- data/spec/Features/feature_130_spec.rb +19 -0
- data/spec/Features/feature_attributes_spec.rb +280 -0
- data/spec/Features/feature_boolean_spec.rb +98 -0
- data/spec/Features/feature_broadcast.rb +116 -0
- data/spec/Features/feature_cast_function.rb +19 -0
- data/spec/Features/feature_cast_spec.rb +33 -0
- data/spec/Features/feature_class_spec.rb +84 -0
- data/spec/Features/feature_complex_spec.rb +42 -0
- data/{test/test_composite.rb → spec/Features/feature_composite_spec.rb} +17 -18
- data/spec/Features/feature_convert_spec.rb +46 -0
- data/spec/Features/feature_copy_spec.rb +123 -0
- data/spec/Features/feature_creation_spec.rb +84 -0
- data/spec/Features/feature_element_spec.rb +144 -0
- data/spec/Features/feature_extream_spec.rb +54 -0
- data/spec/Features/feature_generate_spec.rb +74 -0
- data/spec/Features/feature_index_spec.rb +69 -0
- data/spec/Features/feature_mask_spec.rb +580 -0
- data/spec/Features/feature_math_spec.rb +97 -0
- data/spec/Features/feature_order_spec.rb +146 -0
- data/spec/Features/feature_ref_store_spec.rb +209 -0
- data/spec/Features/feature_serialization_spec.rb +125 -0
- data/spec/Features/feature_stat_spec.rb +397 -0
- data/spec/Features/feature_virtual_spec.rb +48 -0
- data/spec/Features/method_eq_spec.rb +81 -0
- data/spec/Features/method_is_nan_spec.rb +12 -0
- data/spec/Features/method_map_spec.rb +54 -0
- data/spec/Features/method_max_with.rb +20 -0
- data/spec/Features/method_min_with.rb +19 -0
- data/spec/Features/method_ne_spec.rb +18 -0
- data/spec/Features/method_project_spec.rb +188 -0
- data/spec/Features/method_ref_spec.rb +27 -0
- data/spec/Features/method_round_spec.rb +11 -0
- data/spec/Features/method_s_linspace_spec.rb +48 -0
- data/spec/Features/method_s_span_spec.rb +14 -0
- data/spec/Features/method_seq_spec.rb +47 -0
- data/spec/Features/method_sort_with.rb +43 -0
- data/spec/Features/method_sorted_with.rb +29 -0
- data/spec/Features/method_span_spec.rb +42 -0
- data/spec/Features/method_wrap_readonly_spec.rb +43 -0
- data/{test → spec/UnitTest}/test_CAVirtual.rb +0 -0
- data/spec/spec_all.rb +0 -1
- data/utils/convert_test.rb +73 -0
- data/utils/{extract_rdoc.rb → extract_yard.rb} +7 -12
- data/{devel → utils}/guess_shape.rb +0 -0
- data/utils/{diff_method.rb → monkey_patch_methods.rb} +17 -7
- metadata +159 -206
- data/COPYING +0 -56
- data/GPL +0 -340
- data/LEGAL +0 -50
- data/TODO +0 -5
- data/carray_random.c +0 -531
- data/devel/im2col.rb +0 -17
- 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/math/calculus.rb +0 -119
- data/ext/calculus/lib/math/interp/adapter_interp1d.rb +0 -31
- data/ext/mathfunc/extconf.rb +0 -18
- 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/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 -1146
- data/lib/carray/base/obsolete.rb +0 -131
- 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/spec/CABlockIterator/CABlockIterator_spec.rb +0 -113
- data/spec/CArray/bug/store_spec.rb +0 -27
- data/spec/CArray/index/repeat_spec.rb +0 -10
- data/spec/CArray/method/eq_spec.rb +0 -80
- data/spec/CArray/method/is_nan_spec.rb +0 -12
- data/spec/CArray/method/ne_spec.rb +0 -18
- data/spec/CArray/method/round_spec.rb +0 -11
- data/spec/CArray/object/_attribute_spec.rb +0 -32
- data/spec/CArray/object/s_new_spec.rb +0 -31
- data/spec/CArray/serialize/Serialization_spec.rb +0 -89
- data/test/test_130.rb +0 -23
- data/test/test_ALL.rb +0 -51
- data/test/test_CABitfield.rb +0 -59
- data/test/test_CABlock.rb +0 -208
- data/test/test_CAField.rb +0 -40
- data/test/test_CAGrid.rb +0 -76
- data/test/test_CAMmap.rb +0 -11
- data/test/test_CARefer.rb +0 -94
- data/test/test_CARepeat.rb +0 -66
- data/test/test_CASelect.rb +0 -23
- data/test/test_CAShift.rb +0 -17
- data/test/test_CAWindow.rb +0 -55
- data/test/test_CAWrap.rb +0 -9
- data/test/test_CComplex.rb +0 -83
- data/test/test_CScalar.rb +0 -91
- data/test/test_attribute.rb +0 -281
- data/test/test_block_iterator.rb +0 -17
- data/test/test_boolean.rb +0 -99
- data/test/test_cast.rb +0 -33
- data/test/test_class.rb +0 -85
- data/test/test_complex.rb +0 -43
- data/test/test_convert.rb +0 -79
- data/test/test_copy.rb +0 -141
- data/test/test_creation.rb +0 -85
- data/test/test_element.rb +0 -146
- data/test/test_extream.rb +0 -55
- data/test/test_generate.rb +0 -75
- data/test/test_index.rb +0 -71
- data/test/test_mask.rb +0 -578
- data/test/test_math.rb +0 -98
- data/test/test_narray.rb +0 -64
- data/test/test_order.rb +0 -147
- data/test/test_random.rb +0 -15
- data/test/test_ref_store.rb +0 -211
- data/test/test_stat.rb +0 -414
- data/test/test_struct.rb +0 -72
- data/test/test_virtual.rb +0 -49
- data/utils/create_rdoc.sh +0 -9
- data/utils/make_tgz.sh +0 -3
- data/version.h +0 -18
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_bitarray.c
|
4
4
|
|
5
5
|
This file is part of Ruby/CArray extension library.
|
6
|
-
You can redistribute it and/or modify it under the terms of
|
7
|
-
the Ruby Licence.
|
8
6
|
|
9
|
-
Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
|
11
9
|
---------------------------------------------------------------------------- */
|
12
10
|
|
@@ -15,7 +13,7 @@
|
|
15
13
|
typedef struct {
|
16
14
|
int16_t obj_type;
|
17
15
|
int8_t data_type;
|
18
|
-
int8_t
|
16
|
+
int8_t ndim;
|
19
17
|
int32_t flags;
|
20
18
|
ca_size_t bytes;
|
21
19
|
ca_size_t elements;
|
@@ -34,7 +32,7 @@ static int8_t CA_OBJ_BITARRAY;
|
|
34
32
|
|
35
33
|
static VALUE rb_cCABitarray;
|
36
34
|
|
37
|
-
/*
|
35
|
+
/* yard:
|
38
36
|
class CABitArray < CAVirtual # :nodoc:
|
39
37
|
end
|
40
38
|
*/
|
@@ -55,7 +53,7 @@ static uint8_t bits[8] = {
|
|
55
53
|
int
|
56
54
|
ca_bitarray_setup (CABitarray *ca, CArray *parent)
|
57
55
|
{
|
58
|
-
int8_t
|
56
|
+
int8_t ndim;
|
59
57
|
ca_size_t bitlen, elements;
|
60
58
|
|
61
59
|
/* check arguments */
|
@@ -64,19 +62,19 @@ ca_bitarray_setup (CABitarray *ca, CArray *parent)
|
|
64
62
|
rb_raise(rb_eCADataTypeError, "invalid data_type for bitarray");
|
65
63
|
}
|
66
64
|
|
67
|
-
|
65
|
+
ndim = parent->ndim + 1;
|
68
66
|
bitlen = 8 * parent->bytes;
|
69
67
|
elements = bitlen * parent->elements;
|
70
68
|
|
71
69
|
ca->obj_type = CA_OBJ_BITARRAY;
|
72
70
|
ca->data_type = CA_BOOLEAN;
|
73
71
|
ca->flags = 0;
|
74
|
-
ca->
|
72
|
+
ca->ndim = ndim;
|
75
73
|
ca->bytes = 1;
|
76
74
|
ca->elements = elements;
|
77
75
|
ca->ptr = NULL;
|
78
76
|
ca->mask = NULL;
|
79
|
-
ca->dim = ALLOC_N(ca_size_t,
|
77
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
80
78
|
|
81
79
|
ca->parent = parent;
|
82
80
|
ca->attach = 0;
|
@@ -85,8 +83,8 @@ ca_bitarray_setup (CABitarray *ca, CArray *parent)
|
|
85
83
|
ca->bytelen = parent->bytes;
|
86
84
|
ca->bitlen = bitlen;
|
87
85
|
|
88
|
-
memcpy(ca->dim, parent->dim, (
|
89
|
-
ca->dim[
|
86
|
+
memcpy(ca->dim, parent->dim, (ndim-1) * sizeof(ca_size_t));
|
87
|
+
ca->dim[ndim-1] = bitlen;
|
90
88
|
|
91
89
|
if ( ca_has_mask(parent) ) {
|
92
90
|
ca_create_mask(ca);
|
@@ -158,7 +156,7 @@ ca_bitarray_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
|
158
156
|
{
|
159
157
|
CABitarray *ca = (CABitarray *) ap;
|
160
158
|
ca_size_t bytes = ca->parent->bytes;
|
161
|
-
ca_size_t offset = idx[ca->
|
159
|
+
ca_size_t offset = idx[ca->ndim-1];
|
162
160
|
ca_size_t major, minor;
|
163
161
|
|
164
162
|
if ( ca_endian == CA_BIG_ENDIAN &&
|
@@ -190,7 +188,7 @@ ca_bitarray_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
|
190
188
|
{
|
191
189
|
CABitarray *ca = (CABitarray *) ap;
|
192
190
|
uint8_t test = *(uint8_t *) ptr;
|
193
|
-
ca_size_t offset = idx[ca->
|
191
|
+
ca_size_t offset = idx[ca->ndim-1];
|
194
192
|
ca_size_t bytes = ca->parent->bytes;
|
195
193
|
ca_size_t major, minor;
|
196
194
|
|
@@ -310,16 +308,16 @@ ca_bitarray_func_create_mask (void *ap)
|
|
310
308
|
ca_size_t count[CA_RANK_MAX];
|
311
309
|
int8_t i;
|
312
310
|
|
313
|
-
for (i=0; i<ca->
|
311
|
+
for (i=0; i<ca->ndim-1; i++) {
|
314
312
|
count[i] = 0;
|
315
313
|
}
|
316
|
-
count[ca->
|
314
|
+
count[ca->ndim-1] = ca->bitlen;
|
317
315
|
|
318
316
|
ca_update_mask(ca->parent);
|
319
317
|
if ( ! ca->parent->mask ) {
|
320
318
|
ca_create_mask(ca->parent);
|
321
319
|
}
|
322
|
-
ca->mask = (CArray *) ca_repeat_new(ca->parent->mask, ca->
|
320
|
+
ca->mask = (CArray *) ca_repeat_new(ca->parent->mask, ca->ndim, count);
|
323
321
|
|
324
322
|
ca_unset_flag(ca->mask, CA_FLAG_READ_ONLY);
|
325
323
|
}
|
@@ -464,12 +462,9 @@ rb_ca_bitarray_new (VALUE cary)
|
|
464
462
|
return obj;
|
465
463
|
}
|
466
464
|
|
467
|
-
/*
|
468
|
-
|
469
|
-
|
470
|
-
end
|
471
|
-
alias bitarray bits
|
472
|
-
end
|
465
|
+
/* @overload bitarray
|
466
|
+
|
467
|
+
[TBD]
|
473
468
|
*/
|
474
469
|
|
475
470
|
VALUE
|
@@ -513,8 +508,8 @@ Init_ca_obj_bitarray ()
|
|
513
508
|
CA_OBJ_BITARRAY = ca_install_obj_type(rb_cCABitarray, ca_bitarray_func);
|
514
509
|
rb_define_const(rb_cObject, "CA_OBJ_BITARRAY", INT2NUM(CA_OBJ_BITARRAY));
|
515
510
|
|
516
|
-
rb_define_method(rb_cCArray, "bits", rb_ca_bitarray, 0);
|
517
511
|
rb_define_method(rb_cCArray, "bitarray", rb_ca_bitarray, 0);
|
512
|
+
rb_define_alias(rb_cCArray, "bits", "bitarray");
|
518
513
|
|
519
514
|
rb_define_alloc_func(rb_cCABitarray, rb_ca_bitarray_s_allocate);
|
520
515
|
rb_define_method(rb_cCABitarray, "initialize_copy",
|
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_bitfield.c
|
4
4
|
|
5
5
|
This file is part of Ruby/CArray extension library.
|
6
|
-
You can redistribute it and/or modify it under the terms of
|
7
|
-
the Ruby Licence.
|
8
6
|
|
9
|
-
Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
|
11
9
|
---------------------------------------------------------------------------- */
|
12
10
|
|
@@ -15,7 +13,7 @@
|
|
15
13
|
typedef struct {
|
16
14
|
int16_t obj_type;
|
17
15
|
int8_t data_type;
|
18
|
-
int8_t
|
16
|
+
int8_t ndim;
|
19
17
|
int32_t flags;
|
20
18
|
ca_size_t bytes;
|
21
19
|
ca_size_t elements;
|
@@ -35,7 +33,7 @@ static int8_t CA_OBJ_BITFIELD;
|
|
35
33
|
|
36
34
|
static VALUE rb_cCABitfield;
|
37
35
|
|
38
|
-
/*
|
36
|
+
/* yard:
|
39
37
|
class CABitField < CAVirtual # :nodoc:
|
40
38
|
end
|
41
39
|
*/
|
@@ -211,7 +209,7 @@ int
|
|
211
209
|
ca_bitfield_setup (CABitfield *ca, CArray *parent,
|
212
210
|
ca_size_t offset, ca_size_t bitlen)
|
213
211
|
{
|
214
|
-
int8_t
|
212
|
+
int8_t ndim;
|
215
213
|
int8_t data_type;
|
216
214
|
ca_size_t bytes = 0, elements;
|
217
215
|
ca_size_t bitsize;
|
@@ -228,7 +226,7 @@ ca_bitfield_setup (CABitfield *ca, CArray *parent,
|
|
228
226
|
}
|
229
227
|
*/
|
230
228
|
|
231
|
-
|
229
|
+
ndim = parent->ndim;
|
232
230
|
bitsize = parent->bytes * 8;
|
233
231
|
elements = parent->elements;
|
234
232
|
|
@@ -293,12 +291,12 @@ ca_bitfield_setup (CABitfield *ca, CArray *parent,
|
|
293
291
|
ca->obj_type = CA_OBJ_BITFIELD;
|
294
292
|
ca->data_type = data_type;
|
295
293
|
ca->flags = 0;
|
296
|
-
ca->
|
294
|
+
ca->ndim = ndim;
|
297
295
|
ca->bytes = bytes;
|
298
296
|
ca->elements = elements;
|
299
297
|
ca->ptr = NULL;
|
300
298
|
ca->mask = NULL;
|
301
|
-
ca->dim = ALLOC_N(ca_size_t,
|
299
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
302
300
|
|
303
301
|
ca->parent = parent;
|
304
302
|
ca->attach = 0;
|
@@ -308,7 +306,7 @@ ca_bitfield_setup (CABitfield *ca, CArray *parent,
|
|
308
306
|
ca->bit_offset = bit_offset;
|
309
307
|
ca->bit_mask = bit_mask;
|
310
308
|
|
311
|
-
memcpy(ca->dim, parent->dim,
|
309
|
+
memcpy(ca->dim, parent->dim, ndim * sizeof(ca_size_t));
|
312
310
|
|
313
311
|
if ( ca_has_mask(parent) ) {
|
314
312
|
ca_create_mask(ca);
|
@@ -484,7 +482,7 @@ ca_bitfield_func_create_mask (void *ap)
|
|
484
482
|
}
|
485
483
|
|
486
484
|
ca->mask = (CArray *) ca_refer_new(ca->parent->mask,
|
487
|
-
CA_BOOLEAN, ca->
|
485
|
+
CA_BOOLEAN, ca->ndim, ca->dim, 0, 0);
|
488
486
|
}
|
489
487
|
|
490
488
|
ca_operation_function_t ca_bitfield_func = {
|
@@ -559,11 +557,9 @@ rb_ca_bitfield_new (VALUE cary, ca_size_t offset, ca_size_t bitlen)
|
|
559
557
|
return obj;
|
560
558
|
}
|
561
559
|
|
562
|
-
/*
|
563
|
-
|
564
|
-
|
565
|
-
end
|
566
|
-
end
|
560
|
+
/* @overload bitfield (range, type)
|
561
|
+
|
562
|
+
[TBD]
|
567
563
|
*/
|
568
564
|
|
569
565
|
VALUE
|
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_block.c
|
4
4
|
|
5
5
|
This file is part of Ruby/CArray extension library.
|
6
|
-
You can redistribute it and/or modify it under the terms of
|
7
|
-
the Ruby Licence.
|
8
6
|
|
9
|
-
Copyright (C) 2005 Hiroki Motoyoshi
|
7
|
+
Copyright (C) 2005-2020 Hiroki Motoyoshi
|
10
8
|
|
11
9
|
---------------------------------------------------------------------------- */
|
12
10
|
|
@@ -14,13 +12,8 @@
|
|
14
12
|
|
15
13
|
VALUE rb_cCABlock;
|
16
14
|
|
17
|
-
/* rdoc:
|
18
|
-
class CABlock < CAVirtual # :nodoc:
|
19
|
-
end
|
20
|
-
*/
|
21
|
-
|
22
15
|
static int
|
23
|
-
ca_block_setup (CABlock *ca, CArray *parent, int8_t
|
16
|
+
ca_block_setup (CABlock *ca, CArray *parent, int8_t ndim, ca_size_t *dim,
|
24
17
|
ca_size_t *start, ca_size_t *step, ca_size_t *count, ca_size_t offset)
|
25
18
|
{
|
26
19
|
int8_t data_type;
|
@@ -33,7 +26,7 @@ ca_block_setup (CABlock *ca, CArray *parent, int8_t rank, ca_size_t *dim,
|
|
33
26
|
bytes = parent->bytes;
|
34
27
|
|
35
28
|
elements = 1;
|
36
|
-
for (i=0; i<
|
29
|
+
for (i=0; i<ndim; i++) {
|
37
30
|
if ( count[i] < 0 ) {
|
38
31
|
rb_raise(rb_eIndexError,
|
39
32
|
"invalid size for %i-th dimension (negative)", i);
|
@@ -41,8 +34,8 @@ ca_block_setup (CABlock *ca, CArray *parent, int8_t rank, ca_size_t *dim,
|
|
41
34
|
elements *= count[i];
|
42
35
|
}
|
43
36
|
|
44
|
-
maxdim_index =
|
45
|
-
for (i=
|
37
|
+
maxdim_index = ndim-1;
|
38
|
+
for (i=ndim-2; i>=0; i--) {
|
46
39
|
if ( count[i] > count[maxdim_index] ) {
|
47
40
|
maxdim_index = i;
|
48
41
|
}
|
@@ -50,7 +43,7 @@ ca_block_setup (CABlock *ca, CArray *parent, int8_t rank, ca_size_t *dim,
|
|
50
43
|
|
51
44
|
maxdim_step = 1;
|
52
45
|
maxdim_step0 = step[maxdim_index];
|
53
|
-
for (i=maxdim_index+1; i<
|
46
|
+
for (i=maxdim_index+1; i<ndim; i++) {
|
54
47
|
maxdim_step *= count[i];
|
55
48
|
maxdim_step0 *= dim[i];
|
56
49
|
}
|
@@ -58,7 +51,7 @@ ca_block_setup (CABlock *ca, CArray *parent, int8_t rank, ca_size_t *dim,
|
|
58
51
|
ca->obj_type = CA_OBJ_BLOCK;
|
59
52
|
ca->data_type = data_type;
|
60
53
|
ca->flags = 0;
|
61
|
-
ca->
|
54
|
+
ca->ndim = ndim;
|
62
55
|
ca->bytes = bytes;
|
63
56
|
ca->elements = elements;
|
64
57
|
ca->ptr = NULL;
|
@@ -67,10 +60,10 @@ ca_block_setup (CABlock *ca, CArray *parent, int8_t rank, ca_size_t *dim,
|
|
67
60
|
ca->attach = 0;
|
68
61
|
ca->nosync = 0;
|
69
62
|
ca->offset = offset;
|
70
|
-
ca->start = ALLOC_N(ca_size_t,
|
71
|
-
ca->step = ALLOC_N(ca_size_t,
|
72
|
-
ca->count = ALLOC_N(ca_size_t,
|
73
|
-
ca->size0 = ALLOC_N(ca_size_t,
|
63
|
+
ca->start = ALLOC_N(ca_size_t, ndim);
|
64
|
+
ca->step = ALLOC_N(ca_size_t, ndim);
|
65
|
+
ca->count = ALLOC_N(ca_size_t, ndim);
|
66
|
+
ca->size0 = ALLOC_N(ca_size_t, ndim);
|
74
67
|
|
75
68
|
ca->maxdim_index = maxdim_index;
|
76
69
|
ca->maxdim_step = maxdim_step;
|
@@ -80,10 +73,10 @@ ca_block_setup (CABlock *ca, CArray *parent, int8_t rank, ca_size_t *dim,
|
|
80
73
|
|
81
74
|
ca->dim = ca->count; /* ca->dim should not be free */
|
82
75
|
|
83
|
-
memcpy(ca->start, start,
|
84
|
-
memcpy(ca->step, step,
|
85
|
-
memcpy(ca->count, count,
|
86
|
-
memcpy(ca->size0, dim,
|
76
|
+
memcpy(ca->start, start, ndim * sizeof(ca_size_t));
|
77
|
+
memcpy(ca->step, step, ndim * sizeof(ca_size_t));
|
78
|
+
memcpy(ca->count, count, ndim * sizeof(ca_size_t));
|
79
|
+
memcpy(ca->size0, dim, ndim * sizeof(ca_size_t));
|
87
80
|
|
88
81
|
if ( ca_has_mask(parent) ) {
|
89
82
|
ca_create_mask(ca);
|
@@ -93,11 +86,11 @@ ca_block_setup (CABlock *ca, CArray *parent, int8_t rank, ca_size_t *dim,
|
|
93
86
|
}
|
94
87
|
|
95
88
|
CABlock *
|
96
|
-
ca_block_new (CArray *parent, int8_t
|
89
|
+
ca_block_new (CArray *parent, int8_t ndim, ca_size_t *dim,
|
97
90
|
ca_size_t *start, ca_size_t *step, ca_size_t *count, ca_size_t offset)
|
98
91
|
{
|
99
92
|
CABlock *ca = ALLOC(CABlock);
|
100
|
-
ca_block_setup(ca, parent,
|
93
|
+
ca_block_setup(ca, parent, ndim, dim, start, step, count, offset);
|
101
94
|
return ca;
|
102
95
|
}
|
103
96
|
|
@@ -126,7 +119,7 @@ ca_block_func_clone (void *ap)
|
|
126
119
|
{
|
127
120
|
CABlock *ca = (CABlock *) ap;
|
128
121
|
return ca_block_new(ca->parent,
|
129
|
-
ca->
|
122
|
+
ca->ndim, ca->size0,
|
130
123
|
ca->start, ca->step, ca->count, ca->offset);
|
131
124
|
}
|
132
125
|
|
@@ -162,7 +155,7 @@ ca_block_func_ptr_at_index (void *ap, ca_size_t *idx)
|
|
162
155
|
int8_t i;
|
163
156
|
ca_size_t n;
|
164
157
|
n = start[0] + idx[0]*step[0];
|
165
|
-
for (i=1; i<ca->
|
158
|
+
for (i=1; i<ca->ndim; i++) {
|
166
159
|
n *= size0[i];
|
167
160
|
n += start[i] + idx[i]*step[i];
|
168
161
|
}
|
@@ -186,7 +179,7 @@ ca_block_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
|
186
179
|
int8_t i;
|
187
180
|
ca_size_t n;
|
188
181
|
n = start[0] + idx[0]*step[0];
|
189
|
-
for (i=1; i<ca->
|
182
|
+
for (i=1; i<ca->ndim; i++) {
|
190
183
|
n *= size0[i];
|
191
184
|
n += start[i] + idx[i]*step[i];
|
192
185
|
}
|
@@ -204,7 +197,7 @@ ca_block_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
|
204
197
|
int8_t i;
|
205
198
|
ca_size_t n;
|
206
199
|
n = start[0] + idx[0]*step[0];
|
207
|
-
for (i=1; i<ca->
|
200
|
+
for (i=1; i<ca->ndim; i++) {
|
208
201
|
n *= size0[i];
|
209
202
|
n += start[i] + idx[i]*step[i];
|
210
203
|
}
|
@@ -292,7 +285,7 @@ ca_block_func_create_mask (void *ap)
|
|
292
285
|
ca_create_mask(ca->parent);
|
293
286
|
ca->mask =
|
294
287
|
(CArray *) ca_block_new(ca->parent->mask,
|
295
|
-
ca->
|
288
|
+
ca->ndim, ca->size0,
|
296
289
|
ca->start, ca->step, ca->count, ca->offset);
|
297
290
|
}
|
298
291
|
|
@@ -320,7 +313,7 @@ ca_operation_function_t ca_block_func = {
|
|
320
313
|
/* ------------------------------------------------------------------- */
|
321
314
|
|
322
315
|
VALUE
|
323
|
-
rb_ca_block_new (VALUE cary, int8_t
|
316
|
+
rb_ca_block_new (VALUE cary, int8_t ndim, ca_size_t *dim,
|
324
317
|
ca_size_t *start, ca_size_t *step, ca_size_t *count, ca_size_t offset)
|
325
318
|
{
|
326
319
|
volatile VALUE obj;
|
@@ -330,7 +323,7 @@ rb_ca_block_new (VALUE cary, int8_t rank, ca_size_t *dim,
|
|
330
323
|
rb_check_carray_object(cary);
|
331
324
|
Data_Get_Struct(cary, CArray, parent);
|
332
325
|
|
333
|
-
ca = ca_block_new(parent,
|
326
|
+
ca = ca_block_new(parent, ndim, dim, start, step, count, offset);
|
334
327
|
obj = ca_wrap_struct(ca);
|
335
328
|
rb_ca_set_parent(obj, cary);
|
336
329
|
rb_ca_data_type_inherit(obj, cary);
|
@@ -351,7 +344,7 @@ ca_block_attach_loop2 (CABlock *ca, int8_t level, ca_size_t saddr, ca_size_t sad
|
|
351
344
|
ca_size_t count = ca->count[level];
|
352
345
|
ca_size_t addr, addr0, i;
|
353
346
|
|
354
|
-
if ( level == ca->
|
347
|
+
if ( level == ca->ndim - 1 ) {
|
355
348
|
if ( ca->parent->ptr ) {
|
356
349
|
addr = saddr * ca->dim[level];
|
357
350
|
addr0 = saddr0 * ca->size0[level] + ca->start[level];
|
@@ -386,7 +379,7 @@ ca_block_attach_loop (CABlock *ca, ca_size_t level, ca_size_t saddr, ca_size_t s
|
|
386
379
|
ca_size_t count = ca->count[level];
|
387
380
|
ca_size_t addr, addr0, i;
|
388
381
|
|
389
|
-
if ( level == ca->
|
382
|
+
if ( level == ca->ndim - 1 ) {
|
390
383
|
if ( level == ca->maxdim_index ) {
|
391
384
|
addr = saddr * ca->dim[level];
|
392
385
|
addr0 = saddr0 * ca->size0[level] + ca->start[level];
|
@@ -431,7 +424,7 @@ static void
|
|
431
424
|
ca_block_attach (CABlock *ca)
|
432
425
|
{
|
433
426
|
ca_size_t addr = 0, addr0 = 0;
|
434
|
-
if ( ca->
|
427
|
+
if ( ca->ndim <= 2 ) {
|
435
428
|
ca_block_attach_loop2(ca, 0, addr, addr0);
|
436
429
|
}
|
437
430
|
else {
|
@@ -445,7 +438,7 @@ ca_block_sync_loop2 (CABlock *ca, int8_t level, ca_size_t saddr, ca_size_t saddr
|
|
445
438
|
ca_size_t count = ca->count[level];
|
446
439
|
ca_size_t addr, addr0, i;
|
447
440
|
|
448
|
-
if ( level == ca->
|
441
|
+
if ( level == ca->ndim - 1 ) {
|
449
442
|
if ( ca->parent->ptr ) {
|
450
443
|
addr = saddr * ca->dim[level];
|
451
444
|
addr0 = saddr0 * ca->size0[level] + ca->start[level];
|
@@ -479,7 +472,7 @@ ca_block_sync_loop (CABlock *ca, int8_t level, ca_size_t saddr, ca_size_t saddr0
|
|
479
472
|
ca_size_t count = ca->count[level];
|
480
473
|
ca_size_t addr, addr0, i;
|
481
474
|
|
482
|
-
if ( level == ca->
|
475
|
+
if ( level == ca->ndim - 1 ) {
|
483
476
|
if ( level == ca->maxdim_index ) {
|
484
477
|
addr = saddr * ca->dim[level];
|
485
478
|
addr0 = saddr0 * ca->size0[level] + ca->start[level];
|
@@ -520,7 +513,7 @@ static void
|
|
520
513
|
ca_block_sync (CABlock *cb)
|
521
514
|
{
|
522
515
|
ca_size_t addr = 0, addr0 = 0;
|
523
|
-
if ( cb->
|
516
|
+
if ( cb->ndim <= 2 ) {
|
524
517
|
ca_block_sync_loop2(cb, 0, addr, addr0);
|
525
518
|
}
|
526
519
|
else {
|
@@ -533,7 +526,7 @@ ca_block_fill_loop2 (CABlock *ca, int8_t level, ca_size_t saddr, char *val)
|
|
533
526
|
{
|
534
527
|
ca_size_t count = ca->count[level];
|
535
528
|
ca_size_t addr, i;
|
536
|
-
if ( level == ca->
|
529
|
+
if ( level == ca->ndim - 1 ) {
|
537
530
|
addr = saddr * ca->dim[level];
|
538
531
|
mfill_step(ca_ptr_at_addr(ca, addr),
|
539
532
|
ca->bytes, count, ca->step[level], val);
|
@@ -551,7 +544,7 @@ ca_block_fill_loop (CABlock *ca, int8_t level, ca_size_t saddr, char *val)
|
|
551
544
|
{
|
552
545
|
ca_size_t count = ca->count[level];
|
553
546
|
ca_size_t addr, i;
|
554
|
-
if ( level == ca->
|
547
|
+
if ( level == ca->ndim - 1 ) {
|
555
548
|
if ( level == ca->maxdim_index ) {
|
556
549
|
addr = saddr * ca->dim[level];
|
557
550
|
mfill_step(ca_ptr_at_addr(ca, addr),
|
@@ -586,7 +579,7 @@ static void
|
|
586
579
|
ca_block_fill (CABlock *ca, char *val)
|
587
580
|
{
|
588
581
|
ca_size_t addr = 0;
|
589
|
-
if ( ca->
|
582
|
+
if ( ca->ndim <= 2 ) {
|
590
583
|
ca_block_fill_loop2(ca, 0, addr, val);
|
591
584
|
}
|
592
585
|
else {
|
@@ -707,12 +700,12 @@ rb_cb_initialize_copy (VALUE self, VALUE other)
|
|
707
700
|
Data_Get_Struct(self, CABlock, ca);
|
708
701
|
Data_Get_Struct(other, CABlock, cs);
|
709
702
|
|
710
|
-
for (i=0; i<cs->
|
703
|
+
for (i=0; i<cs->ndim; i++) {
|
711
704
|
shrink[i] = 0;
|
712
705
|
}
|
713
706
|
|
714
707
|
ca_block_setup(ca, cs->parent,
|
715
|
-
cs->
|
708
|
+
cs->ndim, cs->size0, cs->start, cs->step, cs->count, cs->offset);
|
716
709
|
|
717
710
|
/* CHECK ME : other.parent instead of other ? */
|
718
711
|
rb_ca_set_parent(self, rb_ca_parent(other));
|
@@ -728,14 +721,14 @@ rb_cb_initialize_copy (VALUE self, VALUE other)
|
|
728
721
|
CABlock *cb; \
|
729
722
|
int8_t i; \
|
730
723
|
Data_Get_Struct(self, CABlock, cb); \
|
731
|
-
ary = rb_ary_new2(cb->
|
732
|
-
for (i=0; i<cb->
|
724
|
+
ary = rb_ary_new2(cb->ndim); \
|
725
|
+
for (i=0; i<cb->ndim; i++) { \
|
733
726
|
rb_ary_store(ary, i, LONG2NUM(cb->name[i])); \
|
734
727
|
} \
|
735
728
|
return ary; \
|
736
729
|
}
|
737
730
|
|
738
|
-
/*
|
731
|
+
/* @overload size0:
|
739
732
|
class CABlock
|
740
733
|
def size0
|
741
734
|
end
|
@@ -763,7 +756,7 @@ rb_cb_offset (VALUE self)
|
|
763
756
|
return SIZE2NUM(cb->offset);
|
764
757
|
}
|
765
758
|
|
766
|
-
/*
|
759
|
+
/* yard:
|
767
760
|
class CABlock
|
768
761
|
def idx2addr0 (idx)
|
769
762
|
end
|
@@ -780,13 +773,13 @@ rb_cb_idx2addr0 (int argc, VALUE *argv, VALUE self)
|
|
780
773
|
|
781
774
|
Data_Get_Struct(self, CABlock, cb);
|
782
775
|
|
783
|
-
if ( argc != cb->
|
776
|
+
if ( argc != cb->ndim ) {
|
784
777
|
rb_raise(rb_eArgError,
|
785
|
-
"invalid # of arguments (should be <%i>)", cb->
|
778
|
+
"invalid # of arguments (should be <%i>)", cb->ndim);
|
786
779
|
}
|
787
780
|
|
788
781
|
addr = 0;
|
789
|
-
for (i=0; i<cb->
|
782
|
+
for (i=0; i<cb->ndim; i++) {
|
790
783
|
idxi = NUM2SIZE(argv[i]);
|
791
784
|
CA_CHECK_INDEX(idxi, cb->dim[i]);
|
792
785
|
addr = cb->size0[i] * addr + cb->start[i] + idxi * cb->step[i];
|
@@ -795,7 +788,7 @@ rb_cb_idx2addr0 (int argc, VALUE *argv, VALUE self)
|
|
795
788
|
return SIZE2NUM(addr + cb->offset);
|
796
789
|
}
|
797
790
|
|
798
|
-
/*
|
791
|
+
/* yard:
|
799
792
|
class CABlock
|
800
793
|
def addr2addr0 (addr)
|
801
794
|
end
|
@@ -815,7 +808,7 @@ rb_cb_addr2addr0 (VALUE self, VALUE raddr)
|
|
815
808
|
ca_addr2index((CArray*)cb, addr, idx);
|
816
809
|
|
817
810
|
addr = 0;
|
818
|
-
for (i=0; i<cb->
|
811
|
+
for (i=0; i<cb->ndim; i++) {
|
819
812
|
addr *= cb->size0[i];
|
820
813
|
addr += cb->start[i] + idx[i] * cb->step[i];
|
821
814
|
}
|
@@ -824,7 +817,7 @@ rb_cb_addr2addr0 (VALUE self, VALUE raddr)
|
|
824
817
|
}
|
825
818
|
|
826
819
|
|
827
|
-
/*
|
820
|
+
/* yard:
|
828
821
|
class CABlock
|
829
822
|
def move (*index)
|
830
823
|
end
|
@@ -840,13 +833,13 @@ rb_cb_move (int argc, VALUE *argv, VALUE self)
|
|
840
833
|
|
841
834
|
Data_Get_Struct(self, CABlock, cb);
|
842
835
|
|
843
|
-
if ( argc != cb->
|
836
|
+
if ( argc != cb->ndim ) {
|
844
837
|
rb_raise(rb_eArgError, "invalid # of arguments");
|
845
838
|
}
|
846
839
|
|
847
840
|
ca_update_mask(cb);
|
848
841
|
|
849
|
-
for (i=0; i<cb->
|
842
|
+
for (i=0; i<cb->ndim; i++) {
|
850
843
|
start = NUM2SIZE(argv[i]);
|
851
844
|
if ( start < 0 ) {
|
852
845
|
start += cb->size0[i];
|