carray 3.0.4 → 3.0.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/CHANGELOG.md +205 -0
- data/carray.gemspec +1 -1
- data/ext/ca_array_pool.c +25 -1
- data/ext/ca_axis_dispatch.c +13 -20
- data/ext/ca_categorical_iterator.c +27 -20
- data/ext/ca_compare.c +4 -4
- data/ext/ca_composite_dispatch.c +9 -9
- data/ext/ca_kernel_iterator.c +6 -6
- data/ext/ca_kernel_iterator.h +112 -83
- data/ext/ca_obj_array.c +69 -19
- data/ext/ca_obj_bincmp.c +1 -0
- data/ext/ca_obj_binop.c +1 -0
- data/ext/ca_obj_bitarray.c +5 -1
- data/ext/ca_obj_bitfield.c +58 -43
- data/ext/ca_obj_byte_swap.c +2 -1
- data/ext/ca_obj_const_string.c +15 -3
- data/ext/ca_obj_face.c +42 -1
- data/ext/ca_obj_field.c +13 -3
- data/ext/ca_obj_grid.c +52 -5
- data/ext/ca_obj_monop.c +46 -10
- data/ext/ca_obj_object.c +64 -12
- data/ext/ca_obj_record.c +3 -0
- data/ext/ca_obj_reduce.c +4 -0
- data/ext/ca_obj_refer.c +18 -9
- data/ext/ca_obj_roll.c +26 -6
- data/ext/ca_obj_select.c +34 -5
- data/ext/ca_obj_shift.c +31 -7
- data/ext/ca_obj_stack.c +1 -0
- data/ext/ca_obj_stride.c +28 -19
- data/ext/ca_obj_string.c +11 -2
- data/ext/ca_obj_tile.c +27 -7
- data/ext/ca_obj_transpose.c +8 -4
- data/ext/ca_obj_triop.c +3 -0
- data/ext/ca_obj_window.c +79 -50
- data/ext/ca_op_ipower.c +4 -4
- data/ext/ca_sort_kernels.h +6 -3
- data/ext/carray.h +33 -0
- data/ext/carray_access.c +16 -3
- data/ext/carray_attribute.c +24 -0
- data/ext/carray_cast.c +243 -82
- data/ext/carray_cast_func.rb +56 -26
- data/ext/carray_conversion.c +2 -2
- data/ext/carray_core.c +3 -0
- data/ext/carray_count.c +6 -0
- data/ext/carray_element.c +9 -4
- data/ext/carray_factorize.c +20 -20
- data/ext/carray_generate.c +8 -2
- data/ext/carray_histogram.c +1 -1
- data/ext/carray_index_classifier.c +4 -4
- data/ext/carray_internal.h +12 -0
- data/ext/carray_kernels_bincmp.c +168 -168
- data/ext/carray_kernels_binop.c +900 -900
- data/ext/carray_kernels_init.c +4 -4
- data/ext/carray_kernels_moncmp.c +96 -96
- data/ext/carray_kernels_monop.c +1984 -1984
- data/ext/carray_kernels_reduce_aggregate.c +1733 -1733
- data/ext/carray_kernels_reduce_cumulative.c +642 -642
- data/ext/carray_kernels_reduce_extreme.c +1150 -1150
- data/ext/carray_kernels_reduce_variance.c +258 -258
- data/ext/carray_kernels_scan.c +128 -128
- data/ext/carray_kernels_search.c +340 -340
- data/ext/carray_kernels_sort.c +295 -304
- data/ext/carray_kernels_triop.c +114 -114
- data/ext/carray_key_windows.c +4 -0
- data/ext/carray_mask.c +45 -22
- data/ext/carray_memory_view.c +2 -2
- data/ext/carray_operator.c +5 -5
- data/ext/carray_order.c +227 -8
- data/ext/carray_random.c +18 -18
- data/ext/carray_scatter.c +24 -7
- data/ext/carray_slab.c +32 -9
- data/ext/carray_sort.c +224 -16
- data/ext/carray_sort_kernel.c +5 -7
- data/ext/carray_struct.c +35 -43
- data/ext/carray_time_text.c +4 -2
- data/ext/carray_utils.c +63 -21
- data/ext/mkkernel.rb +210 -115
- data/ext/version.h +4 -4
- data/lib/carray/attribute.rb +17 -4
- data/lib/carray/basics.rb +27 -7
- data/lib/carray/categorical.rb +30 -16
- data/lib/carray/categorical_iterator.rb +6 -6
- data/lib/carray/const_string.rb +10 -0
- data/lib/carray/data_type_extension.rb +8 -1
- data/lib/carray/fixlen_string.rb +41 -2
- data/lib/carray/frame/column_verbs.rb +4 -3
- data/lib/carray/frame/concat.rb +17 -3
- data/lib/carray/frame/frame.rb +6 -7
- data/lib/carray/frame/group.rb +100 -13
- data/lib/carray/frame/io.rb +3 -1
- data/lib/carray/fuse_source.rb +31 -2
- data/lib/carray/lazy.rb +35 -0
- data/lib/carray/methods/is_in.rb +8 -1
- data/lib/carray/segment_iterator.rb +12 -8
- data/lib/carray/serialize.rb +19 -2
- data/lib/carray/stack.rb +15 -12
- data/lib/carray/string.rb +8 -0
- data/lib/carray/string_operation_extension.rb +13 -5
- data/lib/carray/struct_builder.rb +5 -3
- data/lib/carray/time.rb +107 -68
- data/yard-stubs/ca_obj_transpose.rb +5 -4
- data/yard-stubs/carray_attribute.rb +3 -1
- data/yard-stubs/carray_cast.rb +2 -0
- data/yard-stubs/carray_conversion.rb +5 -1
- data/yard-stubs/carray_element.rb +7 -6
- data/yard-stubs/carray_mask.rb +8 -3
- data/yard-stubs/carray_math.rb +14 -4
- data/yard-stubs/carray_order.rb +100 -4
- data/yard-stubs/carray_scatter.rb +7 -5
- metadata +1 -1
data/ext/carray_kernels_triop.c
CHANGED
|
@@ -120,9 +120,9 @@ ca_triop_fma_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
120
120
|
char *ptr3, ca_size_t i3,
|
|
121
121
|
char *ptr4, ca_size_t i4)
|
|
122
122
|
{
|
|
123
|
-
|
|
124
|
-
*q3 = (
|
|
125
|
-
|
|
123
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2,
|
|
124
|
+
*q3 = (ca_u_int16_t *) ptr3, *q4 = (ca_u_int16_t *) ptr4;
|
|
125
|
+
ca_u_int16_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
126
126
|
ca_size_t k;
|
|
127
127
|
if ( m ) {
|
|
128
128
|
boolean8_t *pm;
|
|
@@ -154,9 +154,9 @@ ca_triop_fma_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
154
154
|
char *ptr3, ca_size_t i3,
|
|
155
155
|
char *ptr4, ca_size_t i4)
|
|
156
156
|
{
|
|
157
|
-
|
|
158
|
-
*q3 = (
|
|
159
|
-
|
|
157
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2,
|
|
158
|
+
*q3 = (ca_u_uint16_t *) ptr3, *q4 = (ca_u_uint16_t *) ptr4;
|
|
159
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
160
160
|
ca_size_t k;
|
|
161
161
|
if ( m ) {
|
|
162
162
|
boolean8_t *pm;
|
|
@@ -188,9 +188,9 @@ ca_triop_fma_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
188
188
|
char *ptr3, ca_size_t i3,
|
|
189
189
|
char *ptr4, ca_size_t i4)
|
|
190
190
|
{
|
|
191
|
-
|
|
192
|
-
*q3 = (
|
|
193
|
-
|
|
191
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2,
|
|
192
|
+
*q3 = (ca_u_int32_t *) ptr3, *q4 = (ca_u_int32_t *) ptr4;
|
|
193
|
+
ca_u_int32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
194
194
|
ca_size_t k;
|
|
195
195
|
if ( m ) {
|
|
196
196
|
boolean8_t *pm;
|
|
@@ -222,9 +222,9 @@ ca_triop_fma_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
222
222
|
char *ptr3, ca_size_t i3,
|
|
223
223
|
char *ptr4, ca_size_t i4)
|
|
224
224
|
{
|
|
225
|
-
|
|
226
|
-
*q3 = (
|
|
227
|
-
|
|
225
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2,
|
|
226
|
+
*q3 = (ca_u_uint32_t *) ptr3, *q4 = (ca_u_uint32_t *) ptr4;
|
|
227
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
228
228
|
ca_size_t k;
|
|
229
229
|
if ( m ) {
|
|
230
230
|
boolean8_t *pm;
|
|
@@ -256,9 +256,9 @@ ca_triop_fma_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
256
256
|
char *ptr3, ca_size_t i3,
|
|
257
257
|
char *ptr4, ca_size_t i4)
|
|
258
258
|
{
|
|
259
|
-
|
|
260
|
-
*q3 = (
|
|
261
|
-
|
|
259
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2,
|
|
260
|
+
*q3 = (ca_u_int64_t *) ptr3, *q4 = (ca_u_int64_t *) ptr4;
|
|
261
|
+
ca_u_int64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
262
262
|
ca_size_t k;
|
|
263
263
|
if ( m ) {
|
|
264
264
|
boolean8_t *pm;
|
|
@@ -290,9 +290,9 @@ ca_triop_fma_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
290
290
|
char *ptr3, ca_size_t i3,
|
|
291
291
|
char *ptr4, ca_size_t i4)
|
|
292
292
|
{
|
|
293
|
-
|
|
294
|
-
*q3 = (
|
|
295
|
-
|
|
293
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2,
|
|
294
|
+
*q3 = (ca_u_uint64_t *) ptr3, *q4 = (ca_u_uint64_t *) ptr4;
|
|
295
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
296
296
|
ca_size_t k;
|
|
297
297
|
if ( m ) {
|
|
298
298
|
boolean8_t *pm;
|
|
@@ -324,9 +324,9 @@ ca_triop_fma_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
324
324
|
char *ptr3, ca_size_t i3,
|
|
325
325
|
char *ptr4, ca_size_t i4)
|
|
326
326
|
{
|
|
327
|
-
|
|
328
|
-
*q3 = (
|
|
329
|
-
|
|
327
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2,
|
|
328
|
+
*q3 = (ca_u_float32_t *) ptr3, *q4 = (ca_u_float32_t *) ptr4;
|
|
329
|
+
ca_u_float32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
330
330
|
ca_size_t k;
|
|
331
331
|
if ( m ) {
|
|
332
332
|
boolean8_t *pm;
|
|
@@ -358,9 +358,9 @@ ca_triop_fma_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
358
358
|
char *ptr3, ca_size_t i3,
|
|
359
359
|
char *ptr4, ca_size_t i4)
|
|
360
360
|
{
|
|
361
|
-
|
|
362
|
-
*q3 = (
|
|
363
|
-
|
|
361
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2,
|
|
362
|
+
*q3 = (ca_u_float64_t *) ptr3, *q4 = (ca_u_float64_t *) ptr4;
|
|
363
|
+
ca_u_float64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
364
364
|
ca_size_t k;
|
|
365
365
|
if ( m ) {
|
|
366
366
|
boolean8_t *pm;
|
|
@@ -392,9 +392,9 @@ ca_triop_fma_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
392
392
|
char *ptr3, ca_size_t i3,
|
|
393
393
|
char *ptr4, ca_size_t i4)
|
|
394
394
|
{
|
|
395
|
-
|
|
396
|
-
*q3 = (
|
|
397
|
-
|
|
395
|
+
ca_u_cmplx64_t *q1 = (ca_u_cmplx64_t *) ptr1, *q2 = (ca_u_cmplx64_t *) ptr2,
|
|
396
|
+
*q3 = (ca_u_cmplx64_t *) ptr3, *q4 = (ca_u_cmplx64_t *) ptr4;
|
|
397
|
+
ca_u_cmplx64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
398
398
|
ca_size_t k;
|
|
399
399
|
if ( m ) {
|
|
400
400
|
boolean8_t *pm;
|
|
@@ -426,9 +426,9 @@ ca_triop_fma_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
426
426
|
char *ptr3, ca_size_t i3,
|
|
427
427
|
char *ptr4, ca_size_t i4)
|
|
428
428
|
{
|
|
429
|
-
|
|
430
|
-
*q3 = (
|
|
431
|
-
|
|
429
|
+
ca_u_cmplx128_t *q1 = (ca_u_cmplx128_t *) ptr1, *q2 = (ca_u_cmplx128_t *) ptr2,
|
|
430
|
+
*q3 = (ca_u_cmplx128_t *) ptr3, *q4 = (ca_u_cmplx128_t *) ptr4;
|
|
431
|
+
ca_u_cmplx128_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
432
432
|
ca_size_t k;
|
|
433
433
|
if ( m ) {
|
|
434
434
|
boolean8_t *pm;
|
|
@@ -591,9 +591,9 @@ ca_triop_fms_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
591
591
|
char *ptr3, ca_size_t i3,
|
|
592
592
|
char *ptr4, ca_size_t i4)
|
|
593
593
|
{
|
|
594
|
-
|
|
595
|
-
*q3 = (
|
|
596
|
-
|
|
594
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2,
|
|
595
|
+
*q3 = (ca_u_int16_t *) ptr3, *q4 = (ca_u_int16_t *) ptr4;
|
|
596
|
+
ca_u_int16_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
597
597
|
ca_size_t k;
|
|
598
598
|
if ( m ) {
|
|
599
599
|
boolean8_t *pm;
|
|
@@ -625,9 +625,9 @@ ca_triop_fms_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
625
625
|
char *ptr3, ca_size_t i3,
|
|
626
626
|
char *ptr4, ca_size_t i4)
|
|
627
627
|
{
|
|
628
|
-
|
|
629
|
-
*q3 = (
|
|
630
|
-
|
|
628
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2,
|
|
629
|
+
*q3 = (ca_u_uint16_t *) ptr3, *q4 = (ca_u_uint16_t *) ptr4;
|
|
630
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
631
631
|
ca_size_t k;
|
|
632
632
|
if ( m ) {
|
|
633
633
|
boolean8_t *pm;
|
|
@@ -659,9 +659,9 @@ ca_triop_fms_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
659
659
|
char *ptr3, ca_size_t i3,
|
|
660
660
|
char *ptr4, ca_size_t i4)
|
|
661
661
|
{
|
|
662
|
-
|
|
663
|
-
*q3 = (
|
|
664
|
-
|
|
662
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2,
|
|
663
|
+
*q3 = (ca_u_int32_t *) ptr3, *q4 = (ca_u_int32_t *) ptr4;
|
|
664
|
+
ca_u_int32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
665
665
|
ca_size_t k;
|
|
666
666
|
if ( m ) {
|
|
667
667
|
boolean8_t *pm;
|
|
@@ -693,9 +693,9 @@ ca_triop_fms_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
693
693
|
char *ptr3, ca_size_t i3,
|
|
694
694
|
char *ptr4, ca_size_t i4)
|
|
695
695
|
{
|
|
696
|
-
|
|
697
|
-
*q3 = (
|
|
698
|
-
|
|
696
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2,
|
|
697
|
+
*q3 = (ca_u_uint32_t *) ptr3, *q4 = (ca_u_uint32_t *) ptr4;
|
|
698
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
699
699
|
ca_size_t k;
|
|
700
700
|
if ( m ) {
|
|
701
701
|
boolean8_t *pm;
|
|
@@ -727,9 +727,9 @@ ca_triop_fms_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
727
727
|
char *ptr3, ca_size_t i3,
|
|
728
728
|
char *ptr4, ca_size_t i4)
|
|
729
729
|
{
|
|
730
|
-
|
|
731
|
-
*q3 = (
|
|
732
|
-
|
|
730
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2,
|
|
731
|
+
*q3 = (ca_u_int64_t *) ptr3, *q4 = (ca_u_int64_t *) ptr4;
|
|
732
|
+
ca_u_int64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
733
733
|
ca_size_t k;
|
|
734
734
|
if ( m ) {
|
|
735
735
|
boolean8_t *pm;
|
|
@@ -761,9 +761,9 @@ ca_triop_fms_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
761
761
|
char *ptr3, ca_size_t i3,
|
|
762
762
|
char *ptr4, ca_size_t i4)
|
|
763
763
|
{
|
|
764
|
-
|
|
765
|
-
*q3 = (
|
|
766
|
-
|
|
764
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2,
|
|
765
|
+
*q3 = (ca_u_uint64_t *) ptr3, *q4 = (ca_u_uint64_t *) ptr4;
|
|
766
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
767
767
|
ca_size_t k;
|
|
768
768
|
if ( m ) {
|
|
769
769
|
boolean8_t *pm;
|
|
@@ -795,9 +795,9 @@ ca_triop_fms_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
795
795
|
char *ptr3, ca_size_t i3,
|
|
796
796
|
char *ptr4, ca_size_t i4)
|
|
797
797
|
{
|
|
798
|
-
|
|
799
|
-
*q3 = (
|
|
800
|
-
|
|
798
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2,
|
|
799
|
+
*q3 = (ca_u_float32_t *) ptr3, *q4 = (ca_u_float32_t *) ptr4;
|
|
800
|
+
ca_u_float32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
801
801
|
ca_size_t k;
|
|
802
802
|
if ( m ) {
|
|
803
803
|
boolean8_t *pm;
|
|
@@ -829,9 +829,9 @@ ca_triop_fms_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
829
829
|
char *ptr3, ca_size_t i3,
|
|
830
830
|
char *ptr4, ca_size_t i4)
|
|
831
831
|
{
|
|
832
|
-
|
|
833
|
-
*q3 = (
|
|
834
|
-
|
|
832
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2,
|
|
833
|
+
*q3 = (ca_u_float64_t *) ptr3, *q4 = (ca_u_float64_t *) ptr4;
|
|
834
|
+
ca_u_float64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
835
835
|
ca_size_t k;
|
|
836
836
|
if ( m ) {
|
|
837
837
|
boolean8_t *pm;
|
|
@@ -863,9 +863,9 @@ ca_triop_fms_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
863
863
|
char *ptr3, ca_size_t i3,
|
|
864
864
|
char *ptr4, ca_size_t i4)
|
|
865
865
|
{
|
|
866
|
-
|
|
867
|
-
*q3 = (
|
|
868
|
-
|
|
866
|
+
ca_u_cmplx64_t *q1 = (ca_u_cmplx64_t *) ptr1, *q2 = (ca_u_cmplx64_t *) ptr2,
|
|
867
|
+
*q3 = (ca_u_cmplx64_t *) ptr3, *q4 = (ca_u_cmplx64_t *) ptr4;
|
|
868
|
+
ca_u_cmplx64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
869
869
|
ca_size_t k;
|
|
870
870
|
if ( m ) {
|
|
871
871
|
boolean8_t *pm;
|
|
@@ -897,9 +897,9 @@ ca_triop_fms_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
897
897
|
char *ptr3, ca_size_t i3,
|
|
898
898
|
char *ptr4, ca_size_t i4)
|
|
899
899
|
{
|
|
900
|
-
|
|
901
|
-
*q3 = (
|
|
902
|
-
|
|
900
|
+
ca_u_cmplx128_t *q1 = (ca_u_cmplx128_t *) ptr1, *q2 = (ca_u_cmplx128_t *) ptr2,
|
|
901
|
+
*q3 = (ca_u_cmplx128_t *) ptr3, *q4 = (ca_u_cmplx128_t *) ptr4;
|
|
902
|
+
ca_u_cmplx128_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
903
903
|
ca_size_t k;
|
|
904
904
|
if ( m ) {
|
|
905
905
|
boolean8_t *pm;
|
|
@@ -1062,9 +1062,9 @@ ca_triop_clip_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
1062
1062
|
char *ptr3, ca_size_t i3,
|
|
1063
1063
|
char *ptr4, ca_size_t i4)
|
|
1064
1064
|
{
|
|
1065
|
-
|
|
1066
|
-
*q3 = (
|
|
1067
|
-
|
|
1065
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2,
|
|
1066
|
+
*q3 = (ca_u_int16_t *) ptr3, *q4 = (ca_u_int16_t *) ptr4;
|
|
1067
|
+
ca_u_int16_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1068
1068
|
ca_size_t k;
|
|
1069
1069
|
if ( m ) {
|
|
1070
1070
|
boolean8_t *pm;
|
|
@@ -1096,9 +1096,9 @@ ca_triop_clip_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
1096
1096
|
char *ptr3, ca_size_t i3,
|
|
1097
1097
|
char *ptr4, ca_size_t i4)
|
|
1098
1098
|
{
|
|
1099
|
-
|
|
1100
|
-
*q3 = (
|
|
1101
|
-
|
|
1099
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2,
|
|
1100
|
+
*q3 = (ca_u_uint16_t *) ptr3, *q4 = (ca_u_uint16_t *) ptr4;
|
|
1101
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1102
1102
|
ca_size_t k;
|
|
1103
1103
|
if ( m ) {
|
|
1104
1104
|
boolean8_t *pm;
|
|
@@ -1130,9 +1130,9 @@ ca_triop_clip_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
1130
1130
|
char *ptr3, ca_size_t i3,
|
|
1131
1131
|
char *ptr4, ca_size_t i4)
|
|
1132
1132
|
{
|
|
1133
|
-
|
|
1134
|
-
*q3 = (
|
|
1135
|
-
|
|
1133
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2,
|
|
1134
|
+
*q3 = (ca_u_int32_t *) ptr3, *q4 = (ca_u_int32_t *) ptr4;
|
|
1135
|
+
ca_u_int32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1136
1136
|
ca_size_t k;
|
|
1137
1137
|
if ( m ) {
|
|
1138
1138
|
boolean8_t *pm;
|
|
@@ -1164,9 +1164,9 @@ ca_triop_clip_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
1164
1164
|
char *ptr3, ca_size_t i3,
|
|
1165
1165
|
char *ptr4, ca_size_t i4)
|
|
1166
1166
|
{
|
|
1167
|
-
|
|
1168
|
-
*q3 = (
|
|
1169
|
-
|
|
1167
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2,
|
|
1168
|
+
*q3 = (ca_u_uint32_t *) ptr3, *q4 = (ca_u_uint32_t *) ptr4;
|
|
1169
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1170
1170
|
ca_size_t k;
|
|
1171
1171
|
if ( m ) {
|
|
1172
1172
|
boolean8_t *pm;
|
|
@@ -1198,9 +1198,9 @@ ca_triop_clip_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
1198
1198
|
char *ptr3, ca_size_t i3,
|
|
1199
1199
|
char *ptr4, ca_size_t i4)
|
|
1200
1200
|
{
|
|
1201
|
-
|
|
1202
|
-
*q3 = (
|
|
1203
|
-
|
|
1201
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2,
|
|
1202
|
+
*q3 = (ca_u_int64_t *) ptr3, *q4 = (ca_u_int64_t *) ptr4;
|
|
1203
|
+
ca_u_int64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1204
1204
|
ca_size_t k;
|
|
1205
1205
|
if ( m ) {
|
|
1206
1206
|
boolean8_t *pm;
|
|
@@ -1232,9 +1232,9 @@ ca_triop_clip_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
1232
1232
|
char *ptr3, ca_size_t i3,
|
|
1233
1233
|
char *ptr4, ca_size_t i4)
|
|
1234
1234
|
{
|
|
1235
|
-
|
|
1236
|
-
*q3 = (
|
|
1237
|
-
|
|
1235
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2,
|
|
1236
|
+
*q3 = (ca_u_uint64_t *) ptr3, *q4 = (ca_u_uint64_t *) ptr4;
|
|
1237
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1238
1238
|
ca_size_t k;
|
|
1239
1239
|
if ( m ) {
|
|
1240
1240
|
boolean8_t *pm;
|
|
@@ -1266,9 +1266,9 @@ ca_triop_clip_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
1266
1266
|
char *ptr3, ca_size_t i3,
|
|
1267
1267
|
char *ptr4, ca_size_t i4)
|
|
1268
1268
|
{
|
|
1269
|
-
|
|
1270
|
-
*q3 = (
|
|
1271
|
-
|
|
1269
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2,
|
|
1270
|
+
*q3 = (ca_u_float32_t *) ptr3, *q4 = (ca_u_float32_t *) ptr4;
|
|
1271
|
+
ca_u_float32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1272
1272
|
ca_size_t k;
|
|
1273
1273
|
if ( m ) {
|
|
1274
1274
|
boolean8_t *pm;
|
|
@@ -1300,9 +1300,9 @@ ca_triop_clip_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
1300
1300
|
char *ptr3, ca_size_t i3,
|
|
1301
1301
|
char *ptr4, ca_size_t i4)
|
|
1302
1302
|
{
|
|
1303
|
-
|
|
1304
|
-
*q3 = (
|
|
1305
|
-
|
|
1303
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2,
|
|
1304
|
+
*q3 = (ca_u_float64_t *) ptr3, *q4 = (ca_u_float64_t *) ptr4;
|
|
1305
|
+
ca_u_float64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1306
1306
|
ca_size_t k;
|
|
1307
1307
|
if ( m ) {
|
|
1308
1308
|
boolean8_t *pm;
|
|
@@ -1462,9 +1462,9 @@ ca_triop_select_int16_t (ca_size_t n, boolean8_t *m,
|
|
|
1462
1462
|
char *ptr3, ca_size_t i3,
|
|
1463
1463
|
char *ptr4, ca_size_t i4)
|
|
1464
1464
|
{
|
|
1465
|
-
|
|
1466
|
-
*q3 = (
|
|
1467
|
-
|
|
1465
|
+
ca_u_int16_t *q1 = (ca_u_int16_t *) ptr1, *q2 = (ca_u_int16_t *) ptr2,
|
|
1466
|
+
*q3 = (ca_u_int16_t *) ptr3, *q4 = (ca_u_int16_t *) ptr4;
|
|
1467
|
+
ca_u_int16_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1468
1468
|
ca_size_t k;
|
|
1469
1469
|
if ( m ) {
|
|
1470
1470
|
boolean8_t *pm;
|
|
@@ -1496,9 +1496,9 @@ ca_triop_select_uint16_t (ca_size_t n, boolean8_t *m,
|
|
|
1496
1496
|
char *ptr3, ca_size_t i3,
|
|
1497
1497
|
char *ptr4, ca_size_t i4)
|
|
1498
1498
|
{
|
|
1499
|
-
|
|
1500
|
-
*q3 = (
|
|
1501
|
-
|
|
1499
|
+
ca_u_uint16_t *q1 = (ca_u_uint16_t *) ptr1, *q2 = (ca_u_uint16_t *) ptr2,
|
|
1500
|
+
*q3 = (ca_u_uint16_t *) ptr3, *q4 = (ca_u_uint16_t *) ptr4;
|
|
1501
|
+
ca_u_uint16_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1502
1502
|
ca_size_t k;
|
|
1503
1503
|
if ( m ) {
|
|
1504
1504
|
boolean8_t *pm;
|
|
@@ -1530,9 +1530,9 @@ ca_triop_select_int32_t (ca_size_t n, boolean8_t *m,
|
|
|
1530
1530
|
char *ptr3, ca_size_t i3,
|
|
1531
1531
|
char *ptr4, ca_size_t i4)
|
|
1532
1532
|
{
|
|
1533
|
-
|
|
1534
|
-
*q3 = (
|
|
1535
|
-
|
|
1533
|
+
ca_u_int32_t *q1 = (ca_u_int32_t *) ptr1, *q2 = (ca_u_int32_t *) ptr2,
|
|
1534
|
+
*q3 = (ca_u_int32_t *) ptr3, *q4 = (ca_u_int32_t *) ptr4;
|
|
1535
|
+
ca_u_int32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1536
1536
|
ca_size_t k;
|
|
1537
1537
|
if ( m ) {
|
|
1538
1538
|
boolean8_t *pm;
|
|
@@ -1564,9 +1564,9 @@ ca_triop_select_uint32_t (ca_size_t n, boolean8_t *m,
|
|
|
1564
1564
|
char *ptr3, ca_size_t i3,
|
|
1565
1565
|
char *ptr4, ca_size_t i4)
|
|
1566
1566
|
{
|
|
1567
|
-
|
|
1568
|
-
*q3 = (
|
|
1569
|
-
|
|
1567
|
+
ca_u_uint32_t *q1 = (ca_u_uint32_t *) ptr1, *q2 = (ca_u_uint32_t *) ptr2,
|
|
1568
|
+
*q3 = (ca_u_uint32_t *) ptr3, *q4 = (ca_u_uint32_t *) ptr4;
|
|
1569
|
+
ca_u_uint32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1570
1570
|
ca_size_t k;
|
|
1571
1571
|
if ( m ) {
|
|
1572
1572
|
boolean8_t *pm;
|
|
@@ -1598,9 +1598,9 @@ ca_triop_select_int64_t (ca_size_t n, boolean8_t *m,
|
|
|
1598
1598
|
char *ptr3, ca_size_t i3,
|
|
1599
1599
|
char *ptr4, ca_size_t i4)
|
|
1600
1600
|
{
|
|
1601
|
-
|
|
1602
|
-
*q3 = (
|
|
1603
|
-
|
|
1601
|
+
ca_u_int64_t *q1 = (ca_u_int64_t *) ptr1, *q2 = (ca_u_int64_t *) ptr2,
|
|
1602
|
+
*q3 = (ca_u_int64_t *) ptr3, *q4 = (ca_u_int64_t *) ptr4;
|
|
1603
|
+
ca_u_int64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1604
1604
|
ca_size_t k;
|
|
1605
1605
|
if ( m ) {
|
|
1606
1606
|
boolean8_t *pm;
|
|
@@ -1632,9 +1632,9 @@ ca_triop_select_uint64_t (ca_size_t n, boolean8_t *m,
|
|
|
1632
1632
|
char *ptr3, ca_size_t i3,
|
|
1633
1633
|
char *ptr4, ca_size_t i4)
|
|
1634
1634
|
{
|
|
1635
|
-
|
|
1636
|
-
*q3 = (
|
|
1637
|
-
|
|
1635
|
+
ca_u_uint64_t *q1 = (ca_u_uint64_t *) ptr1, *q2 = (ca_u_uint64_t *) ptr2,
|
|
1636
|
+
*q3 = (ca_u_uint64_t *) ptr3, *q4 = (ca_u_uint64_t *) ptr4;
|
|
1637
|
+
ca_u_uint64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1638
1638
|
ca_size_t k;
|
|
1639
1639
|
if ( m ) {
|
|
1640
1640
|
boolean8_t *pm;
|
|
@@ -1666,9 +1666,9 @@ ca_triop_select_float32_t (ca_size_t n, boolean8_t *m,
|
|
|
1666
1666
|
char *ptr3, ca_size_t i3,
|
|
1667
1667
|
char *ptr4, ca_size_t i4)
|
|
1668
1668
|
{
|
|
1669
|
-
|
|
1670
|
-
*q3 = (
|
|
1671
|
-
|
|
1669
|
+
ca_u_float32_t *q1 = (ca_u_float32_t *) ptr1, *q2 = (ca_u_float32_t *) ptr2,
|
|
1670
|
+
*q3 = (ca_u_float32_t *) ptr3, *q4 = (ca_u_float32_t *) ptr4;
|
|
1671
|
+
ca_u_float32_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1672
1672
|
ca_size_t k;
|
|
1673
1673
|
if ( m ) {
|
|
1674
1674
|
boolean8_t *pm;
|
|
@@ -1700,9 +1700,9 @@ ca_triop_select_float64_t (ca_size_t n, boolean8_t *m,
|
|
|
1700
1700
|
char *ptr3, ca_size_t i3,
|
|
1701
1701
|
char *ptr4, ca_size_t i4)
|
|
1702
1702
|
{
|
|
1703
|
-
|
|
1704
|
-
*q3 = (
|
|
1705
|
-
|
|
1703
|
+
ca_u_float64_t *q1 = (ca_u_float64_t *) ptr1, *q2 = (ca_u_float64_t *) ptr2,
|
|
1704
|
+
*q3 = (ca_u_float64_t *) ptr3, *q4 = (ca_u_float64_t *) ptr4;
|
|
1705
|
+
ca_u_float64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1706
1706
|
ca_size_t k;
|
|
1707
1707
|
if ( m ) {
|
|
1708
1708
|
boolean8_t *pm;
|
|
@@ -1734,9 +1734,9 @@ ca_triop_select_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
|
1734
1734
|
char *ptr3, ca_size_t i3,
|
|
1735
1735
|
char *ptr4, ca_size_t i4)
|
|
1736
1736
|
{
|
|
1737
|
-
|
|
1738
|
-
*q3 = (
|
|
1739
|
-
|
|
1737
|
+
ca_u_cmplx64_t *q1 = (ca_u_cmplx64_t *) ptr1, *q2 = (ca_u_cmplx64_t *) ptr2,
|
|
1738
|
+
*q3 = (ca_u_cmplx64_t *) ptr3, *q4 = (ca_u_cmplx64_t *) ptr4;
|
|
1739
|
+
ca_u_cmplx64_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1740
1740
|
ca_size_t k;
|
|
1741
1741
|
if ( m ) {
|
|
1742
1742
|
boolean8_t *pm;
|
|
@@ -1768,9 +1768,9 @@ ca_triop_select_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
|
1768
1768
|
char *ptr3, ca_size_t i3,
|
|
1769
1769
|
char *ptr4, ca_size_t i4)
|
|
1770
1770
|
{
|
|
1771
|
-
|
|
1772
|
-
*q3 = (
|
|
1773
|
-
|
|
1771
|
+
ca_u_cmplx128_t *q1 = (ca_u_cmplx128_t *) ptr1, *q2 = (ca_u_cmplx128_t *) ptr2,
|
|
1772
|
+
*q3 = (ca_u_cmplx128_t *) ptr3, *q4 = (ca_u_cmplx128_t *) ptr4;
|
|
1773
|
+
ca_u_cmplx128_t *p1 = q1, *p2 = q2, *p3 = q3, *p4 = q4;
|
|
1774
1774
|
ca_size_t k;
|
|
1775
1775
|
if ( m ) {
|
|
1776
1776
|
boolean8_t *pm;
|
data/ext/carray_key_windows.c
CHANGED
|
@@ -150,6 +150,10 @@ rb_ca_s_key_window_ranges (VALUE self, VALUE vkeys, VALUE vgroups,
|
|
|
150
150
|
( ck->data_type != CA_INT64 && ck->data_type != CA_FLOAT64 ) ) {
|
|
151
151
|
rb_raise(rb_eArgError, "__find_key_window_row_ranges__: unexpected arguments");
|
|
152
152
|
}
|
|
153
|
+
/* The completeness test takes the key difference modulo the interval. */
|
|
154
|
+
if ( !NIL_P(rinterval) && !(NUM2DBL(rinterval) > 0) ) {
|
|
155
|
+
rb_raise(rb_eArgError, "__find_key_window_row_ranges__: interval should be positive");
|
|
156
|
+
}
|
|
153
157
|
n = ck->elements;
|
|
154
158
|
grp = (const int64_t *) cg->ptr;
|
|
155
159
|
nout = n;
|
data/ext/carray_mask.c
CHANGED
|
@@ -37,16 +37,32 @@
|
|
|
37
37
|
#define CA_MASK_WORD_BYTES 8
|
|
38
38
|
#define CA_MASK_WORD_LSB 0x0101010101010101ULL
|
|
39
39
|
|
|
40
|
+
/* A mask may start at any byte (a window or a block view offsets it), so a
|
|
41
|
+
word is read and written through memcpy, never through a uint64_t
|
|
42
|
+
pointer; the compiler still lowers each to a single load or store. */
|
|
43
|
+
static inline uint64_t
|
|
44
|
+
ca_mask_word_load (const boolean8_t *p)
|
|
45
|
+
{
|
|
46
|
+
uint64_t w;
|
|
47
|
+
memcpy(&w, p, sizeof(w));
|
|
48
|
+
return w;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
static inline void
|
|
52
|
+
ca_mask_word_store (boolean8_t *p, uint64_t w)
|
|
53
|
+
{
|
|
54
|
+
memcpy(p, &w, sizeof(w));
|
|
55
|
+
}
|
|
56
|
+
|
|
40
57
|
/* ma[i] |= ms[i] for i in [0, n) -- used by ca_copy_mask_overlay_n */
|
|
41
58
|
static inline void
|
|
42
59
|
ca_mask_word_or (boolean8_t *ma, const boolean8_t *ms, ca_size_t n)
|
|
43
60
|
{
|
|
44
61
|
ca_size_t nw = n / CA_MASK_WORD_BYTES;
|
|
45
62
|
ca_size_t i;
|
|
46
|
-
uint64_t *wa = (uint64_t *) ma;
|
|
47
|
-
const uint64_t *ws = (const uint64_t *) ms;
|
|
48
63
|
for (i = 0; i < nw; i++) {
|
|
49
|
-
|
|
64
|
+
ca_mask_word_store(ma + i*CA_MASK_WORD_BYTES,
|
|
65
|
+
ca_mask_word_load(ma + i*CA_MASK_WORD_BYTES) | ca_mask_word_load(ms + i*CA_MASK_WORD_BYTES));
|
|
50
66
|
}
|
|
51
67
|
for (i = nw * CA_MASK_WORD_BYTES; i < n; i++) {
|
|
52
68
|
ma[i] |= ms[i];
|
|
@@ -62,11 +78,9 @@ ca_mask_word_and (boolean8_t *md,
|
|
|
62
78
|
{
|
|
63
79
|
ca_size_t nw = n / CA_MASK_WORD_BYTES;
|
|
64
80
|
ca_size_t i;
|
|
65
|
-
uint64_t *wd = (uint64_t *) md;
|
|
66
|
-
const uint64_t *wa = (const uint64_t *) ma;
|
|
67
|
-
const uint64_t *wb = (const uint64_t *) mb;
|
|
68
81
|
for (i = 0; i < nw; i++) {
|
|
69
|
-
|
|
82
|
+
ca_mask_word_store(md + i*CA_MASK_WORD_BYTES,
|
|
83
|
+
ca_mask_word_load(ma + i*CA_MASK_WORD_BYTES) & ca_mask_word_load(mb + i*CA_MASK_WORD_BYTES));
|
|
70
84
|
}
|
|
71
85
|
for (i = nw * CA_MASK_WORD_BYTES; i < n; i++) {
|
|
72
86
|
md[i] = ma[i] & mb[i];
|
|
@@ -82,11 +96,9 @@ ca_mask_word_xor (boolean8_t *md,
|
|
|
82
96
|
{
|
|
83
97
|
ca_size_t nw = n / CA_MASK_WORD_BYTES;
|
|
84
98
|
ca_size_t i;
|
|
85
|
-
uint64_t *wd = (uint64_t *) md;
|
|
86
|
-
const uint64_t *wa = (const uint64_t *) ma;
|
|
87
|
-
const uint64_t *wb = (const uint64_t *) mb;
|
|
88
99
|
for (i = 0; i < nw; i++) {
|
|
89
|
-
|
|
100
|
+
ca_mask_word_store(md + i*CA_MASK_WORD_BYTES,
|
|
101
|
+
ca_mask_word_load(ma + i*CA_MASK_WORD_BYTES) ^ ca_mask_word_load(mb + i*CA_MASK_WORD_BYTES));
|
|
90
102
|
}
|
|
91
103
|
for (i = nw * CA_MASK_WORD_BYTES; i < n; i++) {
|
|
92
104
|
md[i] = ma[i] ^ mb[i];
|
|
@@ -99,10 +111,8 @@ ca_mask_word_not (boolean8_t *md, const boolean8_t *ms, ca_size_t n)
|
|
|
99
111
|
{
|
|
100
112
|
ca_size_t nw = n / CA_MASK_WORD_BYTES;
|
|
101
113
|
ca_size_t i;
|
|
102
|
-
uint64_t *wd = (uint64_t *) md;
|
|
103
|
-
const uint64_t *ws = (const uint64_t *) ms;
|
|
104
114
|
for (i = 0; i < nw; i++) {
|
|
105
|
-
|
|
115
|
+
ca_mask_word_store(md + i*CA_MASK_WORD_BYTES, ca_mask_word_load(ms + i*CA_MASK_WORD_BYTES) ^ CA_MASK_WORD_LSB);
|
|
106
116
|
}
|
|
107
117
|
for (i = nw * CA_MASK_WORD_BYTES; i < n; i++) {
|
|
108
118
|
md[i] = ms[i] ^ (boolean8_t) 1;
|
|
@@ -116,9 +126,8 @@ ca_mask_word_any (const boolean8_t *m, ca_size_t n)
|
|
|
116
126
|
{
|
|
117
127
|
ca_size_t nw = n / CA_MASK_WORD_BYTES;
|
|
118
128
|
ca_size_t i;
|
|
119
|
-
const uint64_t *w = (const uint64_t *) m;
|
|
120
129
|
for (i = 0; i < nw; i++) {
|
|
121
|
-
if (
|
|
130
|
+
if ( ca_mask_word_load(m + i*CA_MASK_WORD_BYTES) != 0 ) return 1;
|
|
122
131
|
}
|
|
123
132
|
for (i = nw * CA_MASK_WORD_BYTES; i < n; i++) {
|
|
124
133
|
if ( m[i] ) return 1;
|
|
@@ -134,9 +143,8 @@ ca_mask_word_all_set (const boolean8_t *m, ca_size_t n)
|
|
|
134
143
|
{
|
|
135
144
|
ca_size_t nw = n / CA_MASK_WORD_BYTES;
|
|
136
145
|
ca_size_t i;
|
|
137
|
-
const uint64_t *w = (const uint64_t *) m;
|
|
138
146
|
for (i = 0; i < nw; i++) {
|
|
139
|
-
if (
|
|
147
|
+
if ( ca_mask_word_load(m + i*CA_MASK_WORD_BYTES) != CA_MASK_WORD_LSB ) return 0;
|
|
140
148
|
}
|
|
141
149
|
for (i = nw * CA_MASK_WORD_BYTES; i < n; i++) {
|
|
142
150
|
if ( ! m[i] ) return 0;
|
|
@@ -1872,6 +1880,19 @@ rb_ca_mask_where (int argc, VALUE *argv, VALUE self)
|
|
|
1872
1880
|
return ca_mask_copy_where(self, argc, argv);
|
|
1873
1881
|
}
|
|
1874
1882
|
|
|
1883
|
+
/* inherit_mask's sources are read cell by cell over self, so an array
|
|
1884
|
+
source has self's number of cells (a scalar's one cell applies to all). */
|
|
1885
|
+
static void
|
|
1886
|
+
ca_inherit_mask_check_source (CArray *ca, CArray *cs)
|
|
1887
|
+
{
|
|
1888
|
+
if ( ! ca_is_scalar(cs) && cs->elements != ca->elements ) {
|
|
1889
|
+
rb_raise(rb_eArgError,
|
|
1890
|
+
"%s: mask source has %lld elements, the receiver %lld",
|
|
1891
|
+
ca_calling_method_name(),
|
|
1892
|
+
(long long) cs->elements, (long long) ca->elements);
|
|
1893
|
+
}
|
|
1894
|
+
}
|
|
1895
|
+
|
|
1875
1896
|
/* @overload inherit_mask (*others):
|
|
1876
1897
|
|
|
1877
1898
|
(Masking, Destructive)
|
|
@@ -1895,6 +1916,7 @@ rb_ca_inherit_mask_method (int argc, VALUE *argv, VALUE self)
|
|
|
1895
1916
|
for (i=0; i<argc; i++) {
|
|
1896
1917
|
if ( rb_obj_is_carray(argv[i]) ) {
|
|
1897
1918
|
TypedData_Get_Struct(argv[i], CArray, &carray_data_type, cs);
|
|
1919
|
+
ca_inherit_mask_check_source(ca, cs);
|
|
1898
1920
|
slist[i] = cs;
|
|
1899
1921
|
}
|
|
1900
1922
|
else {
|
|
@@ -1938,6 +1960,7 @@ rb_ca_inherit_mask (VALUE self, int n, ...)
|
|
|
1938
1960
|
other = va_arg(rothers, VALUE);
|
|
1939
1961
|
if ( rb_obj_is_carray(other) ) {
|
|
1940
1962
|
TypedData_Get_Struct(other, CArray, &carray_data_type, cs);
|
|
1963
|
+
ca_inherit_mask_check_source(ca, cs);
|
|
1941
1964
|
slist[i] = cs;
|
|
1942
1965
|
}
|
|
1943
1966
|
else {
|
|
@@ -1976,6 +1999,7 @@ rb_ca_inherit_mask_replace_method (int argc, VALUE *argv, VALUE self)
|
|
|
1976
1999
|
for (i=0; i<argc; i++) {
|
|
1977
2000
|
if ( rb_obj_is_carray(argv[i]) ) {
|
|
1978
2001
|
TypedData_Get_Struct(argv[i], CArray, &carray_data_type, cs);
|
|
2002
|
+
ca_inherit_mask_check_source(ca, cs);
|
|
1979
2003
|
slist[i] = cs;
|
|
1980
2004
|
}
|
|
1981
2005
|
else {
|
|
@@ -2019,6 +2043,7 @@ rb_ca_inherit_mask_replace (VALUE self, int n, ...)
|
|
|
2019
2043
|
other = va_arg(rothers, VALUE);
|
|
2020
2044
|
if ( rb_obj_is_carray(other) ) {
|
|
2021
2045
|
TypedData_Get_Struct(other, CArray, &carray_data_type, cs);
|
|
2046
|
+
ca_inherit_mask_check_source(ca, cs);
|
|
2022
2047
|
slist[i] = cs;
|
|
2023
2048
|
}
|
|
2024
2049
|
else {
|
|
@@ -2266,11 +2291,9 @@ ca_binop_bit_or_i_boolean8_fast (ca_size_t n, boolean8_t *m,
|
|
|
2266
2291
|
accumulating; here we need 3-arg). */
|
|
2267
2292
|
ca_size_t nw = n / CA_MASK_WORD_BYTES;
|
|
2268
2293
|
ca_size_t j;
|
|
2269
|
-
uint64_t *wd = (uint64_t *) q3;
|
|
2270
|
-
const uint64_t *wa = (const uint64_t *) q1;
|
|
2271
|
-
const uint64_t *wb = (const uint64_t *) q2;
|
|
2272
2294
|
for (j = 0; j < nw; j++) {
|
|
2273
|
-
|
|
2295
|
+
ca_mask_word_store(q3 + j*CA_MASK_WORD_BYTES,
|
|
2296
|
+
ca_mask_word_load(q1 + j*CA_MASK_WORD_BYTES) | ca_mask_word_load(q2 + j*CA_MASK_WORD_BYTES));
|
|
2274
2297
|
}
|
|
2275
2298
|
for (j = nw * CA_MASK_WORD_BYTES; j < n; j++) {
|
|
2276
2299
|
q3[j] = q1[j] | q2[j];
|