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_fake.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;
|
@@ -31,7 +29,7 @@ static int8_t CA_OBJ_FAKE;
|
|
31
29
|
|
32
30
|
static VALUE rb_cCAFake;
|
33
31
|
|
34
|
-
/*
|
32
|
+
/* yard:
|
35
33
|
class CAFake < CAVirtual # :nodoc:
|
36
34
|
end
|
37
35
|
*/
|
@@ -41,7 +39,7 @@ static VALUE rb_cCAFake;
|
|
41
39
|
int
|
42
40
|
ca_fake_setup (CAFake *ca, CArray *parent, int8_t data_type, ca_size_t bytes)
|
43
41
|
{
|
44
|
-
int8_t
|
42
|
+
int8_t ndim;
|
45
43
|
ca_size_t *dim, elements;
|
46
44
|
|
47
45
|
/* check arguments */
|
@@ -49,25 +47,25 @@ ca_fake_setup (CAFake *ca, CArray *parent, int8_t data_type, ca_size_t bytes)
|
|
49
47
|
CA_CHECK_DATA_TYPE(data_type);
|
50
48
|
CA_CHECK_BYTES(data_type, bytes);
|
51
49
|
|
52
|
-
|
50
|
+
ndim = parent->ndim;
|
53
51
|
dim = parent->dim;
|
54
52
|
elements = parent->elements;
|
55
53
|
|
56
54
|
ca->obj_type = CA_OBJ_FAKE;
|
57
55
|
ca->data_type = data_type;
|
58
56
|
ca->flags = 0;
|
59
|
-
ca->
|
57
|
+
ca->ndim = ndim;
|
60
58
|
ca->bytes = bytes;
|
61
59
|
ca->elements = elements;
|
62
60
|
ca->ptr = NULL;
|
63
61
|
ca->mask = NULL;
|
64
|
-
ca->dim = ALLOC_N(ca_size_t,
|
62
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
65
63
|
|
66
64
|
ca->parent = parent;
|
67
65
|
ca->attach = 0;
|
68
66
|
ca->nosync = 0;
|
69
67
|
|
70
|
-
memcpy(ca->dim, dim,
|
68
|
+
memcpy(ca->dim, dim, ndim * sizeof(ca_size_t));
|
71
69
|
|
72
70
|
if ( ca_has_mask(parent) ) {
|
73
71
|
ca_create_mask(ca);
|
@@ -288,7 +286,7 @@ ca_fake_func_create_mask (void *ap)
|
|
288
286
|
}
|
289
287
|
ca->mask =
|
290
288
|
(CArray *) ca_refer_new(ca->parent->mask,
|
291
|
-
CA_BOOLEAN, ca->
|
289
|
+
CA_BOOLEAN, ca->ndim, ca->dim, 0, 0);
|
292
290
|
}
|
293
291
|
|
294
292
|
ca_operation_function_t ca_fake_func = {
|
@@ -328,7 +326,7 @@ rb_ca_fake_new (VALUE cary, int8_t data_type, ca_size_t bytes)
|
|
328
326
|
return obj;
|
329
327
|
}
|
330
328
|
|
331
|
-
/*
|
329
|
+
/* yard:
|
332
330
|
class CArray
|
333
331
|
def fake (data_type, options={:bytes=>0})
|
334
332
|
end
|
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_farray.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;
|
@@ -33,7 +31,7 @@ static int8_t CA_OBJ_FARRAY;
|
|
33
31
|
|
34
32
|
static VALUE rb_cCAFarray;
|
35
33
|
|
36
|
-
/*
|
34
|
+
/* yard:
|
37
35
|
class CAFArray < CAVirtual # :nodoc:
|
38
36
|
end
|
39
37
|
*/
|
@@ -43,14 +41,14 @@ static VALUE rb_cCAFarray;
|
|
43
41
|
int
|
44
42
|
ca_farray_setup (CAFarray *ca, CArray *parent)
|
45
43
|
{
|
46
|
-
int8_t
|
44
|
+
int8_t ndim, data_type;
|
47
45
|
ca_size_t *dim, elements, bytes;
|
48
46
|
int i;
|
49
47
|
|
50
48
|
/* check arguments */
|
51
49
|
|
52
50
|
data_type = parent->data_type;
|
53
|
-
|
51
|
+
ndim = parent->ndim;
|
54
52
|
dim = parent->dim;
|
55
53
|
bytes = parent->bytes;
|
56
54
|
elements = parent->elements;
|
@@ -58,23 +56,23 @@ ca_farray_setup (CAFarray *ca, CArray *parent)
|
|
58
56
|
ca->obj_type = CA_OBJ_FARRAY;
|
59
57
|
ca->data_type = data_type;
|
60
58
|
ca->flags = 0;
|
61
|
-
ca->
|
59
|
+
ca->ndim = ndim;
|
62
60
|
ca->bytes = bytes;
|
63
61
|
ca->elements = elements;
|
64
62
|
ca->ptr = NULL;
|
65
63
|
ca->mask = NULL;
|
66
|
-
ca->dim = ALLOC_N(ca_size_t,
|
64
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
67
65
|
|
68
66
|
ca->parent = parent;
|
69
67
|
ca->attach = 0;
|
70
68
|
ca->nosync = 0;
|
71
69
|
|
72
|
-
for (i=0; i<
|
73
|
-
ca->dim[i] = dim[
|
70
|
+
for (i=0; i<ndim; i++) {
|
71
|
+
ca->dim[i] = dim[ndim-1-i];
|
74
72
|
}
|
75
73
|
|
76
74
|
ca->step = 1;
|
77
|
-
for (i=1; i<
|
75
|
+
for (i=1; i<ndim; i++) {
|
78
76
|
ca->step *= dim[i];
|
79
77
|
}
|
80
78
|
|
@@ -124,11 +122,11 @@ static void
|
|
124
122
|
ca_farray_func_fetch_index (void *ap, ca_size_t *idx, void *ptr)
|
125
123
|
{
|
126
124
|
CAFarray *ca = (CAFarray *) ap;
|
127
|
-
int8_t
|
125
|
+
int8_t ndim = ca->ndim;
|
128
126
|
ca_size_t idx0[CA_RANK_MAX];
|
129
127
|
int i;
|
130
|
-
for (i=0; i<
|
131
|
-
idx0[i] = idx[
|
128
|
+
for (i=0; i<ndim; i++) {
|
129
|
+
idx0[i] = idx[ndim-1-i];
|
132
130
|
}
|
133
131
|
ca_fetch_index(ca->parent, idx0, ptr);
|
134
132
|
}
|
@@ -137,11 +135,11 @@ static void
|
|
137
135
|
ca_farray_func_store_index (void *ap, ca_size_t *idx, void *ptr)
|
138
136
|
{
|
139
137
|
CAFarray *ca = (CAFarray *) ap;
|
140
|
-
int8_t
|
138
|
+
int8_t ndim = ca->ndim;
|
141
139
|
ca_size_t idx0[CA_RANK_MAX];
|
142
140
|
int i;
|
143
|
-
for (i=0; i<
|
144
|
-
idx0[i] = idx[
|
141
|
+
for (i=0; i<ndim; i++) {
|
142
|
+
idx0[i] = idx[ndim-1-i];
|
145
143
|
}
|
146
144
|
ca_store_index(ca->parent, idx0, ptr);
|
147
145
|
}
|
@@ -258,7 +256,7 @@ ca_fa_attach_loop (CAFarray *ca, int8_t level, ca_size_t *idx, ca_size_t *idx0)
|
|
258
256
|
ca_size_t step = ca->step;
|
259
257
|
ca_size_t dim = ca->dim[level];
|
260
258
|
ca_size_t i;
|
261
|
-
if ( level == ca->
|
259
|
+
if ( level == ca->ndim - 1 ) {
|
262
260
|
idx[level] = 0;
|
263
261
|
idx0[0] = 0;
|
264
262
|
switch ( ca->bytes ) {
|
@@ -315,7 +313,7 @@ ca_fa_attach_loop (CAFarray *ca, int8_t level, ca_size_t *idx, ca_size_t *idx0)
|
|
315
313
|
}
|
316
314
|
}
|
317
315
|
else {
|
318
|
-
int level0 = ca->
|
316
|
+
int level0 = ca->ndim - 1 - level;
|
319
317
|
for (i=0; i<dim; i++) {
|
320
318
|
idx[level] = i;
|
321
319
|
idx0[level0] = i;
|
@@ -339,7 +337,7 @@ ca_fa_sync_loop (CAFarray *ca, int8_t level, ca_size_t *idx, ca_size_t *idx0)
|
|
339
337
|
ca_size_t dim = ca->dim[level];
|
340
338
|
ca_size_t i;
|
341
339
|
|
342
|
-
if ( level == ca->
|
340
|
+
if ( level == ca->ndim - 1 ) {
|
343
341
|
idx[level] = 0;
|
344
342
|
idx0[0] = 0;
|
345
343
|
switch ( ca->bytes ) {
|
@@ -398,7 +396,7 @@ ca_fa_sync_loop (CAFarray *ca, int8_t level, ca_size_t *idx, ca_size_t *idx0)
|
|
398
396
|
else {
|
399
397
|
for (i=0; i<dim; i++) {
|
400
398
|
idx[level] = i;
|
401
|
-
idx0[ca->
|
399
|
+
idx0[ca->ndim - 1 - level] = i;
|
402
400
|
ca_fa_sync_loop(ca, level+1, idx, idx0);
|
403
401
|
}
|
404
402
|
}
|
@@ -429,7 +427,7 @@ rb_ca_farray_new (VALUE cary)
|
|
429
427
|
return obj;
|
430
428
|
}
|
431
429
|
|
432
|
-
/*
|
430
|
+
/* yard:
|
433
431
|
class CArray
|
434
432
|
# create the virtual transposed array which dimension order is reversed.
|
435
433
|
def t
|
@@ -3,10 +3,8 @@
|
|
3
3
|
ca_obj_field.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;
|
@@ -33,7 +31,7 @@ static int8_t CA_OBJ_FIELD;
|
|
33
31
|
|
34
32
|
static VALUE rb_cCAField;
|
35
33
|
|
36
|
-
/*
|
34
|
+
/* yard:
|
37
35
|
class CAField < CAVirtual # :nodoc:
|
38
36
|
end
|
39
37
|
*/
|
@@ -44,7 +42,7 @@ int
|
|
44
42
|
ca_field_setup (CAField *ca, CArray *parent,
|
45
43
|
ca_size_t offset, int8_t data_type, ca_size_t bytes)
|
46
44
|
{
|
47
|
-
int8_t
|
45
|
+
int8_t ndim;
|
48
46
|
ca_size_t elements;
|
49
47
|
|
50
48
|
/* check arguments */
|
@@ -64,25 +62,25 @@ ca_field_setup (CAField *ca, CArray *parent,
|
|
64
62
|
rb_raise(rb_eRuntimeError, "offset or bytes out of range");
|
65
63
|
}
|
66
64
|
|
67
|
-
|
65
|
+
ndim = parent->ndim;
|
68
66
|
elements = parent->elements;
|
69
67
|
|
70
68
|
ca->obj_type = CA_OBJ_FIELD;
|
71
69
|
ca->data_type = data_type;
|
72
70
|
ca->flags = 0;
|
73
|
-
ca->
|
71
|
+
ca->ndim = ndim;
|
74
72
|
ca->bytes = bytes;
|
75
73
|
ca->elements = elements;
|
76
74
|
ca->ptr = NULL;
|
77
75
|
ca->mask = NULL;
|
78
|
-
ca->dim = ALLOC_N(ca_size_t,
|
76
|
+
ca->dim = ALLOC_N(ca_size_t, ndim);
|
79
77
|
|
80
78
|
ca->parent = parent;
|
81
79
|
ca->attach = 0;
|
82
80
|
ca->nosync = 0;
|
83
81
|
ca->offset = offset;
|
84
82
|
|
85
|
-
memcpy(ca->dim, parent->dim,
|
83
|
+
memcpy(ca->dim, parent->dim, ndim * sizeof(ca_size_t));
|
86
84
|
|
87
85
|
if ( ca_has_mask(parent) ) {
|
88
86
|
ca_create_mask(ca);
|
@@ -149,13 +147,13 @@ ca_field_func_ptr_at_index (void *ap, ca_size_t *idx)
|
|
149
147
|
ca_size_t *dim = ca->dim;
|
150
148
|
int8_t i;
|
151
149
|
ca_size_t n;
|
152
|
-
n = idx[0]; /* n = idx[0]*dim[1]*dim[2]*...*dim[
|
153
|
-
for (i=1; i<ca->
|
154
|
-
n = dim[i]*n+idx[i]; /* ... + idx[
|
150
|
+
n = idx[0]; /* n = idx[0]*dim[1]*dim[2]*...*dim[ndim-1] */
|
151
|
+
for (i=1; i<ca->ndim; i++) { /* + idx[1]*dim[1]*dim[2]*...*dim[ndim-1] */
|
152
|
+
n = dim[i]*n+idx[i]; /* ... + idx[ndim-2]*dim[1] + idx[ndim-1] */
|
155
153
|
}
|
156
154
|
|
157
155
|
if ( ca->parent->ptr == NULL ) {
|
158
|
-
return ca_ptr_at_addr(ca->parent, n) + ca->offset;
|
156
|
+
return (void *)((char *) ca_ptr_at_addr(ca->parent, n) + ca->offset);
|
159
157
|
}
|
160
158
|
else {
|
161
159
|
return ca->parent->ptr + ca->parent->bytes * n + ca->offset;
|
@@ -285,7 +283,7 @@ ca_field_func_create_mask (void *ap)
|
|
285
283
|
}
|
286
284
|
ca->mask =
|
287
285
|
(CArray *) ca_refer_new(ca->parent->mask,
|
288
|
-
CA_BOOLEAN, ca->
|
286
|
+
CA_BOOLEAN, ca->ndim, ca->dim, 0, 0);
|
289
287
|
}
|
290
288
|
|
291
289
|
ca_operation_function_t ca_field_func = {
|
@@ -324,7 +322,7 @@ ca_field_attach (CAField *ca)
|
|
324
322
|
case CA_UINT8:
|
325
323
|
{
|
326
324
|
char *p = ca_ptr_at_addr(ca, 0);
|
327
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
325
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
328
326
|
while ( n-- ) {
|
329
327
|
*p = *q;
|
330
328
|
p += 1; q += pbytes;
|
@@ -335,7 +333,7 @@ ca_field_attach (CAField *ca)
|
|
335
333
|
case CA_UINT16:
|
336
334
|
{
|
337
335
|
int16_t *p = (int16_t*) ca_ptr_at_addr(ca, 0);
|
338
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
336
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
339
337
|
while ( n-- ) {
|
340
338
|
*p = *(int16_t*) q;
|
341
339
|
p += 1; q += pbytes;
|
@@ -347,7 +345,7 @@ ca_field_attach (CAField *ca)
|
|
347
345
|
case CA_FLOAT32:
|
348
346
|
{
|
349
347
|
int32_t *p = (int32_t*) ca_ptr_at_addr(ca, 0);
|
350
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
348
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
351
349
|
while ( n-- ) {
|
352
350
|
*p = *(int32_t*) q;
|
353
351
|
p += 1; q += pbytes;
|
@@ -359,7 +357,7 @@ ca_field_attach (CAField *ca)
|
|
359
357
|
case CA_FLOAT64:
|
360
358
|
{
|
361
359
|
float64_t *p = (float64_t*) ca_ptr_at_addr(ca, 0);
|
362
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
360
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
363
361
|
while ( n-- ) {
|
364
362
|
*p = *(float64_t*) q;
|
365
363
|
p += 1; q += pbytes;
|
@@ -369,7 +367,7 @@ ca_field_attach (CAField *ca)
|
|
369
367
|
default:
|
370
368
|
{
|
371
369
|
char *p = ca_ptr_at_addr(ca, 0);
|
372
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
370
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
373
371
|
while ( n-- ) {
|
374
372
|
memcpy(p, q, ca->bytes);
|
375
373
|
p += bytes; q += pbytes;
|
@@ -391,7 +389,7 @@ ca_field_sync (CAField *ca)
|
|
391
389
|
case CA_UINT8:
|
392
390
|
{
|
393
391
|
char *p = ca_ptr_at_addr(ca, 0);
|
394
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
392
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
395
393
|
while ( n-- ) {
|
396
394
|
*q = *p;
|
397
395
|
p += 1; q += pbytes;
|
@@ -402,7 +400,7 @@ ca_field_sync (CAField *ca)
|
|
402
400
|
case CA_UINT16:
|
403
401
|
{
|
404
402
|
int16_t *p = (int16_t*) ca_ptr_at_addr(ca, 0);
|
405
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
403
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
406
404
|
while ( n-- ) {
|
407
405
|
*(int16_t*) q = *p;
|
408
406
|
p += 1; q += pbytes;
|
@@ -414,7 +412,7 @@ ca_field_sync (CAField *ca)
|
|
414
412
|
case CA_FLOAT32:
|
415
413
|
{
|
416
414
|
int32_t *p = (int32_t*) ca_ptr_at_addr(ca, 0);
|
417
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
415
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
418
416
|
while ( n-- ) {
|
419
417
|
*(int32_t*) q = *p;
|
420
418
|
p += 1; q += pbytes;
|
@@ -426,7 +424,7 @@ ca_field_sync (CAField *ca)
|
|
426
424
|
case CA_FLOAT64:
|
427
425
|
{
|
428
426
|
float64_t *p = (float64_t*) ca_ptr_at_addr(ca, 0);
|
429
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
427
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
430
428
|
while ( n-- ) {
|
431
429
|
*(float64_t*) q = *p;
|
432
430
|
p += 1; q += pbytes;
|
@@ -436,7 +434,7 @@ ca_field_sync (CAField *ca)
|
|
436
434
|
default:
|
437
435
|
{
|
438
436
|
char *p = ca_ptr_at_addr(ca, 0);
|
439
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
437
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
440
438
|
while ( n-- ) {
|
441
439
|
memcpy(q, p, ca->bytes);
|
442
440
|
p += bytes; q += pbytes;
|
@@ -450,7 +448,7 @@ ca_field_fill (CAField *ca, char *ptr)
|
|
450
448
|
{
|
451
449
|
ca_size_t pbytes = ca->parent->bytes;
|
452
450
|
ca_size_t n = ca->elements;
|
453
|
-
char *q = ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
451
|
+
char *q = (char *) ca_ptr_at_addr(ca->parent, 0) + ca->offset;
|
454
452
|
|
455
453
|
switch ( ca->data_type ) {
|
456
454
|
case CA_BOOLEAN:
|
@@ -545,7 +543,7 @@ rb_ca_field_initialize_copy (VALUE self, VALUE other)
|
|
545
543
|
|
546
544
|
/* ----------------------------------------------------------------------- */
|
547
545
|
|
548
|
-
/*
|
546
|
+
/* yard:
|
549
547
|
class CArray
|
550
548
|
# call-seq:
|
551
549
|
# CArray#field(offset, data_type[, :bytes=>bytes])
|
@@ -583,21 +581,21 @@ rb_ca_field (int argc, VALUE *argv, VALUE self)
|
|
583
581
|
if ( rb_obj_is_carray(rtype) ) {
|
584
582
|
CArray *ct;
|
585
583
|
ca_size_t dim[CA_RANK_MAX];
|
586
|
-
int8_t
|
584
|
+
int8_t ndim;
|
587
585
|
int8_t i, j;
|
588
586
|
Data_Get_Struct(rtype, CArray, ct);
|
589
587
|
data_type = CA_FIXLEN;
|
590
588
|
bytes = ct->bytes * ct->elements;
|
591
589
|
obj = rb_ca_field_new(self, offset, data_type, bytes);
|
592
590
|
rb_ca_data_type_inherit(obj, rtype);
|
593
|
-
|
594
|
-
for (i=0; i<ca->
|
591
|
+
ndim = ca->ndim + ct->ndim;
|
592
|
+
for (i=0; i<ca->ndim; i++) {
|
595
593
|
dim[i] = ca->dim[i];
|
596
594
|
}
|
597
|
-
for (j=0; j<ct->
|
595
|
+
for (j=0; j<ct->ndim; j++, i++) {
|
598
596
|
dim[i] = ct->dim[j];
|
599
597
|
}
|
600
|
-
obj = rb_ca_refer_new(obj, ct->data_type,
|
598
|
+
obj = rb_ca_refer_new(obj, ct->data_type, ndim, dim, ct->bytes, 0);
|
601
599
|
}
|
602
600
|
else {
|
603
601
|
rb_ca_guess_type_and_bytes(rtype, rbytes, &data_type, &bytes);
|