carray 2.0.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yardopts +5 -25
- data/CHANGELOG.md +16 -0
- data/LICENSE +1 -1
- data/NEWS.md +3 -0
- data/README.md +128 -44
- data/carray.gemspec +22 -24
- data/ext/ca_array_pool.c +91 -0
- data/ext/ca_axis_descriptor.h +186 -0
- data/ext/ca_axis_dispatch.c +924 -0
- data/ext/ca_axis_group.c +1208 -0
- data/ext/ca_bincmp_dispatch.c +76 -0
- data/ext/ca_bincmp_dispatch.h +85 -0
- data/ext/ca_binop_dispatch.c +125 -0
- data/ext/ca_binop_dispatch.h +159 -0
- data/ext/ca_categorical_iterator.c +1375 -0
- data/ext/ca_compare.c +94 -0
- data/ext/ca_compare.h +26 -0
- data/ext/ca_composite_dispatch.c +414 -0
- data/ext/ca_composite_dispatch.h +116 -0
- data/ext/ca_for_buffer.h +96 -0
- data/ext/ca_for_each_element.h +241 -0
- data/ext/ca_group_iter.c +304 -0
- data/ext/ca_iter_substrate.h +325 -0
- data/ext/ca_kernel_iterator.c +4321 -0
- data/ext/ca_kernel_iterator.h +2603 -0
- data/ext/ca_moncmp_dispatch.c +37 -0
- data/ext/ca_moncmp_dispatch.h +62 -0
- data/ext/ca_monop_dispatch.c +200 -0
- data/ext/ca_monop_dispatch.h +235 -0
- data/ext/ca_obj_array.c +355 -359
- data/ext/ca_obj_bincmp.c +809 -0
- data/ext/ca_obj_binop.c +892 -0
- data/ext/ca_obj_bitarray.c +369 -164
- data/ext/ca_obj_bitfield.c +294 -234
- data/ext/ca_obj_block.c +189 -711
- data/ext/ca_obj_byte_swap.c +766 -0
- data/ext/ca_obj_const_string.c +965 -0
- data/ext/ca_obj_face.c +670 -0
- data/ext/ca_obj_face.h +247 -0
- data/ext/ca_obj_fake.c +228 -100
- data/ext/ca_obj_farray.c +54 -441
- data/ext/ca_obj_field.c +82 -529
- data/ext/ca_obj_fixlen_string.c +306 -0
- data/ext/ca_obj_grid.c +858 -440
- data/ext/ca_obj_meld.c +1034 -0
- data/ext/ca_obj_moncmp.c +569 -0
- data/ext/ca_obj_monop.c +1111 -0
- data/ext/ca_obj_object.c +772 -297
- data/ext/ca_obj_record.c +468 -0
- data/ext/ca_obj_reduce.c +97 -82
- data/ext/ca_obj_refer.c +569 -459
- data/ext/ca_obj_remap.c +475 -0
- data/ext/ca_obj_repeat.c +92 -477
- data/ext/ca_obj_roll.c +616 -0
- data/ext/ca_obj_select.c +344 -296
- data/ext/ca_obj_select_axis.c +1296 -0
- data/ext/ca_obj_shift.c +229 -791
- data/ext/ca_obj_source.c +78 -0
- data/ext/ca_obj_stack.c +1173 -0
- data/ext/ca_obj_stride.c +2501 -0
- data/ext/ca_obj_string.c +268 -0
- data/ext/ca_obj_tile.c +614 -0
- data/ext/ca_obj_time.c +546 -0
- data/ext/ca_obj_timedelta.c +435 -0
- data/ext/ca_obj_transpose.c +62 -516
- data/ext/ca_obj_triop.c +746 -0
- data/ext/ca_obj_unbound_repeat.c +207 -240
- data/ext/ca_obj_window.c +1131 -563
- data/ext/ca_op_byte_swap.c +175 -0
- data/ext/ca_op_ipower.c +319 -0
- data/ext/ca_op_powi.h +88 -0
- data/ext/ca_sort_kernels.h +132 -0
- data/ext/ca_sweep_engine.c +430 -0
- data/ext/ca_sweep_engine.h +157 -0
- data/ext/ca_transform_common.c +228 -0
- data/ext/ca_triop_dispatch.c +55 -0
- data/ext/ca_triop_dispatch.h +62 -0
- data/ext/carray.h +795 -402
- data/ext/carray_access.c +831 -711
- data/ext/carray_attribute.c +98 -329
- data/ext/carray_bincount.c +255 -0
- data/ext/carray_broadcast.c +283 -0
- data/ext/carray_call_cfunc.c +1360 -828
- data/ext/carray_call_cfunc.h +160 -0
- data/ext/carray_cast.c +1212 -301
- data/ext/carray_cast_func.rb +81 -40
- data/ext/carray_class.c +53 -63
- data/ext/carray_config.h +28 -0
- data/ext/carray_conversion.c +350 -346
- data/ext/carray_copy.c +156 -268
- data/ext/carray_core.c +1341 -198
- data/ext/carray_count.c +312 -0
- data/ext/carray_data_type.c +43 -19
- data/ext/carray_element.c +585 -213
- data/ext/carray_factorize.c +2542 -0
- data/ext/carray_generate.c +230 -559
- data/ext/carray_histogram.c +490 -0
- data/ext/carray_hold.c +228 -0
- data/ext/carray_index_classifier.c +1035 -0
- data/ext/carray_index_classifier.h +27 -0
- data/ext/carray_internal.h +120 -0
- data/ext/carray_kernels_bincmp.c +4445 -0
- data/ext/carray_kernels_binop.c +10979 -0
- data/ext/carray_kernels_init.c +36 -0
- data/ext/carray_kernels_map.c +3466 -0
- data/ext/carray_kernels_moncmp.c +2096 -0
- data/ext/carray_kernels_monop.c +18312 -0
- data/ext/carray_kernels_reduce_aggregate.c +25836 -0
- data/ext/carray_kernels_reduce_boolean.c +329 -0
- data/ext/carray_kernels_reduce_cumulative.c +14592 -0
- data/ext/carray_kernels_reduce_extreme.c +16947 -0
- data/ext/carray_kernels_reduce_variance.c +3909 -0
- data/ext/carray_kernels_scan.c +3692 -0
- data/ext/carray_kernels_search.c +32137 -0
- data/ext/carray_kernels_sort.c +10625 -0
- data/ext/carray_kernels_triop.c +1391 -0
- data/ext/carray_lazy.c +567 -0
- data/ext/carray_loop.c +88 -200
- data/ext/carray_mask.c +848 -154
- data/ext/carray_math_kernel.h +120 -0
- data/ext/carray_mathfunc.c +10 -241
- data/ext/carray_median_percentile.c +1257 -0
- data/ext/carray_memory_view.c +1625 -0
- data/ext/carray_operator.c +1526 -318
- data/ext/carray_order.c +664 -1394
- data/ext/carray_partition.c +416 -0
- data/ext/carray_random.c +518 -0
- data/ext/carray_scatter.c +357 -0
- data/ext/carray_slab.c +1219 -0
- data/ext/carray_slab.h +84 -0
- data/ext/carray_sort.c +829 -0
- data/ext/carray_sort_kernel.c +620 -0
- data/ext/carray_struct.c +695 -0
- data/ext/carray_test.c +343 -229
- data/ext/carray_undef.c +34 -17
- data/ext/carray_utils.c +175 -74
- data/ext/extconf.rb +216 -55
- data/ext/mk_call_cfunc.rb +480 -0
- data/ext/mkkernel.rb +8842 -0
- data/ext/ruby_carray.c +202 -101
- data/ext/version.h +5 -15
- data/ext/version.rb +5 -13
- data/lib/carray/arrow_tensor.rb +401 -0
- data/lib/carray/attribute.rb +166 -0
- data/lib/carray/autoload_carray.rb +220 -0
- data/lib/carray/autoload_method_extension.rb +44 -0
- data/lib/carray/axis_group.rb +711 -0
- data/lib/carray/basics.rb +481 -0
- data/lib/carray/bincount_nd.rb +358 -0
- data/lib/carray/block_iterator.rb +604 -0
- data/lib/carray/boolean_reduce.rb +109 -0
- data/lib/carray/categorical.rb +561 -0
- data/lib/carray/categorical_iterator.rb +1062 -0
- data/lib/carray/complex.rb +150 -0
- data/lib/carray/conditional.rb +216 -0
- data/lib/carray/const_string.rb +228 -0
- data/lib/carray/construct.rb +139 -328
- data/lib/carray/core_extensions.rb +240 -0
- data/lib/carray/data_type_extension.rb +233 -0
- data/lib/carray/fixlen_string.rb +95 -0
- data/lib/carray/frame/concat.rb +132 -0
- data/lib/carray/frame/convert.rb +95 -0
- data/lib/carray/frame/csv_parser.rb +211 -0
- data/lib/carray/frame/frame.rb +649 -0
- data/lib/carray/frame/group.rb +186 -0
- data/lib/carray/frame/io.rb +164 -0
- data/lib/carray/frame/join.rb +248 -0
- data/lib/carray/frame/records.rb +99 -0
- data/lib/carray/frame/sort.rb +113 -0
- data/lib/carray/frame/verbs.rb +299 -0
- data/lib/carray/frame.rb +16 -0
- data/lib/carray/histogram.rb +512 -0
- data/lib/carray/inspect.rb +37 -20
- data/lib/carray/iterator.rb +57 -349
- data/lib/carray/lazy.rb +889 -0
- data/lib/carray/mask_gap_fill.rb +200 -0
- data/lib/carray/math.rb +78 -342
- data/lib/carray/meld_reduce.rb +289 -0
- data/lib/carray/methods/align_addr.rb +116 -0
- data/lib/carray/methods/bin.rb +128 -0
- data/lib/carray/methods/bincount.rb +87 -0
- data/lib/carray/methods/bit_string.rb +92 -0
- data/lib/carray/methods/broadcast.rb +63 -0
- data/lib/carray/methods/choose.rb +39 -0
- data/lib/carray/methods/composition.rb +280 -0
- data/lib/carray/methods/gather_nd.rb +206 -0
- data/lib/carray/methods/index.rb +39 -0
- data/lib/carray/methods/insert_block.rb +99 -0
- data/lib/carray/methods/is_in.rb +141 -0
- data/lib/carray/methods/join.rb +90 -0
- data/lib/carray/methods/locate_addr.rb +47 -0
- data/lib/carray/methods/mask_duplicates.rb +41 -0
- data/lib/carray/methods/meshgrid.rb +91 -0
- data/lib/carray/methods/mode.rb +126 -0
- data/lib/carray/methods/nunique.rb +46 -0
- data/lib/carray/methods/resize.rb +56 -0
- data/lib/carray/methods/snap.rb +156 -0
- data/lib/carray/methods/string_format.rb +57 -0
- data/lib/carray/methods/unique.rb +47 -0
- data/lib/carray/methods/value_counts.rb +71 -0
- data/lib/carray/mkmf.rb +124 -101
- data/lib/carray/runtime.rb +108 -0
- data/lib/carray/serialize.rb +478 -167
- data/lib/carray/slab_iterator.rb +292 -0
- data/lib/carray/stack.rb +291 -0
- data/lib/carray/string.rb +56 -180
- data/lib/carray/string_operation_extension.rb +289 -0
- data/lib/carray/struct.rb +335 -323
- data/lib/carray/struct_builder.rb +697 -0
- data/lib/carray/table.rb +41 -2
- data/lib/carray/time.rb +2255 -38
- data/lib/carray/window_iterator.rb +655 -0
- data/lib/carray.rb +55 -57
- metadata +163 -130
- data/Rakefile +0 -51
- data/TODO.md +0 -18
- data/ext/ca_iter_block.c +0 -257
- data/ext/ca_iter_dimension.c +0 -299
- data/ext/ca_iter_window.c +0 -214
- data/ext/ca_obj_mapping.c +0 -644
- data/ext/carray_iterator.c +0 -641
- data/ext/carray_math.rb +0 -850
- data/ext/carray_numeric.c +0 -259
- data/ext/carray_sort_addr.c +0 -254
- data/ext/carray_stat.c +0 -2100
- data/ext/carray_stat_proc.rb +0 -1999
- data/ext/mkmath.rb +0 -741
- data/ext/ruby_ccomplex.c +0 -509
- data/ext/ruby_float_func.c +0 -86
- data/lib/carray/array.rb +0 -8
- data/lib/carray/autoload/autoload_base.rb +0 -19
- data/lib/carray/autoload/autoload_gem_cairo.rb +0 -9
- data/lib/carray/autoload/autoload_gem_ffi.rb +0 -9
- data/lib/carray/autoload/autoload_gem_gnuplot.rb +0 -2
- data/lib/carray/autoload/autoload_gem_io_csv.rb +0 -14
- data/lib/carray/autoload/autoload_gem_io_pg.rb +0 -6
- data/lib/carray/autoload/autoload_gem_io_sqlite3.rb +0 -12
- data/lib/carray/autoload/autoload_gem_narray.rb +0 -10
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +0 -15
- data/lib/carray/autoload/autoload_gem_opencv.rb +0 -16
- data/lib/carray/autoload/autoload_gem_random.rb +0 -8
- data/lib/carray/autoload/autoload_gem_rmagick.rb +0 -23
- data/lib/carray/autoload/autoload_gem_zimg.rb +0 -3
- data/lib/carray/autoload/autoload_io_imagemagick.rb +0 -6
- data/lib/carray/autoload/autoload_math_histogram.rb +0 -5
- data/lib/carray/autoload/autoload_math_recurrence.rb +0 -6
- data/lib/carray/autoload/autoload_object_iterator.rb +0 -1
- data/lib/carray/autoload/autoload_object_link.rb +0 -1
- data/lib/carray/autoload/autoload_object_pack.rb +0 -2
- data/lib/carray/autoload.rb +0 -141
- data/lib/carray/basic.rb +0 -191
- data/lib/carray/broadcast.rb +0 -101
- data/lib/carray/compose.rb +0 -315
- data/lib/carray/convert.rb +0 -115
- data/lib/carray/info.rb +0 -110
- data/lib/carray/io/imagemagick.rb +0 -235
- data/lib/carray/mask.rb +0 -102
- data/lib/carray/math/histogram.rb +0 -177
- data/lib/carray/math/recurrence.rb +0 -93
- data/lib/carray/object/ca_obj_iterator.rb +0 -50
- data/lib/carray/object/ca_obj_link.rb +0 -50
- data/lib/carray/object/ca_obj_pack.rb +0 -99
- data/lib/carray/obsolete.rb +0 -256
- data/lib/carray/ordering.rb +0 -181
- data/lib/carray/testing.rb +0 -51
- data/lib/carray/transform.rb +0 -109
- data/mailmap +0 -1
- data/misc/Methods.ja.md +0 -182
- data/misc/NOTE +0 -51
- data/spec/Classes/CABitfield_spec.rb +0 -58
- data/spec/Classes/CABlockIterator_spec.rb +0 -114
- data/spec/Classes/CABlock_spec.rb +0 -205
- data/spec/Classes/CAField_spec.rb +0 -39
- data/spec/Classes/CAGrid_spec.rb +0 -75
- data/spec/Classes/CAMap_spec.rb +0 -0
- data/spec/Classes/CAMapping_spec.rb +0 -105
- data/spec/Classes/CAObject_attribute_spec.rb +0 -33
- data/spec/Classes/CAObject_spec.rb +0 -33
- data/spec/Classes/CARefer_spec.rb +0 -93
- data/spec/Classes/CARepeat_spec.rb +0 -65
- data/spec/Classes/CASelect_spec.rb +0 -22
- data/spec/Classes/CAShift_spec.rb +0 -16
- data/spec/Classes/CAStruct_spec.rb +0 -71
- data/spec/Classes/CATranspose_spec.rb +0 -60
- data/spec/Classes/CAUnboudRepeat_spec.rb +0 -102
- data/spec/Classes/CAWindow_spec.rb +0 -54
- data/spec/Classes/CAWrap_spec.rb +0 -8
- data/spec/Classes/CArray_spec.rb +0 -184
- data/spec/Classes/CScalar_spec.rb +0 -55
- data/spec/Features/feature_130_spec.rb +0 -19
- data/spec/Features/feature_attributes_spec.rb +0 -280
- data/spec/Features/feature_boolean_spec.rb +0 -98
- data/spec/Features/feature_broadcast.rb +0 -116
- data/spec/Features/feature_cast_function.rb +0 -19
- data/spec/Features/feature_cast_spec.rb +0 -33
- data/spec/Features/feature_class_spec.rb +0 -84
- data/spec/Features/feature_complex_spec.rb +0 -42
- data/spec/Features/feature_composite_spec.rb +0 -124
- data/spec/Features/feature_convert_spec.rb +0 -46
- data/spec/Features/feature_copy_spec.rb +0 -123
- data/spec/Features/feature_creation_spec.rb +0 -84
- data/spec/Features/feature_element_spec.rb +0 -144
- data/spec/Features/feature_extream_spec.rb +0 -54
- data/spec/Features/feature_generate_spec.rb +0 -74
- data/spec/Features/feature_index_spec.rb +0 -69
- data/spec/Features/feature_mask_spec.rb +0 -580
- data/spec/Features/feature_math_spec.rb +0 -97
- data/spec/Features/feature_order_spec.rb +0 -146
- data/spec/Features/feature_ref_store_spec.rb +0 -209
- data/spec/Features/feature_serialization_spec.rb +0 -125
- data/spec/Features/feature_stat_spec.rb +0 -397
- data/spec/Features/feature_virtual_spec.rb +0 -48
- data/spec/Features/method_eq_spec.rb +0 -81
- data/spec/Features/method_is_nan_spec.rb +0 -12
- data/spec/Features/method_map_spec.rb +0 -54
- data/spec/Features/method_max_with.rb +0 -20
- data/spec/Features/method_min_with.rb +0 -19
- data/spec/Features/method_ne_spec.rb +0 -18
- data/spec/Features/method_project_spec.rb +0 -188
- data/spec/Features/method_ref_spec.rb +0 -27
- data/spec/Features/method_round_spec.rb +0 -11
- data/spec/Features/method_s_linspace_spec.rb +0 -48
- data/spec/Features/method_s_span_spec.rb +0 -14
- data/spec/Features/method_seq_spec.rb +0 -47
- data/spec/Features/method_sort_with.rb +0 -43
- data/spec/Features/method_sorted_with.rb +0 -29
- data/spec/Features/method_span_spec.rb +0 -42
- data/spec/Features/method_wrap_readonly_spec.rb +0 -43
- data/spec/UnitTest/test_CAVirtual.rb +0 -214
- data/spec/spec_all.rb +0 -10
- data/utils/ca_ase.rb +0 -21
- data/utils/ca_methods.rb +0 -15
- data/utils/cast_checker.rb +0 -30
- data/utils/convert_test.rb +0 -73
- data/utils/extract_yard.rb +0 -22
- data/utils/guess_shape.rb +0 -76
- data/utils/monkey_patch_methods.rb +0 -62
- data/utils/remove_resource_fork.sh +0 -5
|
@@ -0,0 +1,4445 @@
|
|
|
1
|
+
/* ---------------------------------------------------------------------------
|
|
2
|
+
|
|
3
|
+
carray_kernels.c -- GENERATED by ext/mkkernel.rb -- DO NOT EDIT
|
|
4
|
+
|
|
5
|
+
Kernel definitions live in mkkernel.rb (search for `MkKernel.reduce`).
|
|
6
|
+
Regenerate by running:
|
|
7
|
+
|
|
8
|
+
cd ext && ruby mkkernel.rb > carray_kernels.c
|
|
9
|
+
|
|
10
|
+
extconf.rb regenerates automatically when mkkernel.rb is touched.
|
|
11
|
+
|
|
12
|
+
--------------------------------------------------------------------------- */
|
|
13
|
+
|
|
14
|
+
#include "carray.h"
|
|
15
|
+
#include "ca_kernel_iterator.h"
|
|
16
|
+
#include "ca_sort_kernels.h" /* sort kernels: internal, not via the carray.h umbrella */
|
|
17
|
+
#include "carray_internal.h" /* ca_lazy_arena_*, ca_is_lazy_view (streaming reduce) */
|
|
18
|
+
#include "ca_obj_face.h" /* rb_ca_strip_face_value (Face ordering gate) */
|
|
19
|
+
#include <math.h>
|
|
20
|
+
#include <stdint.h>
|
|
21
|
+
#include <stdlib.h> /* qsort, mergesort (HAVE_MERGESORT) -- for :sort kind */
|
|
22
|
+
|
|
23
|
+
/* MEMO_REDUCTION_FASTPATH_ENTITY_ONLY_GUARD Tier 2: CAStack identity is
|
|
24
|
+
probed by operation-table function pointer (obj_type is runtime-
|
|
25
|
+
assigned, so no CA_OBJ_STACK compile-time constant exists). */
|
|
26
|
+
extern ca_operation_function_t ca_stack_func;
|
|
27
|
+
/* BOOL2VAL: bool -> Ruby (Qtrue/Qfalse). Used as ruby_scalar wrapper
|
|
28
|
+
for the all/any flat-reduction Ruby surface so `a.all` / `a.any`
|
|
29
|
+
return real true/false, not Integer 0/1. (BOOL2OBJ already exists
|
|
30
|
+
but returns Integer per CArray's boolean-as-int convention.) */
|
|
31
|
+
#ifndef CARRAY_BOOL2VAL_DEFINED
|
|
32
|
+
#define CARRAY_BOOL2VAL_DEFINED
|
|
33
|
+
static inline VALUE BOOL2VAL (boolean8_t x) { return x ? Qtrue : Qfalse; }
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#include "ca_op_powi.h"
|
|
37
|
+
|
|
38
|
+
/* ===== bincmp feq ============================================ */
|
|
39
|
+
|
|
40
|
+
static void
|
|
41
|
+
ca_bincmp_feq_float32_t (ca_size_t n, boolean8_t *m,
|
|
42
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
43
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
44
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
45
|
+
double tol)
|
|
46
|
+
{
|
|
47
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
48
|
+
float *p1 = q1, *p2 = q2;
|
|
49
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
50
|
+
boolean8_t *p3 = q3;
|
|
51
|
+
ca_size_t k;
|
|
52
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
53
|
+
(void) tol;
|
|
54
|
+
if ( m ) {
|
|
55
|
+
boolean8_t *pm;
|
|
56
|
+
for (k=0; k<n; k++) {
|
|
57
|
+
pm = m + k;
|
|
58
|
+
if ( ! *pm ) {
|
|
59
|
+
p1 = q1 + k*i1;
|
|
60
|
+
p2 = q2 + k*i2;
|
|
61
|
+
p3 = q3 + k*i3;
|
|
62
|
+
{
|
|
63
|
+
float f1a = fabs((float64_t) *p1);
|
|
64
|
+
float f2a = fabs((float64_t) *p2);
|
|
65
|
+
float fmax = (f1a > f2a) ? f1a : f2a;
|
|
66
|
+
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * FLT_EPSILON ) ? 1 : 0;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
} else {
|
|
71
|
+
for (k=0; k<n; k++) {
|
|
72
|
+
p1 = q1 + k*i1;
|
|
73
|
+
p2 = q2 + k*i2;
|
|
74
|
+
p3 = q3 + k*i3;
|
|
75
|
+
{
|
|
76
|
+
float f1a = fabs((float64_t) *p1);
|
|
77
|
+
float f2a = fabs((float64_t) *p2);
|
|
78
|
+
float fmax = (f1a > f2a) ? f1a : f2a;
|
|
79
|
+
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * FLT_EPSILON ) ? 1 : 0;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static void
|
|
86
|
+
ca_bincmp_feq_float64_t (ca_size_t n, boolean8_t *m,
|
|
87
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
88
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
89
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
90
|
+
double tol)
|
|
91
|
+
{
|
|
92
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
93
|
+
double *p1 = q1, *p2 = q2;
|
|
94
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
95
|
+
boolean8_t *p3 = q3;
|
|
96
|
+
ca_size_t k;
|
|
97
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
98
|
+
(void) tol;
|
|
99
|
+
if ( m ) {
|
|
100
|
+
boolean8_t *pm;
|
|
101
|
+
for (k=0; k<n; k++) {
|
|
102
|
+
pm = m + k;
|
|
103
|
+
if ( ! *pm ) {
|
|
104
|
+
p1 = q1 + k*i1;
|
|
105
|
+
p2 = q2 + k*i2;
|
|
106
|
+
p3 = q3 + k*i3;
|
|
107
|
+
{
|
|
108
|
+
double f1a = fabs((float64_t) *p1);
|
|
109
|
+
double f2a = fabs((float64_t) *p2);
|
|
110
|
+
double fmax = (f1a > f2a) ? f1a : f2a;
|
|
111
|
+
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * DBL_EPSILON ) ? 1 : 0;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
} else {
|
|
116
|
+
for (k=0; k<n; k++) {
|
|
117
|
+
p1 = q1 + k*i1;
|
|
118
|
+
p2 = q2 + k*i2;
|
|
119
|
+
p3 = q3 + k*i3;
|
|
120
|
+
{
|
|
121
|
+
double f1a = fabs((float64_t) *p1);
|
|
122
|
+
double f2a = fabs((float64_t) *p2);
|
|
123
|
+
double fmax = (f1a > f2a) ? f1a : f2a;
|
|
124
|
+
(*p3) = ( fabs(((float64_t) *p1)-( (float64_t) *p2)) <= fmax * DBL_EPSILON ) ? 1 : 0;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
ca_bincmp_func_t
|
|
131
|
+
ca_bincmp_feq[CA_NTYPE] = {
|
|
132
|
+
ca_bincmp_not_implement,
|
|
133
|
+
ca_bincmp_not_implement,
|
|
134
|
+
ca_bincmp_not_implement,
|
|
135
|
+
ca_bincmp_not_implement,
|
|
136
|
+
ca_bincmp_not_implement,
|
|
137
|
+
ca_bincmp_not_implement,
|
|
138
|
+
ca_bincmp_not_implement,
|
|
139
|
+
ca_bincmp_not_implement,
|
|
140
|
+
ca_bincmp_not_implement,
|
|
141
|
+
ca_bincmp_not_implement,
|
|
142
|
+
ca_bincmp_feq_float32_t,
|
|
143
|
+
ca_bincmp_feq_float64_t,
|
|
144
|
+
ca_bincmp_not_implement,
|
|
145
|
+
ca_bincmp_not_implement,
|
|
146
|
+
ca_bincmp_not_implement,
|
|
147
|
+
ca_bincmp_not_implement,
|
|
148
|
+
ca_bincmp_not_implement,
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
VALUE rb_ca_feq (VALUE self, VALUE other)
|
|
152
|
+
{
|
|
153
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
154
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("feq"));
|
|
155
|
+
}
|
|
156
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_feq, 0.0);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* ===== bincmp eq ============================================ */
|
|
160
|
+
|
|
161
|
+
static void
|
|
162
|
+
ca_bincmp_eq_fixlen (ca_size_t n, boolean8_t *m,
|
|
163
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
164
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
165
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
166
|
+
double tol)
|
|
167
|
+
{
|
|
168
|
+
char *q1 = ptr1, *q2 = ptr2;
|
|
169
|
+
char *p1 = q1, *p2 = q2;
|
|
170
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
171
|
+
boolean8_t *p3 = q3;
|
|
172
|
+
ca_size_t s1 = b1*i1, s2 = b2*i2, s3 = b3*i3;
|
|
173
|
+
ca_size_t k;
|
|
174
|
+
(void) tol;
|
|
175
|
+
if ( m ) {
|
|
176
|
+
boolean8_t *pm;
|
|
177
|
+
for (k=0; k<n; k++) {
|
|
178
|
+
pm = m + k;
|
|
179
|
+
if ( ! *pm ) {
|
|
180
|
+
p1 = q1 + k*s1;
|
|
181
|
+
p2 = q2 + k*s2;
|
|
182
|
+
p3 = q3 + k*s3;
|
|
183
|
+
{ (*p3) = ( b1 == b2 && (! memcmp(p1, p2, b1)) ); }
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
} else {
|
|
187
|
+
for (k=0; k<n; k++) {
|
|
188
|
+
p1 = q1 + k*s1;
|
|
189
|
+
p2 = q2 + k*s2;
|
|
190
|
+
p3 = q3 + k*s3;
|
|
191
|
+
{ (*p3) = ( b1 == b2 && (! memcmp(p1, p2, b1)) ); }
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
static void
|
|
197
|
+
ca_bincmp_eq_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
198
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
199
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
200
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
201
|
+
double tol)
|
|
202
|
+
{
|
|
203
|
+
boolean8_t *q1 = (boolean8_t *) ptr1, *q2 = (boolean8_t *) ptr2;
|
|
204
|
+
boolean8_t *p1 = q1, *p2 = q2;
|
|
205
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
206
|
+
boolean8_t *p3 = q3;
|
|
207
|
+
ca_size_t k;
|
|
208
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
209
|
+
(void) tol;
|
|
210
|
+
if ( m ) {
|
|
211
|
+
boolean8_t *pm;
|
|
212
|
+
for (k=0; k<n; k++) {
|
|
213
|
+
pm = m + k;
|
|
214
|
+
if ( ! *pm ) {
|
|
215
|
+
p1 = q1 + k*i1;
|
|
216
|
+
p2 = q2 + k*i2;
|
|
217
|
+
p3 = q3 + k*i3;
|
|
218
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
} else {
|
|
222
|
+
for (k=0; k<n; k++) {
|
|
223
|
+
p1 = q1 + k*i1;
|
|
224
|
+
p2 = q2 + k*i2;
|
|
225
|
+
p3 = q3 + k*i3;
|
|
226
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
static void
|
|
232
|
+
ca_bincmp_eq_int8_t (ca_size_t n, boolean8_t *m,
|
|
233
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
234
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
235
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
236
|
+
double tol)
|
|
237
|
+
{
|
|
238
|
+
int8_t *q1 = (int8_t *) ptr1, *q2 = (int8_t *) ptr2;
|
|
239
|
+
int8_t *p1 = q1, *p2 = q2;
|
|
240
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
241
|
+
boolean8_t *p3 = q3;
|
|
242
|
+
ca_size_t k;
|
|
243
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
244
|
+
(void) tol;
|
|
245
|
+
if ( m ) {
|
|
246
|
+
boolean8_t *pm;
|
|
247
|
+
for (k=0; k<n; k++) {
|
|
248
|
+
pm = m + k;
|
|
249
|
+
if ( ! *pm ) {
|
|
250
|
+
p1 = q1 + k*i1;
|
|
251
|
+
p2 = q2 + k*i2;
|
|
252
|
+
p3 = q3 + k*i3;
|
|
253
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
} else {
|
|
257
|
+
for (k=0; k<n; k++) {
|
|
258
|
+
p1 = q1 + k*i1;
|
|
259
|
+
p2 = q2 + k*i2;
|
|
260
|
+
p3 = q3 + k*i3;
|
|
261
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
static void
|
|
267
|
+
ca_bincmp_eq_uint8_t (ca_size_t n, boolean8_t *m,
|
|
268
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
269
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
270
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
271
|
+
double tol)
|
|
272
|
+
{
|
|
273
|
+
uint8_t *q1 = (uint8_t *) ptr1, *q2 = (uint8_t *) ptr2;
|
|
274
|
+
uint8_t *p1 = q1, *p2 = q2;
|
|
275
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
276
|
+
boolean8_t *p3 = q3;
|
|
277
|
+
ca_size_t k;
|
|
278
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
279
|
+
(void) tol;
|
|
280
|
+
if ( m ) {
|
|
281
|
+
boolean8_t *pm;
|
|
282
|
+
for (k=0; k<n; k++) {
|
|
283
|
+
pm = m + k;
|
|
284
|
+
if ( ! *pm ) {
|
|
285
|
+
p1 = q1 + k*i1;
|
|
286
|
+
p2 = q2 + k*i2;
|
|
287
|
+
p3 = q3 + k*i3;
|
|
288
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
} else {
|
|
292
|
+
for (k=0; k<n; k++) {
|
|
293
|
+
p1 = q1 + k*i1;
|
|
294
|
+
p2 = q2 + k*i2;
|
|
295
|
+
p3 = q3 + k*i3;
|
|
296
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
static void
|
|
302
|
+
ca_bincmp_eq_int16_t (ca_size_t n, boolean8_t *m,
|
|
303
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
304
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
305
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
306
|
+
double tol)
|
|
307
|
+
{
|
|
308
|
+
int16_t *q1 = (int16_t *) ptr1, *q2 = (int16_t *) ptr2;
|
|
309
|
+
int16_t *p1 = q1, *p2 = q2;
|
|
310
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
311
|
+
boolean8_t *p3 = q3;
|
|
312
|
+
ca_size_t k;
|
|
313
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
314
|
+
(void) tol;
|
|
315
|
+
if ( m ) {
|
|
316
|
+
boolean8_t *pm;
|
|
317
|
+
for (k=0; k<n; k++) {
|
|
318
|
+
pm = m + k;
|
|
319
|
+
if ( ! *pm ) {
|
|
320
|
+
p1 = q1 + k*i1;
|
|
321
|
+
p2 = q2 + k*i2;
|
|
322
|
+
p3 = q3 + k*i3;
|
|
323
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
} else {
|
|
327
|
+
for (k=0; k<n; k++) {
|
|
328
|
+
p1 = q1 + k*i1;
|
|
329
|
+
p2 = q2 + k*i2;
|
|
330
|
+
p3 = q3 + k*i3;
|
|
331
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
static void
|
|
337
|
+
ca_bincmp_eq_uint16_t (ca_size_t n, boolean8_t *m,
|
|
338
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
339
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
340
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
341
|
+
double tol)
|
|
342
|
+
{
|
|
343
|
+
uint16_t *q1 = (uint16_t *) ptr1, *q2 = (uint16_t *) ptr2;
|
|
344
|
+
uint16_t *p1 = q1, *p2 = q2;
|
|
345
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
346
|
+
boolean8_t *p3 = q3;
|
|
347
|
+
ca_size_t k;
|
|
348
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
349
|
+
(void) tol;
|
|
350
|
+
if ( m ) {
|
|
351
|
+
boolean8_t *pm;
|
|
352
|
+
for (k=0; k<n; k++) {
|
|
353
|
+
pm = m + k;
|
|
354
|
+
if ( ! *pm ) {
|
|
355
|
+
p1 = q1 + k*i1;
|
|
356
|
+
p2 = q2 + k*i2;
|
|
357
|
+
p3 = q3 + k*i3;
|
|
358
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
} else {
|
|
362
|
+
for (k=0; k<n; k++) {
|
|
363
|
+
p1 = q1 + k*i1;
|
|
364
|
+
p2 = q2 + k*i2;
|
|
365
|
+
p3 = q3 + k*i3;
|
|
366
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
static void
|
|
372
|
+
ca_bincmp_eq_int32_t (ca_size_t n, boolean8_t *m,
|
|
373
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
374
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
375
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
376
|
+
double tol)
|
|
377
|
+
{
|
|
378
|
+
int32_t *q1 = (int32_t *) ptr1, *q2 = (int32_t *) ptr2;
|
|
379
|
+
int32_t *p1 = q1, *p2 = q2;
|
|
380
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
381
|
+
boolean8_t *p3 = q3;
|
|
382
|
+
ca_size_t k;
|
|
383
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
384
|
+
(void) tol;
|
|
385
|
+
if ( m ) {
|
|
386
|
+
boolean8_t *pm;
|
|
387
|
+
for (k=0; k<n; k++) {
|
|
388
|
+
pm = m + k;
|
|
389
|
+
if ( ! *pm ) {
|
|
390
|
+
p1 = q1 + k*i1;
|
|
391
|
+
p2 = q2 + k*i2;
|
|
392
|
+
p3 = q3 + k*i3;
|
|
393
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
} else {
|
|
397
|
+
for (k=0; k<n; k++) {
|
|
398
|
+
p1 = q1 + k*i1;
|
|
399
|
+
p2 = q2 + k*i2;
|
|
400
|
+
p3 = q3 + k*i3;
|
|
401
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
static void
|
|
407
|
+
ca_bincmp_eq_uint32_t (ca_size_t n, boolean8_t *m,
|
|
408
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
409
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
410
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
411
|
+
double tol)
|
|
412
|
+
{
|
|
413
|
+
uint32_t *q1 = (uint32_t *) ptr1, *q2 = (uint32_t *) ptr2;
|
|
414
|
+
uint32_t *p1 = q1, *p2 = q2;
|
|
415
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
416
|
+
boolean8_t *p3 = q3;
|
|
417
|
+
ca_size_t k;
|
|
418
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
419
|
+
(void) tol;
|
|
420
|
+
if ( m ) {
|
|
421
|
+
boolean8_t *pm;
|
|
422
|
+
for (k=0; k<n; k++) {
|
|
423
|
+
pm = m + k;
|
|
424
|
+
if ( ! *pm ) {
|
|
425
|
+
p1 = q1 + k*i1;
|
|
426
|
+
p2 = q2 + k*i2;
|
|
427
|
+
p3 = q3 + k*i3;
|
|
428
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
} else {
|
|
432
|
+
for (k=0; k<n; k++) {
|
|
433
|
+
p1 = q1 + k*i1;
|
|
434
|
+
p2 = q2 + k*i2;
|
|
435
|
+
p3 = q3 + k*i3;
|
|
436
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
static void
|
|
442
|
+
ca_bincmp_eq_int64_t (ca_size_t n, boolean8_t *m,
|
|
443
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
444
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
445
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
446
|
+
double tol)
|
|
447
|
+
{
|
|
448
|
+
int64_t *q1 = (int64_t *) ptr1, *q2 = (int64_t *) ptr2;
|
|
449
|
+
int64_t *p1 = q1, *p2 = q2;
|
|
450
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
451
|
+
boolean8_t *p3 = q3;
|
|
452
|
+
ca_size_t k;
|
|
453
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
454
|
+
(void) tol;
|
|
455
|
+
if ( m ) {
|
|
456
|
+
boolean8_t *pm;
|
|
457
|
+
for (k=0; k<n; k++) {
|
|
458
|
+
pm = m + k;
|
|
459
|
+
if ( ! *pm ) {
|
|
460
|
+
p1 = q1 + k*i1;
|
|
461
|
+
p2 = q2 + k*i2;
|
|
462
|
+
p3 = q3 + k*i3;
|
|
463
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
} else {
|
|
467
|
+
for (k=0; k<n; k++) {
|
|
468
|
+
p1 = q1 + k*i1;
|
|
469
|
+
p2 = q2 + k*i2;
|
|
470
|
+
p3 = q3 + k*i3;
|
|
471
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
static void
|
|
477
|
+
ca_bincmp_eq_uint64_t (ca_size_t n, boolean8_t *m,
|
|
478
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
479
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
480
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
481
|
+
double tol)
|
|
482
|
+
{
|
|
483
|
+
uint64_t *q1 = (uint64_t *) ptr1, *q2 = (uint64_t *) ptr2;
|
|
484
|
+
uint64_t *p1 = q1, *p2 = q2;
|
|
485
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
486
|
+
boolean8_t *p3 = q3;
|
|
487
|
+
ca_size_t k;
|
|
488
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
489
|
+
(void) tol;
|
|
490
|
+
if ( m ) {
|
|
491
|
+
boolean8_t *pm;
|
|
492
|
+
for (k=0; k<n; k++) {
|
|
493
|
+
pm = m + k;
|
|
494
|
+
if ( ! *pm ) {
|
|
495
|
+
p1 = q1 + k*i1;
|
|
496
|
+
p2 = q2 + k*i2;
|
|
497
|
+
p3 = q3 + k*i3;
|
|
498
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
} else {
|
|
502
|
+
for (k=0; k<n; k++) {
|
|
503
|
+
p1 = q1 + k*i1;
|
|
504
|
+
p2 = q2 + k*i2;
|
|
505
|
+
p3 = q3 + k*i3;
|
|
506
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
static void
|
|
512
|
+
ca_bincmp_eq_float32_t (ca_size_t n, boolean8_t *m,
|
|
513
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
514
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
515
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
516
|
+
double tol)
|
|
517
|
+
{
|
|
518
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
519
|
+
float *p1 = q1, *p2 = q2;
|
|
520
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
521
|
+
boolean8_t *p3 = q3;
|
|
522
|
+
ca_size_t k;
|
|
523
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
524
|
+
(void) tol;
|
|
525
|
+
if ( m ) {
|
|
526
|
+
boolean8_t *pm;
|
|
527
|
+
for (k=0; k<n; k++) {
|
|
528
|
+
pm = m + k;
|
|
529
|
+
if ( ! *pm ) {
|
|
530
|
+
p1 = q1 + k*i1;
|
|
531
|
+
p2 = q2 + k*i2;
|
|
532
|
+
p3 = q3 + k*i3;
|
|
533
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
} else {
|
|
537
|
+
for (k=0; k<n; k++) {
|
|
538
|
+
p1 = q1 + k*i1;
|
|
539
|
+
p2 = q2 + k*i2;
|
|
540
|
+
p3 = q3 + k*i3;
|
|
541
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
static void
|
|
547
|
+
ca_bincmp_eq_float64_t (ca_size_t n, boolean8_t *m,
|
|
548
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
549
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
550
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
551
|
+
double tol)
|
|
552
|
+
{
|
|
553
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
554
|
+
double *p1 = q1, *p2 = q2;
|
|
555
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
556
|
+
boolean8_t *p3 = q3;
|
|
557
|
+
ca_size_t k;
|
|
558
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
559
|
+
(void) tol;
|
|
560
|
+
if ( m ) {
|
|
561
|
+
boolean8_t *pm;
|
|
562
|
+
for (k=0; k<n; k++) {
|
|
563
|
+
pm = m + k;
|
|
564
|
+
if ( ! *pm ) {
|
|
565
|
+
p1 = q1 + k*i1;
|
|
566
|
+
p2 = q2 + k*i2;
|
|
567
|
+
p3 = q3 + k*i3;
|
|
568
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
} else {
|
|
572
|
+
for (k=0; k<n; k++) {
|
|
573
|
+
p1 = q1 + k*i1;
|
|
574
|
+
p2 = q2 + k*i2;
|
|
575
|
+
p3 = q3 + k*i3;
|
|
576
|
+
{ (*p3) = ( (*p1) == (*p2) ); }
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
static void
|
|
582
|
+
ca_bincmp_eq_VALUE (ca_size_t n, boolean8_t *m,
|
|
583
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
584
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
585
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
586
|
+
double tol)
|
|
587
|
+
{
|
|
588
|
+
VALUE *q1 = (VALUE *) ptr1, *q2 = (VALUE *) ptr2;
|
|
589
|
+
VALUE *p1 = q1, *p2 = q2;
|
|
590
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
591
|
+
boolean8_t *p3 = q3;
|
|
592
|
+
ca_size_t k;
|
|
593
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
594
|
+
(void) tol;
|
|
595
|
+
if ( m ) {
|
|
596
|
+
boolean8_t *pm;
|
|
597
|
+
for (k=0; k<n; k++) {
|
|
598
|
+
pm = m + k;
|
|
599
|
+
if ( ! *pm ) {
|
|
600
|
+
p1 = q1 + k*i1;
|
|
601
|
+
p2 = q2 + k*i2;
|
|
602
|
+
p3 = q3 + k*i3;
|
|
603
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 1 : 0; }
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
} else {
|
|
607
|
+
for (k=0; k<n; k++) {
|
|
608
|
+
p1 = q1 + k*i1;
|
|
609
|
+
p2 = q2 + k*i2;
|
|
610
|
+
p3 = q3 + k*i3;
|
|
611
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 1 : 0; }
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
static void
|
|
617
|
+
ca_bincmp_eq_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
618
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
619
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
620
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
621
|
+
double tol)
|
|
622
|
+
{
|
|
623
|
+
cmplx64_t *q1 = (cmplx64_t *) ptr1, *q2 = (cmplx64_t *) ptr2;
|
|
624
|
+
cmplx64_t *p1 = q1, *p2 = q2;
|
|
625
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
626
|
+
boolean8_t *p3 = q3;
|
|
627
|
+
ca_size_t k;
|
|
628
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
629
|
+
(void) tol;
|
|
630
|
+
if ( m ) {
|
|
631
|
+
boolean8_t *pm;
|
|
632
|
+
for (k=0; k<n; k++) {
|
|
633
|
+
pm = m + k;
|
|
634
|
+
if ( ! *pm ) {
|
|
635
|
+
p1 = q1 + k*i1;
|
|
636
|
+
p2 = q2 + k*i2;
|
|
637
|
+
p3 = q3 + k*i3;
|
|
638
|
+
{ (*p3) = (*p1) == (*p2); }
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
} else {
|
|
642
|
+
for (k=0; k<n; k++) {
|
|
643
|
+
p1 = q1 + k*i1;
|
|
644
|
+
p2 = q2 + k*i2;
|
|
645
|
+
p3 = q3 + k*i3;
|
|
646
|
+
{ (*p3) = (*p1) == (*p2); }
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
static void
|
|
652
|
+
ca_bincmp_eq_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
653
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
654
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
655
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
656
|
+
double tol)
|
|
657
|
+
{
|
|
658
|
+
cmplx128_t *q1 = (cmplx128_t *) ptr1, *q2 = (cmplx128_t *) ptr2;
|
|
659
|
+
cmplx128_t *p1 = q1, *p2 = q2;
|
|
660
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
661
|
+
boolean8_t *p3 = q3;
|
|
662
|
+
ca_size_t k;
|
|
663
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
664
|
+
(void) tol;
|
|
665
|
+
if ( m ) {
|
|
666
|
+
boolean8_t *pm;
|
|
667
|
+
for (k=0; k<n; k++) {
|
|
668
|
+
pm = m + k;
|
|
669
|
+
if ( ! *pm ) {
|
|
670
|
+
p1 = q1 + k*i1;
|
|
671
|
+
p2 = q2 + k*i2;
|
|
672
|
+
p3 = q3 + k*i3;
|
|
673
|
+
{ (*p3) = (*p1) == (*p2); }
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
} else {
|
|
677
|
+
for (k=0; k<n; k++) {
|
|
678
|
+
p1 = q1 + k*i1;
|
|
679
|
+
p2 = q2 + k*i2;
|
|
680
|
+
p3 = q3 + k*i3;
|
|
681
|
+
{ (*p3) = (*p1) == (*p2); }
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
ca_bincmp_func_t
|
|
687
|
+
ca_bincmp_eq[CA_NTYPE] = {
|
|
688
|
+
ca_bincmp_eq_fixlen,
|
|
689
|
+
ca_bincmp_eq_boolean8_t,
|
|
690
|
+
ca_bincmp_eq_int8_t,
|
|
691
|
+
ca_bincmp_eq_uint8_t,
|
|
692
|
+
ca_bincmp_eq_int16_t,
|
|
693
|
+
ca_bincmp_eq_uint16_t,
|
|
694
|
+
ca_bincmp_eq_int32_t,
|
|
695
|
+
ca_bincmp_eq_uint32_t,
|
|
696
|
+
ca_bincmp_eq_int64_t,
|
|
697
|
+
ca_bincmp_eq_uint64_t,
|
|
698
|
+
ca_bincmp_eq_float32_t,
|
|
699
|
+
ca_bincmp_eq_float64_t,
|
|
700
|
+
ca_bincmp_not_implement,
|
|
701
|
+
ca_bincmp_eq_cmplx64_t,
|
|
702
|
+
ca_bincmp_eq_cmplx128_t,
|
|
703
|
+
ca_bincmp_not_implement,
|
|
704
|
+
ca_bincmp_eq_VALUE,
|
|
705
|
+
};
|
|
706
|
+
|
|
707
|
+
VALUE rb_ca_eq (VALUE self, VALUE other)
|
|
708
|
+
{
|
|
709
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
710
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("eq"));
|
|
711
|
+
}
|
|
712
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_eq, 0.0);
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
/* ===== bincmp ne ============================================ */
|
|
716
|
+
|
|
717
|
+
static void
|
|
718
|
+
ca_bincmp_ne_fixlen (ca_size_t n, boolean8_t *m,
|
|
719
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
720
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
721
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
722
|
+
double tol)
|
|
723
|
+
{
|
|
724
|
+
char *q1 = ptr1, *q2 = ptr2;
|
|
725
|
+
char *p1 = q1, *p2 = q2;
|
|
726
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
727
|
+
boolean8_t *p3 = q3;
|
|
728
|
+
ca_size_t s1 = b1*i1, s2 = b2*i2, s3 = b3*i3;
|
|
729
|
+
ca_size_t k;
|
|
730
|
+
(void) tol;
|
|
731
|
+
if ( m ) {
|
|
732
|
+
boolean8_t *pm;
|
|
733
|
+
for (k=0; k<n; k++) {
|
|
734
|
+
pm = m + k;
|
|
735
|
+
if ( ! *pm ) {
|
|
736
|
+
p1 = q1 + k*s1;
|
|
737
|
+
p2 = q2 + k*s2;
|
|
738
|
+
p3 = q3 + k*s3;
|
|
739
|
+
{ (*p3) = ( b1 != b2 || memcmp(p1, p2, b1) ); }
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
} else {
|
|
743
|
+
for (k=0; k<n; k++) {
|
|
744
|
+
p1 = q1 + k*s1;
|
|
745
|
+
p2 = q2 + k*s2;
|
|
746
|
+
p3 = q3 + k*s3;
|
|
747
|
+
{ (*p3) = ( b1 != b2 || memcmp(p1, p2, b1) ); }
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
static void
|
|
753
|
+
ca_bincmp_ne_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
754
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
755
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
756
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
757
|
+
double tol)
|
|
758
|
+
{
|
|
759
|
+
boolean8_t *q1 = (boolean8_t *) ptr1, *q2 = (boolean8_t *) ptr2;
|
|
760
|
+
boolean8_t *p1 = q1, *p2 = q2;
|
|
761
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
762
|
+
boolean8_t *p3 = q3;
|
|
763
|
+
ca_size_t k;
|
|
764
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
765
|
+
(void) tol;
|
|
766
|
+
if ( m ) {
|
|
767
|
+
boolean8_t *pm;
|
|
768
|
+
for (k=0; k<n; k++) {
|
|
769
|
+
pm = m + k;
|
|
770
|
+
if ( ! *pm ) {
|
|
771
|
+
p1 = q1 + k*i1;
|
|
772
|
+
p2 = q2 + k*i2;
|
|
773
|
+
p3 = q3 + k*i3;
|
|
774
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
} else {
|
|
778
|
+
for (k=0; k<n; k++) {
|
|
779
|
+
p1 = q1 + k*i1;
|
|
780
|
+
p2 = q2 + k*i2;
|
|
781
|
+
p3 = q3 + k*i3;
|
|
782
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
static void
|
|
788
|
+
ca_bincmp_ne_int8_t (ca_size_t n, boolean8_t *m,
|
|
789
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
790
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
791
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
792
|
+
double tol)
|
|
793
|
+
{
|
|
794
|
+
int8_t *q1 = (int8_t *) ptr1, *q2 = (int8_t *) ptr2;
|
|
795
|
+
int8_t *p1 = q1, *p2 = q2;
|
|
796
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
797
|
+
boolean8_t *p3 = q3;
|
|
798
|
+
ca_size_t k;
|
|
799
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
800
|
+
(void) tol;
|
|
801
|
+
if ( m ) {
|
|
802
|
+
boolean8_t *pm;
|
|
803
|
+
for (k=0; k<n; k++) {
|
|
804
|
+
pm = m + k;
|
|
805
|
+
if ( ! *pm ) {
|
|
806
|
+
p1 = q1 + k*i1;
|
|
807
|
+
p2 = q2 + k*i2;
|
|
808
|
+
p3 = q3 + k*i3;
|
|
809
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
} else {
|
|
813
|
+
for (k=0; k<n; k++) {
|
|
814
|
+
p1 = q1 + k*i1;
|
|
815
|
+
p2 = q2 + k*i2;
|
|
816
|
+
p3 = q3 + k*i3;
|
|
817
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
static void
|
|
823
|
+
ca_bincmp_ne_uint8_t (ca_size_t n, boolean8_t *m,
|
|
824
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
825
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
826
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
827
|
+
double tol)
|
|
828
|
+
{
|
|
829
|
+
uint8_t *q1 = (uint8_t *) ptr1, *q2 = (uint8_t *) ptr2;
|
|
830
|
+
uint8_t *p1 = q1, *p2 = q2;
|
|
831
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
832
|
+
boolean8_t *p3 = q3;
|
|
833
|
+
ca_size_t k;
|
|
834
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
835
|
+
(void) tol;
|
|
836
|
+
if ( m ) {
|
|
837
|
+
boolean8_t *pm;
|
|
838
|
+
for (k=0; k<n; k++) {
|
|
839
|
+
pm = m + k;
|
|
840
|
+
if ( ! *pm ) {
|
|
841
|
+
p1 = q1 + k*i1;
|
|
842
|
+
p2 = q2 + k*i2;
|
|
843
|
+
p3 = q3 + k*i3;
|
|
844
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
} else {
|
|
848
|
+
for (k=0; k<n; k++) {
|
|
849
|
+
p1 = q1 + k*i1;
|
|
850
|
+
p2 = q2 + k*i2;
|
|
851
|
+
p3 = q3 + k*i3;
|
|
852
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
static void
|
|
858
|
+
ca_bincmp_ne_int16_t (ca_size_t n, boolean8_t *m,
|
|
859
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
860
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
861
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
862
|
+
double tol)
|
|
863
|
+
{
|
|
864
|
+
int16_t *q1 = (int16_t *) ptr1, *q2 = (int16_t *) ptr2;
|
|
865
|
+
int16_t *p1 = q1, *p2 = q2;
|
|
866
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
867
|
+
boolean8_t *p3 = q3;
|
|
868
|
+
ca_size_t k;
|
|
869
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
870
|
+
(void) tol;
|
|
871
|
+
if ( m ) {
|
|
872
|
+
boolean8_t *pm;
|
|
873
|
+
for (k=0; k<n; k++) {
|
|
874
|
+
pm = m + k;
|
|
875
|
+
if ( ! *pm ) {
|
|
876
|
+
p1 = q1 + k*i1;
|
|
877
|
+
p2 = q2 + k*i2;
|
|
878
|
+
p3 = q3 + k*i3;
|
|
879
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
} else {
|
|
883
|
+
for (k=0; k<n; k++) {
|
|
884
|
+
p1 = q1 + k*i1;
|
|
885
|
+
p2 = q2 + k*i2;
|
|
886
|
+
p3 = q3 + k*i3;
|
|
887
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
static void
|
|
893
|
+
ca_bincmp_ne_uint16_t (ca_size_t n, boolean8_t *m,
|
|
894
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
895
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
896
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
897
|
+
double tol)
|
|
898
|
+
{
|
|
899
|
+
uint16_t *q1 = (uint16_t *) ptr1, *q2 = (uint16_t *) ptr2;
|
|
900
|
+
uint16_t *p1 = q1, *p2 = q2;
|
|
901
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
902
|
+
boolean8_t *p3 = q3;
|
|
903
|
+
ca_size_t k;
|
|
904
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
905
|
+
(void) tol;
|
|
906
|
+
if ( m ) {
|
|
907
|
+
boolean8_t *pm;
|
|
908
|
+
for (k=0; k<n; k++) {
|
|
909
|
+
pm = m + k;
|
|
910
|
+
if ( ! *pm ) {
|
|
911
|
+
p1 = q1 + k*i1;
|
|
912
|
+
p2 = q2 + k*i2;
|
|
913
|
+
p3 = q3 + k*i3;
|
|
914
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
} else {
|
|
918
|
+
for (k=0; k<n; k++) {
|
|
919
|
+
p1 = q1 + k*i1;
|
|
920
|
+
p2 = q2 + k*i2;
|
|
921
|
+
p3 = q3 + k*i3;
|
|
922
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
static void
|
|
928
|
+
ca_bincmp_ne_int32_t (ca_size_t n, boolean8_t *m,
|
|
929
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
930
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
931
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
932
|
+
double tol)
|
|
933
|
+
{
|
|
934
|
+
int32_t *q1 = (int32_t *) ptr1, *q2 = (int32_t *) ptr2;
|
|
935
|
+
int32_t *p1 = q1, *p2 = q2;
|
|
936
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
937
|
+
boolean8_t *p3 = q3;
|
|
938
|
+
ca_size_t k;
|
|
939
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
940
|
+
(void) tol;
|
|
941
|
+
if ( m ) {
|
|
942
|
+
boolean8_t *pm;
|
|
943
|
+
for (k=0; k<n; k++) {
|
|
944
|
+
pm = m + k;
|
|
945
|
+
if ( ! *pm ) {
|
|
946
|
+
p1 = q1 + k*i1;
|
|
947
|
+
p2 = q2 + k*i2;
|
|
948
|
+
p3 = q3 + k*i3;
|
|
949
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
} else {
|
|
953
|
+
for (k=0; k<n; k++) {
|
|
954
|
+
p1 = q1 + k*i1;
|
|
955
|
+
p2 = q2 + k*i2;
|
|
956
|
+
p3 = q3 + k*i3;
|
|
957
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
static void
|
|
963
|
+
ca_bincmp_ne_uint32_t (ca_size_t n, boolean8_t *m,
|
|
964
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
965
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
966
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
967
|
+
double tol)
|
|
968
|
+
{
|
|
969
|
+
uint32_t *q1 = (uint32_t *) ptr1, *q2 = (uint32_t *) ptr2;
|
|
970
|
+
uint32_t *p1 = q1, *p2 = q2;
|
|
971
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
972
|
+
boolean8_t *p3 = q3;
|
|
973
|
+
ca_size_t k;
|
|
974
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
975
|
+
(void) tol;
|
|
976
|
+
if ( m ) {
|
|
977
|
+
boolean8_t *pm;
|
|
978
|
+
for (k=0; k<n; k++) {
|
|
979
|
+
pm = m + k;
|
|
980
|
+
if ( ! *pm ) {
|
|
981
|
+
p1 = q1 + k*i1;
|
|
982
|
+
p2 = q2 + k*i2;
|
|
983
|
+
p3 = q3 + k*i3;
|
|
984
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
} else {
|
|
988
|
+
for (k=0; k<n; k++) {
|
|
989
|
+
p1 = q1 + k*i1;
|
|
990
|
+
p2 = q2 + k*i2;
|
|
991
|
+
p3 = q3 + k*i3;
|
|
992
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
static void
|
|
998
|
+
ca_bincmp_ne_int64_t (ca_size_t n, boolean8_t *m,
|
|
999
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1000
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1001
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1002
|
+
double tol)
|
|
1003
|
+
{
|
|
1004
|
+
int64_t *q1 = (int64_t *) ptr1, *q2 = (int64_t *) ptr2;
|
|
1005
|
+
int64_t *p1 = q1, *p2 = q2;
|
|
1006
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1007
|
+
boolean8_t *p3 = q3;
|
|
1008
|
+
ca_size_t k;
|
|
1009
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1010
|
+
(void) tol;
|
|
1011
|
+
if ( m ) {
|
|
1012
|
+
boolean8_t *pm;
|
|
1013
|
+
for (k=0; k<n; k++) {
|
|
1014
|
+
pm = m + k;
|
|
1015
|
+
if ( ! *pm ) {
|
|
1016
|
+
p1 = q1 + k*i1;
|
|
1017
|
+
p2 = q2 + k*i2;
|
|
1018
|
+
p3 = q3 + k*i3;
|
|
1019
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
} else {
|
|
1023
|
+
for (k=0; k<n; k++) {
|
|
1024
|
+
p1 = q1 + k*i1;
|
|
1025
|
+
p2 = q2 + k*i2;
|
|
1026
|
+
p3 = q3 + k*i3;
|
|
1027
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
static void
|
|
1033
|
+
ca_bincmp_ne_uint64_t (ca_size_t n, boolean8_t *m,
|
|
1034
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1035
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1036
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1037
|
+
double tol)
|
|
1038
|
+
{
|
|
1039
|
+
uint64_t *q1 = (uint64_t *) ptr1, *q2 = (uint64_t *) ptr2;
|
|
1040
|
+
uint64_t *p1 = q1, *p2 = q2;
|
|
1041
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1042
|
+
boolean8_t *p3 = q3;
|
|
1043
|
+
ca_size_t k;
|
|
1044
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1045
|
+
(void) tol;
|
|
1046
|
+
if ( m ) {
|
|
1047
|
+
boolean8_t *pm;
|
|
1048
|
+
for (k=0; k<n; k++) {
|
|
1049
|
+
pm = m + k;
|
|
1050
|
+
if ( ! *pm ) {
|
|
1051
|
+
p1 = q1 + k*i1;
|
|
1052
|
+
p2 = q2 + k*i2;
|
|
1053
|
+
p3 = q3 + k*i3;
|
|
1054
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
} else {
|
|
1058
|
+
for (k=0; k<n; k++) {
|
|
1059
|
+
p1 = q1 + k*i1;
|
|
1060
|
+
p2 = q2 + k*i2;
|
|
1061
|
+
p3 = q3 + k*i3;
|
|
1062
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
static void
|
|
1068
|
+
ca_bincmp_ne_float32_t (ca_size_t n, boolean8_t *m,
|
|
1069
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1070
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1071
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1072
|
+
double tol)
|
|
1073
|
+
{
|
|
1074
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
1075
|
+
float *p1 = q1, *p2 = q2;
|
|
1076
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1077
|
+
boolean8_t *p3 = q3;
|
|
1078
|
+
ca_size_t k;
|
|
1079
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1080
|
+
(void) tol;
|
|
1081
|
+
if ( m ) {
|
|
1082
|
+
boolean8_t *pm;
|
|
1083
|
+
for (k=0; k<n; k++) {
|
|
1084
|
+
pm = m + k;
|
|
1085
|
+
if ( ! *pm ) {
|
|
1086
|
+
p1 = q1 + k*i1;
|
|
1087
|
+
p2 = q2 + k*i2;
|
|
1088
|
+
p3 = q3 + k*i3;
|
|
1089
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
} else {
|
|
1093
|
+
for (k=0; k<n; k++) {
|
|
1094
|
+
p1 = q1 + k*i1;
|
|
1095
|
+
p2 = q2 + k*i2;
|
|
1096
|
+
p3 = q3 + k*i3;
|
|
1097
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
static void
|
|
1103
|
+
ca_bincmp_ne_float64_t (ca_size_t n, boolean8_t *m,
|
|
1104
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1105
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1106
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1107
|
+
double tol)
|
|
1108
|
+
{
|
|
1109
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
1110
|
+
double *p1 = q1, *p2 = q2;
|
|
1111
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1112
|
+
boolean8_t *p3 = q3;
|
|
1113
|
+
ca_size_t k;
|
|
1114
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1115
|
+
(void) tol;
|
|
1116
|
+
if ( m ) {
|
|
1117
|
+
boolean8_t *pm;
|
|
1118
|
+
for (k=0; k<n; k++) {
|
|
1119
|
+
pm = m + k;
|
|
1120
|
+
if ( ! *pm ) {
|
|
1121
|
+
p1 = q1 + k*i1;
|
|
1122
|
+
p2 = q2 + k*i2;
|
|
1123
|
+
p3 = q3 + k*i3;
|
|
1124
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
} else {
|
|
1128
|
+
for (k=0; k<n; k++) {
|
|
1129
|
+
p1 = q1 + k*i1;
|
|
1130
|
+
p2 = q2 + k*i2;
|
|
1131
|
+
p3 = q3 + k*i3;
|
|
1132
|
+
{ (*p3) = ( (*p1) != (*p2) ); }
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
static void
|
|
1138
|
+
ca_bincmp_ne_VALUE (ca_size_t n, boolean8_t *m,
|
|
1139
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1140
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1141
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1142
|
+
double tol)
|
|
1143
|
+
{
|
|
1144
|
+
VALUE *q1 = (VALUE *) ptr1, *q2 = (VALUE *) ptr2;
|
|
1145
|
+
VALUE *p1 = q1, *p2 = q2;
|
|
1146
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1147
|
+
boolean8_t *p3 = q3;
|
|
1148
|
+
ca_size_t k;
|
|
1149
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1150
|
+
(void) tol;
|
|
1151
|
+
if ( m ) {
|
|
1152
|
+
boolean8_t *pm;
|
|
1153
|
+
for (k=0; k<n; k++) {
|
|
1154
|
+
pm = m + k;
|
|
1155
|
+
if ( ! *pm ) {
|
|
1156
|
+
p1 = q1 + k*i1;
|
|
1157
|
+
p2 = q2 + k*i2;
|
|
1158
|
+
p3 = q3 + k*i3;
|
|
1159
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 0 : 1; }
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
} else {
|
|
1163
|
+
for (k=0; k<n; k++) {
|
|
1164
|
+
p1 = q1 + k*i1;
|
|
1165
|
+
p2 = q2 + k*i2;
|
|
1166
|
+
p3 = q3 + k*i3;
|
|
1167
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=="), 1, (*p2))) ? 0 : 1; }
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
static void
|
|
1173
|
+
ca_bincmp_ne_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
1174
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1175
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1176
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1177
|
+
double tol)
|
|
1178
|
+
{
|
|
1179
|
+
cmplx64_t *q1 = (cmplx64_t *) ptr1, *q2 = (cmplx64_t *) ptr2;
|
|
1180
|
+
cmplx64_t *p1 = q1, *p2 = q2;
|
|
1181
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1182
|
+
boolean8_t *p3 = q3;
|
|
1183
|
+
ca_size_t k;
|
|
1184
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1185
|
+
(void) tol;
|
|
1186
|
+
if ( m ) {
|
|
1187
|
+
boolean8_t *pm;
|
|
1188
|
+
for (k=0; k<n; k++) {
|
|
1189
|
+
pm = m + k;
|
|
1190
|
+
if ( ! *pm ) {
|
|
1191
|
+
p1 = q1 + k*i1;
|
|
1192
|
+
p2 = q2 + k*i2;
|
|
1193
|
+
p3 = q3 + k*i3;
|
|
1194
|
+
{ (*p3) = (*p1) != (*p2); }
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
} else {
|
|
1198
|
+
for (k=0; k<n; k++) {
|
|
1199
|
+
p1 = q1 + k*i1;
|
|
1200
|
+
p2 = q2 + k*i2;
|
|
1201
|
+
p3 = q3 + k*i3;
|
|
1202
|
+
{ (*p3) = (*p1) != (*p2); }
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
static void
|
|
1208
|
+
ca_bincmp_ne_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
1209
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1210
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1211
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1212
|
+
double tol)
|
|
1213
|
+
{
|
|
1214
|
+
cmplx128_t *q1 = (cmplx128_t *) ptr1, *q2 = (cmplx128_t *) ptr2;
|
|
1215
|
+
cmplx128_t *p1 = q1, *p2 = q2;
|
|
1216
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1217
|
+
boolean8_t *p3 = q3;
|
|
1218
|
+
ca_size_t k;
|
|
1219
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1220
|
+
(void) tol;
|
|
1221
|
+
if ( m ) {
|
|
1222
|
+
boolean8_t *pm;
|
|
1223
|
+
for (k=0; k<n; k++) {
|
|
1224
|
+
pm = m + k;
|
|
1225
|
+
if ( ! *pm ) {
|
|
1226
|
+
p1 = q1 + k*i1;
|
|
1227
|
+
p2 = q2 + k*i2;
|
|
1228
|
+
p3 = q3 + k*i3;
|
|
1229
|
+
{ (*p3) = (*p1) != (*p2); }
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
} else {
|
|
1233
|
+
for (k=0; k<n; k++) {
|
|
1234
|
+
p1 = q1 + k*i1;
|
|
1235
|
+
p2 = q2 + k*i2;
|
|
1236
|
+
p3 = q3 + k*i3;
|
|
1237
|
+
{ (*p3) = (*p1) != (*p2); }
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
ca_bincmp_func_t
|
|
1243
|
+
ca_bincmp_ne[CA_NTYPE] = {
|
|
1244
|
+
ca_bincmp_ne_fixlen,
|
|
1245
|
+
ca_bincmp_ne_boolean8_t,
|
|
1246
|
+
ca_bincmp_ne_int8_t,
|
|
1247
|
+
ca_bincmp_ne_uint8_t,
|
|
1248
|
+
ca_bincmp_ne_int16_t,
|
|
1249
|
+
ca_bincmp_ne_uint16_t,
|
|
1250
|
+
ca_bincmp_ne_int32_t,
|
|
1251
|
+
ca_bincmp_ne_uint32_t,
|
|
1252
|
+
ca_bincmp_ne_int64_t,
|
|
1253
|
+
ca_bincmp_ne_uint64_t,
|
|
1254
|
+
ca_bincmp_ne_float32_t,
|
|
1255
|
+
ca_bincmp_ne_float64_t,
|
|
1256
|
+
ca_bincmp_not_implement,
|
|
1257
|
+
ca_bincmp_ne_cmplx64_t,
|
|
1258
|
+
ca_bincmp_ne_cmplx128_t,
|
|
1259
|
+
ca_bincmp_not_implement,
|
|
1260
|
+
ca_bincmp_ne_VALUE,
|
|
1261
|
+
};
|
|
1262
|
+
|
|
1263
|
+
VALUE rb_ca_ne (VALUE self, VALUE other)
|
|
1264
|
+
{
|
|
1265
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
1266
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("ne"));
|
|
1267
|
+
}
|
|
1268
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_ne, 0.0);
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
/* ===== bincmp gt ============================================ */
|
|
1272
|
+
|
|
1273
|
+
static void
|
|
1274
|
+
ca_bincmp_gt_fixlen (ca_size_t n, boolean8_t *m,
|
|
1275
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1276
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1277
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1278
|
+
double tol)
|
|
1279
|
+
{
|
|
1280
|
+
char *q1 = ptr1, *q2 = ptr2;
|
|
1281
|
+
char *p1 = q1, *p2 = q2;
|
|
1282
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1283
|
+
boolean8_t *p3 = q3;
|
|
1284
|
+
ca_size_t s1 = b1*i1, s2 = b2*i2, s3 = b3*i3;
|
|
1285
|
+
ca_size_t k;
|
|
1286
|
+
(void) tol;
|
|
1287
|
+
if ( m ) {
|
|
1288
|
+
boolean8_t *pm;
|
|
1289
|
+
for (k=0; k<n; k++) {
|
|
1290
|
+
pm = m + k;
|
|
1291
|
+
if ( ! *pm ) {
|
|
1292
|
+
p1 = q1 + k*s1;
|
|
1293
|
+
p2 = q2 + k*s2;
|
|
1294
|
+
p3 = q3 + k*s3;
|
|
1295
|
+
{
|
|
1296
|
+
int cmp = memcmp(p1, p2, b1 < b2 ? b1 : b2);
|
|
1297
|
+
(*p3) = ( cmp > 0 || ( cmp == 0 && b1 > b2 ) );
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
} else {
|
|
1302
|
+
for (k=0; k<n; k++) {
|
|
1303
|
+
p1 = q1 + k*s1;
|
|
1304
|
+
p2 = q2 + k*s2;
|
|
1305
|
+
p3 = q3 + k*s3;
|
|
1306
|
+
{
|
|
1307
|
+
int cmp = memcmp(p1, p2, b1 < b2 ? b1 : b2);
|
|
1308
|
+
(*p3) = ( cmp > 0 || ( cmp == 0 && b1 > b2 ) );
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1314
|
+
static void
|
|
1315
|
+
ca_bincmp_gt_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
1316
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1317
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1318
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1319
|
+
double tol)
|
|
1320
|
+
{
|
|
1321
|
+
boolean8_t *q1 = (boolean8_t *) ptr1, *q2 = (boolean8_t *) ptr2;
|
|
1322
|
+
boolean8_t *p1 = q1, *p2 = q2;
|
|
1323
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1324
|
+
boolean8_t *p3 = q3;
|
|
1325
|
+
ca_size_t k;
|
|
1326
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1327
|
+
(void) tol;
|
|
1328
|
+
if ( m ) {
|
|
1329
|
+
boolean8_t *pm;
|
|
1330
|
+
for (k=0; k<n; k++) {
|
|
1331
|
+
pm = m + k;
|
|
1332
|
+
if ( ! *pm ) {
|
|
1333
|
+
p1 = q1 + k*i1;
|
|
1334
|
+
p2 = q2 + k*i2;
|
|
1335
|
+
p3 = q3 + k*i3;
|
|
1336
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1337
|
+
}
|
|
1338
|
+
}
|
|
1339
|
+
} else {
|
|
1340
|
+
for (k=0; k<n; k++) {
|
|
1341
|
+
p1 = q1 + k*i1;
|
|
1342
|
+
p2 = q2 + k*i2;
|
|
1343
|
+
p3 = q3 + k*i3;
|
|
1344
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
static void
|
|
1350
|
+
ca_bincmp_gt_int8_t (ca_size_t n, boolean8_t *m,
|
|
1351
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1352
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1353
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1354
|
+
double tol)
|
|
1355
|
+
{
|
|
1356
|
+
int8_t *q1 = (int8_t *) ptr1, *q2 = (int8_t *) ptr2;
|
|
1357
|
+
int8_t *p1 = q1, *p2 = q2;
|
|
1358
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1359
|
+
boolean8_t *p3 = q3;
|
|
1360
|
+
ca_size_t k;
|
|
1361
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1362
|
+
(void) tol;
|
|
1363
|
+
if ( m ) {
|
|
1364
|
+
boolean8_t *pm;
|
|
1365
|
+
for (k=0; k<n; k++) {
|
|
1366
|
+
pm = m + k;
|
|
1367
|
+
if ( ! *pm ) {
|
|
1368
|
+
p1 = q1 + k*i1;
|
|
1369
|
+
p2 = q2 + k*i2;
|
|
1370
|
+
p3 = q3 + k*i3;
|
|
1371
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
} else {
|
|
1375
|
+
for (k=0; k<n; k++) {
|
|
1376
|
+
p1 = q1 + k*i1;
|
|
1377
|
+
p2 = q2 + k*i2;
|
|
1378
|
+
p3 = q3 + k*i3;
|
|
1379
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
static void
|
|
1385
|
+
ca_bincmp_gt_uint8_t (ca_size_t n, boolean8_t *m,
|
|
1386
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1387
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1388
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1389
|
+
double tol)
|
|
1390
|
+
{
|
|
1391
|
+
uint8_t *q1 = (uint8_t *) ptr1, *q2 = (uint8_t *) ptr2;
|
|
1392
|
+
uint8_t *p1 = q1, *p2 = q2;
|
|
1393
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1394
|
+
boolean8_t *p3 = q3;
|
|
1395
|
+
ca_size_t k;
|
|
1396
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1397
|
+
(void) tol;
|
|
1398
|
+
if ( m ) {
|
|
1399
|
+
boolean8_t *pm;
|
|
1400
|
+
for (k=0; k<n; k++) {
|
|
1401
|
+
pm = m + k;
|
|
1402
|
+
if ( ! *pm ) {
|
|
1403
|
+
p1 = q1 + k*i1;
|
|
1404
|
+
p2 = q2 + k*i2;
|
|
1405
|
+
p3 = q3 + k*i3;
|
|
1406
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
} else {
|
|
1410
|
+
for (k=0; k<n; k++) {
|
|
1411
|
+
p1 = q1 + k*i1;
|
|
1412
|
+
p2 = q2 + k*i2;
|
|
1413
|
+
p3 = q3 + k*i3;
|
|
1414
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
static void
|
|
1420
|
+
ca_bincmp_gt_int16_t (ca_size_t n, boolean8_t *m,
|
|
1421
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1422
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1423
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1424
|
+
double tol)
|
|
1425
|
+
{
|
|
1426
|
+
int16_t *q1 = (int16_t *) ptr1, *q2 = (int16_t *) ptr2;
|
|
1427
|
+
int16_t *p1 = q1, *p2 = q2;
|
|
1428
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1429
|
+
boolean8_t *p3 = q3;
|
|
1430
|
+
ca_size_t k;
|
|
1431
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1432
|
+
(void) tol;
|
|
1433
|
+
if ( m ) {
|
|
1434
|
+
boolean8_t *pm;
|
|
1435
|
+
for (k=0; k<n; k++) {
|
|
1436
|
+
pm = m + k;
|
|
1437
|
+
if ( ! *pm ) {
|
|
1438
|
+
p1 = q1 + k*i1;
|
|
1439
|
+
p2 = q2 + k*i2;
|
|
1440
|
+
p3 = q3 + k*i3;
|
|
1441
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1442
|
+
}
|
|
1443
|
+
}
|
|
1444
|
+
} else {
|
|
1445
|
+
for (k=0; k<n; k++) {
|
|
1446
|
+
p1 = q1 + k*i1;
|
|
1447
|
+
p2 = q2 + k*i2;
|
|
1448
|
+
p3 = q3 + k*i3;
|
|
1449
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
static void
|
|
1455
|
+
ca_bincmp_gt_uint16_t (ca_size_t n, boolean8_t *m,
|
|
1456
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1457
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1458
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1459
|
+
double tol)
|
|
1460
|
+
{
|
|
1461
|
+
uint16_t *q1 = (uint16_t *) ptr1, *q2 = (uint16_t *) ptr2;
|
|
1462
|
+
uint16_t *p1 = q1, *p2 = q2;
|
|
1463
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1464
|
+
boolean8_t *p3 = q3;
|
|
1465
|
+
ca_size_t k;
|
|
1466
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1467
|
+
(void) tol;
|
|
1468
|
+
if ( m ) {
|
|
1469
|
+
boolean8_t *pm;
|
|
1470
|
+
for (k=0; k<n; k++) {
|
|
1471
|
+
pm = m + k;
|
|
1472
|
+
if ( ! *pm ) {
|
|
1473
|
+
p1 = q1 + k*i1;
|
|
1474
|
+
p2 = q2 + k*i2;
|
|
1475
|
+
p3 = q3 + k*i3;
|
|
1476
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1479
|
+
} else {
|
|
1480
|
+
for (k=0; k<n; k++) {
|
|
1481
|
+
p1 = q1 + k*i1;
|
|
1482
|
+
p2 = q2 + k*i2;
|
|
1483
|
+
p3 = q3 + k*i3;
|
|
1484
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
static void
|
|
1490
|
+
ca_bincmp_gt_int32_t (ca_size_t n, boolean8_t *m,
|
|
1491
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1492
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1493
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1494
|
+
double tol)
|
|
1495
|
+
{
|
|
1496
|
+
int32_t *q1 = (int32_t *) ptr1, *q2 = (int32_t *) ptr2;
|
|
1497
|
+
int32_t *p1 = q1, *p2 = q2;
|
|
1498
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1499
|
+
boolean8_t *p3 = q3;
|
|
1500
|
+
ca_size_t k;
|
|
1501
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1502
|
+
(void) tol;
|
|
1503
|
+
if ( m ) {
|
|
1504
|
+
boolean8_t *pm;
|
|
1505
|
+
for (k=0; k<n; k++) {
|
|
1506
|
+
pm = m + k;
|
|
1507
|
+
if ( ! *pm ) {
|
|
1508
|
+
p1 = q1 + k*i1;
|
|
1509
|
+
p2 = q2 + k*i2;
|
|
1510
|
+
p3 = q3 + k*i3;
|
|
1511
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1512
|
+
}
|
|
1513
|
+
}
|
|
1514
|
+
} else {
|
|
1515
|
+
for (k=0; k<n; k++) {
|
|
1516
|
+
p1 = q1 + k*i1;
|
|
1517
|
+
p2 = q2 + k*i2;
|
|
1518
|
+
p3 = q3 + k*i3;
|
|
1519
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1520
|
+
}
|
|
1521
|
+
}
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
static void
|
|
1525
|
+
ca_bincmp_gt_uint32_t (ca_size_t n, boolean8_t *m,
|
|
1526
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1527
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1528
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1529
|
+
double tol)
|
|
1530
|
+
{
|
|
1531
|
+
uint32_t *q1 = (uint32_t *) ptr1, *q2 = (uint32_t *) ptr2;
|
|
1532
|
+
uint32_t *p1 = q1, *p2 = q2;
|
|
1533
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1534
|
+
boolean8_t *p3 = q3;
|
|
1535
|
+
ca_size_t k;
|
|
1536
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1537
|
+
(void) tol;
|
|
1538
|
+
if ( m ) {
|
|
1539
|
+
boolean8_t *pm;
|
|
1540
|
+
for (k=0; k<n; k++) {
|
|
1541
|
+
pm = m + k;
|
|
1542
|
+
if ( ! *pm ) {
|
|
1543
|
+
p1 = q1 + k*i1;
|
|
1544
|
+
p2 = q2 + k*i2;
|
|
1545
|
+
p3 = q3 + k*i3;
|
|
1546
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1547
|
+
}
|
|
1548
|
+
}
|
|
1549
|
+
} else {
|
|
1550
|
+
for (k=0; k<n; k++) {
|
|
1551
|
+
p1 = q1 + k*i1;
|
|
1552
|
+
p2 = q2 + k*i2;
|
|
1553
|
+
p3 = q3 + k*i3;
|
|
1554
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1555
|
+
}
|
|
1556
|
+
}
|
|
1557
|
+
}
|
|
1558
|
+
|
|
1559
|
+
static void
|
|
1560
|
+
ca_bincmp_gt_int64_t (ca_size_t n, boolean8_t *m,
|
|
1561
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1562
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1563
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1564
|
+
double tol)
|
|
1565
|
+
{
|
|
1566
|
+
int64_t *q1 = (int64_t *) ptr1, *q2 = (int64_t *) ptr2;
|
|
1567
|
+
int64_t *p1 = q1, *p2 = q2;
|
|
1568
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1569
|
+
boolean8_t *p3 = q3;
|
|
1570
|
+
ca_size_t k;
|
|
1571
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1572
|
+
(void) tol;
|
|
1573
|
+
if ( m ) {
|
|
1574
|
+
boolean8_t *pm;
|
|
1575
|
+
for (k=0; k<n; k++) {
|
|
1576
|
+
pm = m + k;
|
|
1577
|
+
if ( ! *pm ) {
|
|
1578
|
+
p1 = q1 + k*i1;
|
|
1579
|
+
p2 = q2 + k*i2;
|
|
1580
|
+
p3 = q3 + k*i3;
|
|
1581
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
} else {
|
|
1585
|
+
for (k=0; k<n; k++) {
|
|
1586
|
+
p1 = q1 + k*i1;
|
|
1587
|
+
p2 = q2 + k*i2;
|
|
1588
|
+
p3 = q3 + k*i3;
|
|
1589
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
static void
|
|
1595
|
+
ca_bincmp_gt_uint64_t (ca_size_t n, boolean8_t *m,
|
|
1596
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1597
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1598
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1599
|
+
double tol)
|
|
1600
|
+
{
|
|
1601
|
+
uint64_t *q1 = (uint64_t *) ptr1, *q2 = (uint64_t *) ptr2;
|
|
1602
|
+
uint64_t *p1 = q1, *p2 = q2;
|
|
1603
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1604
|
+
boolean8_t *p3 = q3;
|
|
1605
|
+
ca_size_t k;
|
|
1606
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1607
|
+
(void) tol;
|
|
1608
|
+
if ( m ) {
|
|
1609
|
+
boolean8_t *pm;
|
|
1610
|
+
for (k=0; k<n; k++) {
|
|
1611
|
+
pm = m + k;
|
|
1612
|
+
if ( ! *pm ) {
|
|
1613
|
+
p1 = q1 + k*i1;
|
|
1614
|
+
p2 = q2 + k*i2;
|
|
1615
|
+
p3 = q3 + k*i3;
|
|
1616
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1617
|
+
}
|
|
1618
|
+
}
|
|
1619
|
+
} else {
|
|
1620
|
+
for (k=0; k<n; k++) {
|
|
1621
|
+
p1 = q1 + k*i1;
|
|
1622
|
+
p2 = q2 + k*i2;
|
|
1623
|
+
p3 = q3 + k*i3;
|
|
1624
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
static void
|
|
1630
|
+
ca_bincmp_gt_float32_t (ca_size_t n, boolean8_t *m,
|
|
1631
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1632
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1633
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1634
|
+
double tol)
|
|
1635
|
+
{
|
|
1636
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
1637
|
+
float *p1 = q1, *p2 = q2;
|
|
1638
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1639
|
+
boolean8_t *p3 = q3;
|
|
1640
|
+
ca_size_t k;
|
|
1641
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1642
|
+
(void) tol;
|
|
1643
|
+
if ( m ) {
|
|
1644
|
+
boolean8_t *pm;
|
|
1645
|
+
for (k=0; k<n; k++) {
|
|
1646
|
+
pm = m + k;
|
|
1647
|
+
if ( ! *pm ) {
|
|
1648
|
+
p1 = q1 + k*i1;
|
|
1649
|
+
p2 = q2 + k*i2;
|
|
1650
|
+
p3 = q3 + k*i3;
|
|
1651
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1652
|
+
}
|
|
1653
|
+
}
|
|
1654
|
+
} else {
|
|
1655
|
+
for (k=0; k<n; k++) {
|
|
1656
|
+
p1 = q1 + k*i1;
|
|
1657
|
+
p2 = q2 + k*i2;
|
|
1658
|
+
p3 = q3 + k*i3;
|
|
1659
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1660
|
+
}
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1664
|
+
static void
|
|
1665
|
+
ca_bincmp_gt_float64_t (ca_size_t n, boolean8_t *m,
|
|
1666
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1667
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1668
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1669
|
+
double tol)
|
|
1670
|
+
{
|
|
1671
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
1672
|
+
double *p1 = q1, *p2 = q2;
|
|
1673
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1674
|
+
boolean8_t *p3 = q3;
|
|
1675
|
+
ca_size_t k;
|
|
1676
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1677
|
+
(void) tol;
|
|
1678
|
+
if ( m ) {
|
|
1679
|
+
boolean8_t *pm;
|
|
1680
|
+
for (k=0; k<n; k++) {
|
|
1681
|
+
pm = m + k;
|
|
1682
|
+
if ( ! *pm ) {
|
|
1683
|
+
p1 = q1 + k*i1;
|
|
1684
|
+
p2 = q2 + k*i2;
|
|
1685
|
+
p3 = q3 + k*i3;
|
|
1686
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1689
|
+
} else {
|
|
1690
|
+
for (k=0; k<n; k++) {
|
|
1691
|
+
p1 = q1 + k*i1;
|
|
1692
|
+
p2 = q2 + k*i2;
|
|
1693
|
+
p3 = q3 + k*i3;
|
|
1694
|
+
{ (*p3) = ( (*p1) > (*p2) ); }
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
static void
|
|
1700
|
+
ca_bincmp_gt_VALUE (ca_size_t n, boolean8_t *m,
|
|
1701
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1702
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1703
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1704
|
+
double tol)
|
|
1705
|
+
{
|
|
1706
|
+
VALUE *q1 = (VALUE *) ptr1, *q2 = (VALUE *) ptr2;
|
|
1707
|
+
VALUE *p1 = q1, *p2 = q2;
|
|
1708
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1709
|
+
boolean8_t *p3 = q3;
|
|
1710
|
+
ca_size_t k;
|
|
1711
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1712
|
+
(void) tol;
|
|
1713
|
+
if ( m ) {
|
|
1714
|
+
boolean8_t *pm;
|
|
1715
|
+
for (k=0; k<n; k++) {
|
|
1716
|
+
pm = m + k;
|
|
1717
|
+
if ( ! *pm ) {
|
|
1718
|
+
p1 = q1 + k*i1;
|
|
1719
|
+
p2 = q2 + k*i2;
|
|
1720
|
+
p3 = q3 + k*i3;
|
|
1721
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">"), 1, (*p2))) ? 1 : 0; }
|
|
1722
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
} else {
|
|
1725
|
+
for (k=0; k<n; k++) {
|
|
1726
|
+
p1 = q1 + k*i1;
|
|
1727
|
+
p2 = q2 + k*i2;
|
|
1728
|
+
p3 = q3 + k*i3;
|
|
1729
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">"), 1, (*p2))) ? 1 : 0; }
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
ca_bincmp_func_t
|
|
1735
|
+
ca_bincmp_gt[CA_NTYPE] = {
|
|
1736
|
+
ca_bincmp_gt_fixlen,
|
|
1737
|
+
ca_bincmp_gt_boolean8_t,
|
|
1738
|
+
ca_bincmp_gt_int8_t,
|
|
1739
|
+
ca_bincmp_gt_uint8_t,
|
|
1740
|
+
ca_bincmp_gt_int16_t,
|
|
1741
|
+
ca_bincmp_gt_uint16_t,
|
|
1742
|
+
ca_bincmp_gt_int32_t,
|
|
1743
|
+
ca_bincmp_gt_uint32_t,
|
|
1744
|
+
ca_bincmp_gt_int64_t,
|
|
1745
|
+
ca_bincmp_gt_uint64_t,
|
|
1746
|
+
ca_bincmp_gt_float32_t,
|
|
1747
|
+
ca_bincmp_gt_float64_t,
|
|
1748
|
+
ca_bincmp_not_implement,
|
|
1749
|
+
ca_bincmp_not_implement,
|
|
1750
|
+
ca_bincmp_not_implement,
|
|
1751
|
+
ca_bincmp_not_implement,
|
|
1752
|
+
ca_bincmp_gt_VALUE,
|
|
1753
|
+
};
|
|
1754
|
+
|
|
1755
|
+
VALUE rb_ca_gt (VALUE self, VALUE other)
|
|
1756
|
+
{
|
|
1757
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
1758
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("gt"));
|
|
1759
|
+
}
|
|
1760
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_gt, 0.0);
|
|
1761
|
+
}
|
|
1762
|
+
|
|
1763
|
+
/* ===== bincmp lt ============================================ */
|
|
1764
|
+
|
|
1765
|
+
static void
|
|
1766
|
+
ca_bincmp_lt_fixlen (ca_size_t n, boolean8_t *m,
|
|
1767
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1768
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1769
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1770
|
+
double tol)
|
|
1771
|
+
{
|
|
1772
|
+
char *q1 = ptr1, *q2 = ptr2;
|
|
1773
|
+
char *p1 = q1, *p2 = q2;
|
|
1774
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1775
|
+
boolean8_t *p3 = q3;
|
|
1776
|
+
ca_size_t s1 = b1*i1, s2 = b2*i2, s3 = b3*i3;
|
|
1777
|
+
ca_size_t k;
|
|
1778
|
+
(void) tol;
|
|
1779
|
+
if ( m ) {
|
|
1780
|
+
boolean8_t *pm;
|
|
1781
|
+
for (k=0; k<n; k++) {
|
|
1782
|
+
pm = m + k;
|
|
1783
|
+
if ( ! *pm ) {
|
|
1784
|
+
p1 = q1 + k*s1;
|
|
1785
|
+
p2 = q2 + k*s2;
|
|
1786
|
+
p3 = q3 + k*s3;
|
|
1787
|
+
{
|
|
1788
|
+
int cmp = memcmp(p1, p2, b1 < b2 ? b1 : b2);
|
|
1789
|
+
(*p3) = ( cmp < 0 || ( cmp == 0 && b1 < b2 ) );
|
|
1790
|
+
}
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
} else {
|
|
1794
|
+
for (k=0; k<n; k++) {
|
|
1795
|
+
p1 = q1 + k*s1;
|
|
1796
|
+
p2 = q2 + k*s2;
|
|
1797
|
+
p3 = q3 + k*s3;
|
|
1798
|
+
{
|
|
1799
|
+
int cmp = memcmp(p1, p2, b1 < b2 ? b1 : b2);
|
|
1800
|
+
(*p3) = ( cmp < 0 || ( cmp == 0 && b1 < b2 ) );
|
|
1801
|
+
}
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
static void
|
|
1807
|
+
ca_bincmp_lt_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
1808
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1809
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1810
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1811
|
+
double tol)
|
|
1812
|
+
{
|
|
1813
|
+
boolean8_t *q1 = (boolean8_t *) ptr1, *q2 = (boolean8_t *) ptr2;
|
|
1814
|
+
boolean8_t *p1 = q1, *p2 = q2;
|
|
1815
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1816
|
+
boolean8_t *p3 = q3;
|
|
1817
|
+
ca_size_t k;
|
|
1818
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1819
|
+
(void) tol;
|
|
1820
|
+
if ( m ) {
|
|
1821
|
+
boolean8_t *pm;
|
|
1822
|
+
for (k=0; k<n; k++) {
|
|
1823
|
+
pm = m + k;
|
|
1824
|
+
if ( ! *pm ) {
|
|
1825
|
+
p1 = q1 + k*i1;
|
|
1826
|
+
p2 = q2 + k*i2;
|
|
1827
|
+
p3 = q3 + k*i3;
|
|
1828
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1829
|
+
}
|
|
1830
|
+
}
|
|
1831
|
+
} else {
|
|
1832
|
+
for (k=0; k<n; k++) {
|
|
1833
|
+
p1 = q1 + k*i1;
|
|
1834
|
+
p2 = q2 + k*i2;
|
|
1835
|
+
p3 = q3 + k*i3;
|
|
1836
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1839
|
+
}
|
|
1840
|
+
|
|
1841
|
+
static void
|
|
1842
|
+
ca_bincmp_lt_int8_t (ca_size_t n, boolean8_t *m,
|
|
1843
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1844
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1845
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1846
|
+
double tol)
|
|
1847
|
+
{
|
|
1848
|
+
int8_t *q1 = (int8_t *) ptr1, *q2 = (int8_t *) ptr2;
|
|
1849
|
+
int8_t *p1 = q1, *p2 = q2;
|
|
1850
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1851
|
+
boolean8_t *p3 = q3;
|
|
1852
|
+
ca_size_t k;
|
|
1853
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1854
|
+
(void) tol;
|
|
1855
|
+
if ( m ) {
|
|
1856
|
+
boolean8_t *pm;
|
|
1857
|
+
for (k=0; k<n; k++) {
|
|
1858
|
+
pm = m + k;
|
|
1859
|
+
if ( ! *pm ) {
|
|
1860
|
+
p1 = q1 + k*i1;
|
|
1861
|
+
p2 = q2 + k*i2;
|
|
1862
|
+
p3 = q3 + k*i3;
|
|
1863
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1864
|
+
}
|
|
1865
|
+
}
|
|
1866
|
+
} else {
|
|
1867
|
+
for (k=0; k<n; k++) {
|
|
1868
|
+
p1 = q1 + k*i1;
|
|
1869
|
+
p2 = q2 + k*i2;
|
|
1870
|
+
p3 = q3 + k*i3;
|
|
1871
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1872
|
+
}
|
|
1873
|
+
}
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
static void
|
|
1877
|
+
ca_bincmp_lt_uint8_t (ca_size_t n, boolean8_t *m,
|
|
1878
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1879
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1880
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1881
|
+
double tol)
|
|
1882
|
+
{
|
|
1883
|
+
uint8_t *q1 = (uint8_t *) ptr1, *q2 = (uint8_t *) ptr2;
|
|
1884
|
+
uint8_t *p1 = q1, *p2 = q2;
|
|
1885
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1886
|
+
boolean8_t *p3 = q3;
|
|
1887
|
+
ca_size_t k;
|
|
1888
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1889
|
+
(void) tol;
|
|
1890
|
+
if ( m ) {
|
|
1891
|
+
boolean8_t *pm;
|
|
1892
|
+
for (k=0; k<n; k++) {
|
|
1893
|
+
pm = m + k;
|
|
1894
|
+
if ( ! *pm ) {
|
|
1895
|
+
p1 = q1 + k*i1;
|
|
1896
|
+
p2 = q2 + k*i2;
|
|
1897
|
+
p3 = q3 + k*i3;
|
|
1898
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1899
|
+
}
|
|
1900
|
+
}
|
|
1901
|
+
} else {
|
|
1902
|
+
for (k=0; k<n; k++) {
|
|
1903
|
+
p1 = q1 + k*i1;
|
|
1904
|
+
p2 = q2 + k*i2;
|
|
1905
|
+
p3 = q3 + k*i3;
|
|
1906
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1909
|
+
}
|
|
1910
|
+
|
|
1911
|
+
static void
|
|
1912
|
+
ca_bincmp_lt_int16_t (ca_size_t n, boolean8_t *m,
|
|
1913
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1914
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1915
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1916
|
+
double tol)
|
|
1917
|
+
{
|
|
1918
|
+
int16_t *q1 = (int16_t *) ptr1, *q2 = (int16_t *) ptr2;
|
|
1919
|
+
int16_t *p1 = q1, *p2 = q2;
|
|
1920
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1921
|
+
boolean8_t *p3 = q3;
|
|
1922
|
+
ca_size_t k;
|
|
1923
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1924
|
+
(void) tol;
|
|
1925
|
+
if ( m ) {
|
|
1926
|
+
boolean8_t *pm;
|
|
1927
|
+
for (k=0; k<n; k++) {
|
|
1928
|
+
pm = m + k;
|
|
1929
|
+
if ( ! *pm ) {
|
|
1930
|
+
p1 = q1 + k*i1;
|
|
1931
|
+
p2 = q2 + k*i2;
|
|
1932
|
+
p3 = q3 + k*i3;
|
|
1933
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1934
|
+
}
|
|
1935
|
+
}
|
|
1936
|
+
} else {
|
|
1937
|
+
for (k=0; k<n; k++) {
|
|
1938
|
+
p1 = q1 + k*i1;
|
|
1939
|
+
p2 = q2 + k*i2;
|
|
1940
|
+
p3 = q3 + k*i3;
|
|
1941
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1942
|
+
}
|
|
1943
|
+
}
|
|
1944
|
+
}
|
|
1945
|
+
|
|
1946
|
+
static void
|
|
1947
|
+
ca_bincmp_lt_uint16_t (ca_size_t n, boolean8_t *m,
|
|
1948
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1949
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1950
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1951
|
+
double tol)
|
|
1952
|
+
{
|
|
1953
|
+
uint16_t *q1 = (uint16_t *) ptr1, *q2 = (uint16_t *) ptr2;
|
|
1954
|
+
uint16_t *p1 = q1, *p2 = q2;
|
|
1955
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1956
|
+
boolean8_t *p3 = q3;
|
|
1957
|
+
ca_size_t k;
|
|
1958
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1959
|
+
(void) tol;
|
|
1960
|
+
if ( m ) {
|
|
1961
|
+
boolean8_t *pm;
|
|
1962
|
+
for (k=0; k<n; k++) {
|
|
1963
|
+
pm = m + k;
|
|
1964
|
+
if ( ! *pm ) {
|
|
1965
|
+
p1 = q1 + k*i1;
|
|
1966
|
+
p2 = q2 + k*i2;
|
|
1967
|
+
p3 = q3 + k*i3;
|
|
1968
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1969
|
+
}
|
|
1970
|
+
}
|
|
1971
|
+
} else {
|
|
1972
|
+
for (k=0; k<n; k++) {
|
|
1973
|
+
p1 = q1 + k*i1;
|
|
1974
|
+
p2 = q2 + k*i2;
|
|
1975
|
+
p3 = q3 + k*i3;
|
|
1976
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
1977
|
+
}
|
|
1978
|
+
}
|
|
1979
|
+
}
|
|
1980
|
+
|
|
1981
|
+
static void
|
|
1982
|
+
ca_bincmp_lt_int32_t (ca_size_t n, boolean8_t *m,
|
|
1983
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
1984
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
1985
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
1986
|
+
double tol)
|
|
1987
|
+
{
|
|
1988
|
+
int32_t *q1 = (int32_t *) ptr1, *q2 = (int32_t *) ptr2;
|
|
1989
|
+
int32_t *p1 = q1, *p2 = q2;
|
|
1990
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
1991
|
+
boolean8_t *p3 = q3;
|
|
1992
|
+
ca_size_t k;
|
|
1993
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
1994
|
+
(void) tol;
|
|
1995
|
+
if ( m ) {
|
|
1996
|
+
boolean8_t *pm;
|
|
1997
|
+
for (k=0; k<n; k++) {
|
|
1998
|
+
pm = m + k;
|
|
1999
|
+
if ( ! *pm ) {
|
|
2000
|
+
p1 = q1 + k*i1;
|
|
2001
|
+
p2 = q2 + k*i2;
|
|
2002
|
+
p3 = q3 + k*i3;
|
|
2003
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2004
|
+
}
|
|
2005
|
+
}
|
|
2006
|
+
} else {
|
|
2007
|
+
for (k=0; k<n; k++) {
|
|
2008
|
+
p1 = q1 + k*i1;
|
|
2009
|
+
p2 = q2 + k*i2;
|
|
2010
|
+
p3 = q3 + k*i3;
|
|
2011
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
}
|
|
2015
|
+
|
|
2016
|
+
static void
|
|
2017
|
+
ca_bincmp_lt_uint32_t (ca_size_t n, boolean8_t *m,
|
|
2018
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2019
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2020
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2021
|
+
double tol)
|
|
2022
|
+
{
|
|
2023
|
+
uint32_t *q1 = (uint32_t *) ptr1, *q2 = (uint32_t *) ptr2;
|
|
2024
|
+
uint32_t *p1 = q1, *p2 = q2;
|
|
2025
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2026
|
+
boolean8_t *p3 = q3;
|
|
2027
|
+
ca_size_t k;
|
|
2028
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2029
|
+
(void) tol;
|
|
2030
|
+
if ( m ) {
|
|
2031
|
+
boolean8_t *pm;
|
|
2032
|
+
for (k=0; k<n; k++) {
|
|
2033
|
+
pm = m + k;
|
|
2034
|
+
if ( ! *pm ) {
|
|
2035
|
+
p1 = q1 + k*i1;
|
|
2036
|
+
p2 = q2 + k*i2;
|
|
2037
|
+
p3 = q3 + k*i3;
|
|
2038
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2039
|
+
}
|
|
2040
|
+
}
|
|
2041
|
+
} else {
|
|
2042
|
+
for (k=0; k<n; k++) {
|
|
2043
|
+
p1 = q1 + k*i1;
|
|
2044
|
+
p2 = q2 + k*i2;
|
|
2045
|
+
p3 = q3 + k*i3;
|
|
2046
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2047
|
+
}
|
|
2048
|
+
}
|
|
2049
|
+
}
|
|
2050
|
+
|
|
2051
|
+
static void
|
|
2052
|
+
ca_bincmp_lt_int64_t (ca_size_t n, boolean8_t *m,
|
|
2053
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2054
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2055
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2056
|
+
double tol)
|
|
2057
|
+
{
|
|
2058
|
+
int64_t *q1 = (int64_t *) ptr1, *q2 = (int64_t *) ptr2;
|
|
2059
|
+
int64_t *p1 = q1, *p2 = q2;
|
|
2060
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2061
|
+
boolean8_t *p3 = q3;
|
|
2062
|
+
ca_size_t k;
|
|
2063
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2064
|
+
(void) tol;
|
|
2065
|
+
if ( m ) {
|
|
2066
|
+
boolean8_t *pm;
|
|
2067
|
+
for (k=0; k<n; k++) {
|
|
2068
|
+
pm = m + k;
|
|
2069
|
+
if ( ! *pm ) {
|
|
2070
|
+
p1 = q1 + k*i1;
|
|
2071
|
+
p2 = q2 + k*i2;
|
|
2072
|
+
p3 = q3 + k*i3;
|
|
2073
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2074
|
+
}
|
|
2075
|
+
}
|
|
2076
|
+
} else {
|
|
2077
|
+
for (k=0; k<n; k++) {
|
|
2078
|
+
p1 = q1 + k*i1;
|
|
2079
|
+
p2 = q2 + k*i2;
|
|
2080
|
+
p3 = q3 + k*i3;
|
|
2081
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2082
|
+
}
|
|
2083
|
+
}
|
|
2084
|
+
}
|
|
2085
|
+
|
|
2086
|
+
static void
|
|
2087
|
+
ca_bincmp_lt_uint64_t (ca_size_t n, boolean8_t *m,
|
|
2088
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2089
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2090
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2091
|
+
double tol)
|
|
2092
|
+
{
|
|
2093
|
+
uint64_t *q1 = (uint64_t *) ptr1, *q2 = (uint64_t *) ptr2;
|
|
2094
|
+
uint64_t *p1 = q1, *p2 = q2;
|
|
2095
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2096
|
+
boolean8_t *p3 = q3;
|
|
2097
|
+
ca_size_t k;
|
|
2098
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2099
|
+
(void) tol;
|
|
2100
|
+
if ( m ) {
|
|
2101
|
+
boolean8_t *pm;
|
|
2102
|
+
for (k=0; k<n; k++) {
|
|
2103
|
+
pm = m + k;
|
|
2104
|
+
if ( ! *pm ) {
|
|
2105
|
+
p1 = q1 + k*i1;
|
|
2106
|
+
p2 = q2 + k*i2;
|
|
2107
|
+
p3 = q3 + k*i3;
|
|
2108
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2109
|
+
}
|
|
2110
|
+
}
|
|
2111
|
+
} else {
|
|
2112
|
+
for (k=0; k<n; k++) {
|
|
2113
|
+
p1 = q1 + k*i1;
|
|
2114
|
+
p2 = q2 + k*i2;
|
|
2115
|
+
p3 = q3 + k*i3;
|
|
2116
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2117
|
+
}
|
|
2118
|
+
}
|
|
2119
|
+
}
|
|
2120
|
+
|
|
2121
|
+
static void
|
|
2122
|
+
ca_bincmp_lt_float32_t (ca_size_t n, boolean8_t *m,
|
|
2123
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2124
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2125
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2126
|
+
double tol)
|
|
2127
|
+
{
|
|
2128
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
2129
|
+
float *p1 = q1, *p2 = q2;
|
|
2130
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2131
|
+
boolean8_t *p3 = q3;
|
|
2132
|
+
ca_size_t k;
|
|
2133
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2134
|
+
(void) tol;
|
|
2135
|
+
if ( m ) {
|
|
2136
|
+
boolean8_t *pm;
|
|
2137
|
+
for (k=0; k<n; k++) {
|
|
2138
|
+
pm = m + k;
|
|
2139
|
+
if ( ! *pm ) {
|
|
2140
|
+
p1 = q1 + k*i1;
|
|
2141
|
+
p2 = q2 + k*i2;
|
|
2142
|
+
p3 = q3 + k*i3;
|
|
2143
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2144
|
+
}
|
|
2145
|
+
}
|
|
2146
|
+
} else {
|
|
2147
|
+
for (k=0; k<n; k++) {
|
|
2148
|
+
p1 = q1 + k*i1;
|
|
2149
|
+
p2 = q2 + k*i2;
|
|
2150
|
+
p3 = q3 + k*i3;
|
|
2151
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2152
|
+
}
|
|
2153
|
+
}
|
|
2154
|
+
}
|
|
2155
|
+
|
|
2156
|
+
static void
|
|
2157
|
+
ca_bincmp_lt_float64_t (ca_size_t n, boolean8_t *m,
|
|
2158
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2159
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2160
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2161
|
+
double tol)
|
|
2162
|
+
{
|
|
2163
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
2164
|
+
double *p1 = q1, *p2 = q2;
|
|
2165
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2166
|
+
boolean8_t *p3 = q3;
|
|
2167
|
+
ca_size_t k;
|
|
2168
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2169
|
+
(void) tol;
|
|
2170
|
+
if ( m ) {
|
|
2171
|
+
boolean8_t *pm;
|
|
2172
|
+
for (k=0; k<n; k++) {
|
|
2173
|
+
pm = m + k;
|
|
2174
|
+
if ( ! *pm ) {
|
|
2175
|
+
p1 = q1 + k*i1;
|
|
2176
|
+
p2 = q2 + k*i2;
|
|
2177
|
+
p3 = q3 + k*i3;
|
|
2178
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2179
|
+
}
|
|
2180
|
+
}
|
|
2181
|
+
} else {
|
|
2182
|
+
for (k=0; k<n; k++) {
|
|
2183
|
+
p1 = q1 + k*i1;
|
|
2184
|
+
p2 = q2 + k*i2;
|
|
2185
|
+
p3 = q3 + k*i3;
|
|
2186
|
+
{ (*p3) = ( (*p1) < (*p2) ); }
|
|
2187
|
+
}
|
|
2188
|
+
}
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2191
|
+
static void
|
|
2192
|
+
ca_bincmp_lt_VALUE (ca_size_t n, boolean8_t *m,
|
|
2193
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2194
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2195
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2196
|
+
double tol)
|
|
2197
|
+
{
|
|
2198
|
+
VALUE *q1 = (VALUE *) ptr1, *q2 = (VALUE *) ptr2;
|
|
2199
|
+
VALUE *p1 = q1, *p2 = q2;
|
|
2200
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2201
|
+
boolean8_t *p3 = q3;
|
|
2202
|
+
ca_size_t k;
|
|
2203
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2204
|
+
(void) tol;
|
|
2205
|
+
if ( m ) {
|
|
2206
|
+
boolean8_t *pm;
|
|
2207
|
+
for (k=0; k<n; k++) {
|
|
2208
|
+
pm = m + k;
|
|
2209
|
+
if ( ! *pm ) {
|
|
2210
|
+
p1 = q1 + k*i1;
|
|
2211
|
+
p2 = q2 + k*i2;
|
|
2212
|
+
p3 = q3 + k*i3;
|
|
2213
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<"), 1, (*p2))) ? 1 : 0; }
|
|
2214
|
+
}
|
|
2215
|
+
}
|
|
2216
|
+
} else {
|
|
2217
|
+
for (k=0; k<n; k++) {
|
|
2218
|
+
p1 = q1 + k*i1;
|
|
2219
|
+
p2 = q2 + k*i2;
|
|
2220
|
+
p3 = q3 + k*i3;
|
|
2221
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<"), 1, (*p2))) ? 1 : 0; }
|
|
2222
|
+
}
|
|
2223
|
+
}
|
|
2224
|
+
}
|
|
2225
|
+
|
|
2226
|
+
ca_bincmp_func_t
|
|
2227
|
+
ca_bincmp_lt[CA_NTYPE] = {
|
|
2228
|
+
ca_bincmp_lt_fixlen,
|
|
2229
|
+
ca_bincmp_lt_boolean8_t,
|
|
2230
|
+
ca_bincmp_lt_int8_t,
|
|
2231
|
+
ca_bincmp_lt_uint8_t,
|
|
2232
|
+
ca_bincmp_lt_int16_t,
|
|
2233
|
+
ca_bincmp_lt_uint16_t,
|
|
2234
|
+
ca_bincmp_lt_int32_t,
|
|
2235
|
+
ca_bincmp_lt_uint32_t,
|
|
2236
|
+
ca_bincmp_lt_int64_t,
|
|
2237
|
+
ca_bincmp_lt_uint64_t,
|
|
2238
|
+
ca_bincmp_lt_float32_t,
|
|
2239
|
+
ca_bincmp_lt_float64_t,
|
|
2240
|
+
ca_bincmp_not_implement,
|
|
2241
|
+
ca_bincmp_not_implement,
|
|
2242
|
+
ca_bincmp_not_implement,
|
|
2243
|
+
ca_bincmp_not_implement,
|
|
2244
|
+
ca_bincmp_lt_VALUE,
|
|
2245
|
+
};
|
|
2246
|
+
|
|
2247
|
+
VALUE rb_ca_lt (VALUE self, VALUE other)
|
|
2248
|
+
{
|
|
2249
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
2250
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("lt"));
|
|
2251
|
+
}
|
|
2252
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_lt, 0.0);
|
|
2253
|
+
}
|
|
2254
|
+
|
|
2255
|
+
/* ===== bincmp ge ============================================ */
|
|
2256
|
+
|
|
2257
|
+
static void
|
|
2258
|
+
ca_bincmp_ge_fixlen (ca_size_t n, boolean8_t *m,
|
|
2259
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2260
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2261
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2262
|
+
double tol)
|
|
2263
|
+
{
|
|
2264
|
+
char *q1 = ptr1, *q2 = ptr2;
|
|
2265
|
+
char *p1 = q1, *p2 = q2;
|
|
2266
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2267
|
+
boolean8_t *p3 = q3;
|
|
2268
|
+
ca_size_t s1 = b1*i1, s2 = b2*i2, s3 = b3*i3;
|
|
2269
|
+
ca_size_t k;
|
|
2270
|
+
(void) tol;
|
|
2271
|
+
if ( m ) {
|
|
2272
|
+
boolean8_t *pm;
|
|
2273
|
+
for (k=0; k<n; k++) {
|
|
2274
|
+
pm = m + k;
|
|
2275
|
+
if ( ! *pm ) {
|
|
2276
|
+
p1 = q1 + k*s1;
|
|
2277
|
+
p2 = q2 + k*s2;
|
|
2278
|
+
p3 = q3 + k*s3;
|
|
2279
|
+
{
|
|
2280
|
+
int cmp = memcmp(p1, p2, b1 < b2 ? b1 : b2);
|
|
2281
|
+
(*p3) = ( cmp > 0 || ( cmp == 0 && b1 >= b2 ) );
|
|
2282
|
+
}
|
|
2283
|
+
}
|
|
2284
|
+
}
|
|
2285
|
+
} else {
|
|
2286
|
+
for (k=0; k<n; k++) {
|
|
2287
|
+
p1 = q1 + k*s1;
|
|
2288
|
+
p2 = q2 + k*s2;
|
|
2289
|
+
p3 = q3 + k*s3;
|
|
2290
|
+
{
|
|
2291
|
+
int cmp = memcmp(p1, p2, b1 < b2 ? b1 : b2);
|
|
2292
|
+
(*p3) = ( cmp > 0 || ( cmp == 0 && b1 >= b2 ) );
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
}
|
|
2296
|
+
}
|
|
2297
|
+
|
|
2298
|
+
static void
|
|
2299
|
+
ca_bincmp_ge_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
2300
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2301
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2302
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2303
|
+
double tol)
|
|
2304
|
+
{
|
|
2305
|
+
boolean8_t *q1 = (boolean8_t *) ptr1, *q2 = (boolean8_t *) ptr2;
|
|
2306
|
+
boolean8_t *p1 = q1, *p2 = q2;
|
|
2307
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2308
|
+
boolean8_t *p3 = q3;
|
|
2309
|
+
ca_size_t k;
|
|
2310
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2311
|
+
(void) tol;
|
|
2312
|
+
if ( m ) {
|
|
2313
|
+
boolean8_t *pm;
|
|
2314
|
+
for (k=0; k<n; k++) {
|
|
2315
|
+
pm = m + k;
|
|
2316
|
+
if ( ! *pm ) {
|
|
2317
|
+
p1 = q1 + k*i1;
|
|
2318
|
+
p2 = q2 + k*i2;
|
|
2319
|
+
p3 = q3 + k*i3;
|
|
2320
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2321
|
+
}
|
|
2322
|
+
}
|
|
2323
|
+
} else {
|
|
2324
|
+
for (k=0; k<n; k++) {
|
|
2325
|
+
p1 = q1 + k*i1;
|
|
2326
|
+
p2 = q2 + k*i2;
|
|
2327
|
+
p3 = q3 + k*i3;
|
|
2328
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2329
|
+
}
|
|
2330
|
+
}
|
|
2331
|
+
}
|
|
2332
|
+
|
|
2333
|
+
static void
|
|
2334
|
+
ca_bincmp_ge_int8_t (ca_size_t n, boolean8_t *m,
|
|
2335
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2336
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2337
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2338
|
+
double tol)
|
|
2339
|
+
{
|
|
2340
|
+
int8_t *q1 = (int8_t *) ptr1, *q2 = (int8_t *) ptr2;
|
|
2341
|
+
int8_t *p1 = q1, *p2 = q2;
|
|
2342
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2343
|
+
boolean8_t *p3 = q3;
|
|
2344
|
+
ca_size_t k;
|
|
2345
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2346
|
+
(void) tol;
|
|
2347
|
+
if ( m ) {
|
|
2348
|
+
boolean8_t *pm;
|
|
2349
|
+
for (k=0; k<n; k++) {
|
|
2350
|
+
pm = m + k;
|
|
2351
|
+
if ( ! *pm ) {
|
|
2352
|
+
p1 = q1 + k*i1;
|
|
2353
|
+
p2 = q2 + k*i2;
|
|
2354
|
+
p3 = q3 + k*i3;
|
|
2355
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2356
|
+
}
|
|
2357
|
+
}
|
|
2358
|
+
} else {
|
|
2359
|
+
for (k=0; k<n; k++) {
|
|
2360
|
+
p1 = q1 + k*i1;
|
|
2361
|
+
p2 = q2 + k*i2;
|
|
2362
|
+
p3 = q3 + k*i3;
|
|
2363
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2364
|
+
}
|
|
2365
|
+
}
|
|
2366
|
+
}
|
|
2367
|
+
|
|
2368
|
+
static void
|
|
2369
|
+
ca_bincmp_ge_uint8_t (ca_size_t n, boolean8_t *m,
|
|
2370
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2371
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2372
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2373
|
+
double tol)
|
|
2374
|
+
{
|
|
2375
|
+
uint8_t *q1 = (uint8_t *) ptr1, *q2 = (uint8_t *) ptr2;
|
|
2376
|
+
uint8_t *p1 = q1, *p2 = q2;
|
|
2377
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2378
|
+
boolean8_t *p3 = q3;
|
|
2379
|
+
ca_size_t k;
|
|
2380
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2381
|
+
(void) tol;
|
|
2382
|
+
if ( m ) {
|
|
2383
|
+
boolean8_t *pm;
|
|
2384
|
+
for (k=0; k<n; k++) {
|
|
2385
|
+
pm = m + k;
|
|
2386
|
+
if ( ! *pm ) {
|
|
2387
|
+
p1 = q1 + k*i1;
|
|
2388
|
+
p2 = q2 + k*i2;
|
|
2389
|
+
p3 = q3 + k*i3;
|
|
2390
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2391
|
+
}
|
|
2392
|
+
}
|
|
2393
|
+
} else {
|
|
2394
|
+
for (k=0; k<n; k++) {
|
|
2395
|
+
p1 = q1 + k*i1;
|
|
2396
|
+
p2 = q2 + k*i2;
|
|
2397
|
+
p3 = q3 + k*i3;
|
|
2398
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2399
|
+
}
|
|
2400
|
+
}
|
|
2401
|
+
}
|
|
2402
|
+
|
|
2403
|
+
static void
|
|
2404
|
+
ca_bincmp_ge_int16_t (ca_size_t n, boolean8_t *m,
|
|
2405
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2406
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2407
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2408
|
+
double tol)
|
|
2409
|
+
{
|
|
2410
|
+
int16_t *q1 = (int16_t *) ptr1, *q2 = (int16_t *) ptr2;
|
|
2411
|
+
int16_t *p1 = q1, *p2 = q2;
|
|
2412
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2413
|
+
boolean8_t *p3 = q3;
|
|
2414
|
+
ca_size_t k;
|
|
2415
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2416
|
+
(void) tol;
|
|
2417
|
+
if ( m ) {
|
|
2418
|
+
boolean8_t *pm;
|
|
2419
|
+
for (k=0; k<n; k++) {
|
|
2420
|
+
pm = m + k;
|
|
2421
|
+
if ( ! *pm ) {
|
|
2422
|
+
p1 = q1 + k*i1;
|
|
2423
|
+
p2 = q2 + k*i2;
|
|
2424
|
+
p3 = q3 + k*i3;
|
|
2425
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2426
|
+
}
|
|
2427
|
+
}
|
|
2428
|
+
} else {
|
|
2429
|
+
for (k=0; k<n; k++) {
|
|
2430
|
+
p1 = q1 + k*i1;
|
|
2431
|
+
p2 = q2 + k*i2;
|
|
2432
|
+
p3 = q3 + k*i3;
|
|
2433
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2434
|
+
}
|
|
2435
|
+
}
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2438
|
+
static void
|
|
2439
|
+
ca_bincmp_ge_uint16_t (ca_size_t n, boolean8_t *m,
|
|
2440
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2441
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2442
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2443
|
+
double tol)
|
|
2444
|
+
{
|
|
2445
|
+
uint16_t *q1 = (uint16_t *) ptr1, *q2 = (uint16_t *) ptr2;
|
|
2446
|
+
uint16_t *p1 = q1, *p2 = q2;
|
|
2447
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2448
|
+
boolean8_t *p3 = q3;
|
|
2449
|
+
ca_size_t k;
|
|
2450
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2451
|
+
(void) tol;
|
|
2452
|
+
if ( m ) {
|
|
2453
|
+
boolean8_t *pm;
|
|
2454
|
+
for (k=0; k<n; k++) {
|
|
2455
|
+
pm = m + k;
|
|
2456
|
+
if ( ! *pm ) {
|
|
2457
|
+
p1 = q1 + k*i1;
|
|
2458
|
+
p2 = q2 + k*i2;
|
|
2459
|
+
p3 = q3 + k*i3;
|
|
2460
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2461
|
+
}
|
|
2462
|
+
}
|
|
2463
|
+
} else {
|
|
2464
|
+
for (k=0; k<n; k++) {
|
|
2465
|
+
p1 = q1 + k*i1;
|
|
2466
|
+
p2 = q2 + k*i2;
|
|
2467
|
+
p3 = q3 + k*i3;
|
|
2468
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2469
|
+
}
|
|
2470
|
+
}
|
|
2471
|
+
}
|
|
2472
|
+
|
|
2473
|
+
static void
|
|
2474
|
+
ca_bincmp_ge_int32_t (ca_size_t n, boolean8_t *m,
|
|
2475
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2476
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2477
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2478
|
+
double tol)
|
|
2479
|
+
{
|
|
2480
|
+
int32_t *q1 = (int32_t *) ptr1, *q2 = (int32_t *) ptr2;
|
|
2481
|
+
int32_t *p1 = q1, *p2 = q2;
|
|
2482
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2483
|
+
boolean8_t *p3 = q3;
|
|
2484
|
+
ca_size_t k;
|
|
2485
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2486
|
+
(void) tol;
|
|
2487
|
+
if ( m ) {
|
|
2488
|
+
boolean8_t *pm;
|
|
2489
|
+
for (k=0; k<n; k++) {
|
|
2490
|
+
pm = m + k;
|
|
2491
|
+
if ( ! *pm ) {
|
|
2492
|
+
p1 = q1 + k*i1;
|
|
2493
|
+
p2 = q2 + k*i2;
|
|
2494
|
+
p3 = q3 + k*i3;
|
|
2495
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2496
|
+
}
|
|
2497
|
+
}
|
|
2498
|
+
} else {
|
|
2499
|
+
for (k=0; k<n; k++) {
|
|
2500
|
+
p1 = q1 + k*i1;
|
|
2501
|
+
p2 = q2 + k*i2;
|
|
2502
|
+
p3 = q3 + k*i3;
|
|
2503
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2504
|
+
}
|
|
2505
|
+
}
|
|
2506
|
+
}
|
|
2507
|
+
|
|
2508
|
+
static void
|
|
2509
|
+
ca_bincmp_ge_uint32_t (ca_size_t n, boolean8_t *m,
|
|
2510
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2511
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2512
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2513
|
+
double tol)
|
|
2514
|
+
{
|
|
2515
|
+
uint32_t *q1 = (uint32_t *) ptr1, *q2 = (uint32_t *) ptr2;
|
|
2516
|
+
uint32_t *p1 = q1, *p2 = q2;
|
|
2517
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2518
|
+
boolean8_t *p3 = q3;
|
|
2519
|
+
ca_size_t k;
|
|
2520
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2521
|
+
(void) tol;
|
|
2522
|
+
if ( m ) {
|
|
2523
|
+
boolean8_t *pm;
|
|
2524
|
+
for (k=0; k<n; k++) {
|
|
2525
|
+
pm = m + k;
|
|
2526
|
+
if ( ! *pm ) {
|
|
2527
|
+
p1 = q1 + k*i1;
|
|
2528
|
+
p2 = q2 + k*i2;
|
|
2529
|
+
p3 = q3 + k*i3;
|
|
2530
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2531
|
+
}
|
|
2532
|
+
}
|
|
2533
|
+
} else {
|
|
2534
|
+
for (k=0; k<n; k++) {
|
|
2535
|
+
p1 = q1 + k*i1;
|
|
2536
|
+
p2 = q2 + k*i2;
|
|
2537
|
+
p3 = q3 + k*i3;
|
|
2538
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2539
|
+
}
|
|
2540
|
+
}
|
|
2541
|
+
}
|
|
2542
|
+
|
|
2543
|
+
static void
|
|
2544
|
+
ca_bincmp_ge_int64_t (ca_size_t n, boolean8_t *m,
|
|
2545
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2546
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2547
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2548
|
+
double tol)
|
|
2549
|
+
{
|
|
2550
|
+
int64_t *q1 = (int64_t *) ptr1, *q2 = (int64_t *) ptr2;
|
|
2551
|
+
int64_t *p1 = q1, *p2 = q2;
|
|
2552
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2553
|
+
boolean8_t *p3 = q3;
|
|
2554
|
+
ca_size_t k;
|
|
2555
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2556
|
+
(void) tol;
|
|
2557
|
+
if ( m ) {
|
|
2558
|
+
boolean8_t *pm;
|
|
2559
|
+
for (k=0; k<n; k++) {
|
|
2560
|
+
pm = m + k;
|
|
2561
|
+
if ( ! *pm ) {
|
|
2562
|
+
p1 = q1 + k*i1;
|
|
2563
|
+
p2 = q2 + k*i2;
|
|
2564
|
+
p3 = q3 + k*i3;
|
|
2565
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2566
|
+
}
|
|
2567
|
+
}
|
|
2568
|
+
} else {
|
|
2569
|
+
for (k=0; k<n; k++) {
|
|
2570
|
+
p1 = q1 + k*i1;
|
|
2571
|
+
p2 = q2 + k*i2;
|
|
2572
|
+
p3 = q3 + k*i3;
|
|
2573
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2574
|
+
}
|
|
2575
|
+
}
|
|
2576
|
+
}
|
|
2577
|
+
|
|
2578
|
+
static void
|
|
2579
|
+
ca_bincmp_ge_uint64_t (ca_size_t n, boolean8_t *m,
|
|
2580
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2581
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2582
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2583
|
+
double tol)
|
|
2584
|
+
{
|
|
2585
|
+
uint64_t *q1 = (uint64_t *) ptr1, *q2 = (uint64_t *) ptr2;
|
|
2586
|
+
uint64_t *p1 = q1, *p2 = q2;
|
|
2587
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2588
|
+
boolean8_t *p3 = q3;
|
|
2589
|
+
ca_size_t k;
|
|
2590
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2591
|
+
(void) tol;
|
|
2592
|
+
if ( m ) {
|
|
2593
|
+
boolean8_t *pm;
|
|
2594
|
+
for (k=0; k<n; k++) {
|
|
2595
|
+
pm = m + k;
|
|
2596
|
+
if ( ! *pm ) {
|
|
2597
|
+
p1 = q1 + k*i1;
|
|
2598
|
+
p2 = q2 + k*i2;
|
|
2599
|
+
p3 = q3 + k*i3;
|
|
2600
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2601
|
+
}
|
|
2602
|
+
}
|
|
2603
|
+
} else {
|
|
2604
|
+
for (k=0; k<n; k++) {
|
|
2605
|
+
p1 = q1 + k*i1;
|
|
2606
|
+
p2 = q2 + k*i2;
|
|
2607
|
+
p3 = q3 + k*i3;
|
|
2608
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2609
|
+
}
|
|
2610
|
+
}
|
|
2611
|
+
}
|
|
2612
|
+
|
|
2613
|
+
static void
|
|
2614
|
+
ca_bincmp_ge_float32_t (ca_size_t n, boolean8_t *m,
|
|
2615
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2616
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2617
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2618
|
+
double tol)
|
|
2619
|
+
{
|
|
2620
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
2621
|
+
float *p1 = q1, *p2 = q2;
|
|
2622
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2623
|
+
boolean8_t *p3 = q3;
|
|
2624
|
+
ca_size_t k;
|
|
2625
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2626
|
+
(void) tol;
|
|
2627
|
+
if ( m ) {
|
|
2628
|
+
boolean8_t *pm;
|
|
2629
|
+
for (k=0; k<n; k++) {
|
|
2630
|
+
pm = m + k;
|
|
2631
|
+
if ( ! *pm ) {
|
|
2632
|
+
p1 = q1 + k*i1;
|
|
2633
|
+
p2 = q2 + k*i2;
|
|
2634
|
+
p3 = q3 + k*i3;
|
|
2635
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2636
|
+
}
|
|
2637
|
+
}
|
|
2638
|
+
} else {
|
|
2639
|
+
for (k=0; k<n; k++) {
|
|
2640
|
+
p1 = q1 + k*i1;
|
|
2641
|
+
p2 = q2 + k*i2;
|
|
2642
|
+
p3 = q3 + k*i3;
|
|
2643
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2644
|
+
}
|
|
2645
|
+
}
|
|
2646
|
+
}
|
|
2647
|
+
|
|
2648
|
+
static void
|
|
2649
|
+
ca_bincmp_ge_float64_t (ca_size_t n, boolean8_t *m,
|
|
2650
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2651
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2652
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2653
|
+
double tol)
|
|
2654
|
+
{
|
|
2655
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
2656
|
+
double *p1 = q1, *p2 = q2;
|
|
2657
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2658
|
+
boolean8_t *p3 = q3;
|
|
2659
|
+
ca_size_t k;
|
|
2660
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2661
|
+
(void) tol;
|
|
2662
|
+
if ( m ) {
|
|
2663
|
+
boolean8_t *pm;
|
|
2664
|
+
for (k=0; k<n; k++) {
|
|
2665
|
+
pm = m + k;
|
|
2666
|
+
if ( ! *pm ) {
|
|
2667
|
+
p1 = q1 + k*i1;
|
|
2668
|
+
p2 = q2 + k*i2;
|
|
2669
|
+
p3 = q3 + k*i3;
|
|
2670
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2671
|
+
}
|
|
2672
|
+
}
|
|
2673
|
+
} else {
|
|
2674
|
+
for (k=0; k<n; k++) {
|
|
2675
|
+
p1 = q1 + k*i1;
|
|
2676
|
+
p2 = q2 + k*i2;
|
|
2677
|
+
p3 = q3 + k*i3;
|
|
2678
|
+
{ (*p3) = ( (*p1) >= (*p2) ); }
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2681
|
+
}
|
|
2682
|
+
|
|
2683
|
+
static void
|
|
2684
|
+
ca_bincmp_ge_VALUE (ca_size_t n, boolean8_t *m,
|
|
2685
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2686
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2687
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2688
|
+
double tol)
|
|
2689
|
+
{
|
|
2690
|
+
VALUE *q1 = (VALUE *) ptr1, *q2 = (VALUE *) ptr2;
|
|
2691
|
+
VALUE *p1 = q1, *p2 = q2;
|
|
2692
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2693
|
+
boolean8_t *p3 = q3;
|
|
2694
|
+
ca_size_t k;
|
|
2695
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2696
|
+
(void) tol;
|
|
2697
|
+
if ( m ) {
|
|
2698
|
+
boolean8_t *pm;
|
|
2699
|
+
for (k=0; k<n; k++) {
|
|
2700
|
+
pm = m + k;
|
|
2701
|
+
if ( ! *pm ) {
|
|
2702
|
+
p1 = q1 + k*i1;
|
|
2703
|
+
p2 = q2 + k*i2;
|
|
2704
|
+
p3 = q3 + k*i3;
|
|
2705
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">="), 1, (*p2))) ? 1 : 0; }
|
|
2706
|
+
}
|
|
2707
|
+
}
|
|
2708
|
+
} else {
|
|
2709
|
+
for (k=0; k<n; k++) {
|
|
2710
|
+
p1 = q1 + k*i1;
|
|
2711
|
+
p2 = q2 + k*i2;
|
|
2712
|
+
p3 = q3 + k*i3;
|
|
2713
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern(">="), 1, (*p2))) ? 1 : 0; }
|
|
2714
|
+
}
|
|
2715
|
+
}
|
|
2716
|
+
}
|
|
2717
|
+
|
|
2718
|
+
ca_bincmp_func_t
|
|
2719
|
+
ca_bincmp_ge[CA_NTYPE] = {
|
|
2720
|
+
ca_bincmp_ge_fixlen,
|
|
2721
|
+
ca_bincmp_ge_boolean8_t,
|
|
2722
|
+
ca_bincmp_ge_int8_t,
|
|
2723
|
+
ca_bincmp_ge_uint8_t,
|
|
2724
|
+
ca_bincmp_ge_int16_t,
|
|
2725
|
+
ca_bincmp_ge_uint16_t,
|
|
2726
|
+
ca_bincmp_ge_int32_t,
|
|
2727
|
+
ca_bincmp_ge_uint32_t,
|
|
2728
|
+
ca_bincmp_ge_int64_t,
|
|
2729
|
+
ca_bincmp_ge_uint64_t,
|
|
2730
|
+
ca_bincmp_ge_float32_t,
|
|
2731
|
+
ca_bincmp_ge_float64_t,
|
|
2732
|
+
ca_bincmp_not_implement,
|
|
2733
|
+
ca_bincmp_not_implement,
|
|
2734
|
+
ca_bincmp_not_implement,
|
|
2735
|
+
ca_bincmp_not_implement,
|
|
2736
|
+
ca_bincmp_ge_VALUE,
|
|
2737
|
+
};
|
|
2738
|
+
|
|
2739
|
+
VALUE rb_ca_ge (VALUE self, VALUE other)
|
|
2740
|
+
{
|
|
2741
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
2742
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("ge"));
|
|
2743
|
+
}
|
|
2744
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_ge, 0.0);
|
|
2745
|
+
}
|
|
2746
|
+
|
|
2747
|
+
/* ===== bincmp le ============================================ */
|
|
2748
|
+
|
|
2749
|
+
static void
|
|
2750
|
+
ca_bincmp_le_fixlen (ca_size_t n, boolean8_t *m,
|
|
2751
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2752
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2753
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2754
|
+
double tol)
|
|
2755
|
+
{
|
|
2756
|
+
char *q1 = ptr1, *q2 = ptr2;
|
|
2757
|
+
char *p1 = q1, *p2 = q2;
|
|
2758
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2759
|
+
boolean8_t *p3 = q3;
|
|
2760
|
+
ca_size_t s1 = b1*i1, s2 = b2*i2, s3 = b3*i3;
|
|
2761
|
+
ca_size_t k;
|
|
2762
|
+
(void) tol;
|
|
2763
|
+
if ( m ) {
|
|
2764
|
+
boolean8_t *pm;
|
|
2765
|
+
for (k=0; k<n; k++) {
|
|
2766
|
+
pm = m + k;
|
|
2767
|
+
if ( ! *pm ) {
|
|
2768
|
+
p1 = q1 + k*s1;
|
|
2769
|
+
p2 = q2 + k*s2;
|
|
2770
|
+
p3 = q3 + k*s3;
|
|
2771
|
+
{
|
|
2772
|
+
int cmp = memcmp(p1, p2, b1 < b2 ? b1 : b2);
|
|
2773
|
+
(*p3) = ( cmp < 0 || ( cmp == 0 && b1 <= b2 ) );
|
|
2774
|
+
}
|
|
2775
|
+
}
|
|
2776
|
+
}
|
|
2777
|
+
} else {
|
|
2778
|
+
for (k=0; k<n; k++) {
|
|
2779
|
+
p1 = q1 + k*s1;
|
|
2780
|
+
p2 = q2 + k*s2;
|
|
2781
|
+
p3 = q3 + k*s3;
|
|
2782
|
+
{
|
|
2783
|
+
int cmp = memcmp(p1, p2, b1 < b2 ? b1 : b2);
|
|
2784
|
+
(*p3) = ( cmp < 0 || ( cmp == 0 && b1 <= b2 ) );
|
|
2785
|
+
}
|
|
2786
|
+
}
|
|
2787
|
+
}
|
|
2788
|
+
}
|
|
2789
|
+
|
|
2790
|
+
static void
|
|
2791
|
+
ca_bincmp_le_boolean8_t (ca_size_t n, boolean8_t *m,
|
|
2792
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2793
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2794
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2795
|
+
double tol)
|
|
2796
|
+
{
|
|
2797
|
+
boolean8_t *q1 = (boolean8_t *) ptr1, *q2 = (boolean8_t *) ptr2;
|
|
2798
|
+
boolean8_t *p1 = q1, *p2 = q2;
|
|
2799
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2800
|
+
boolean8_t *p3 = q3;
|
|
2801
|
+
ca_size_t k;
|
|
2802
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2803
|
+
(void) tol;
|
|
2804
|
+
if ( m ) {
|
|
2805
|
+
boolean8_t *pm;
|
|
2806
|
+
for (k=0; k<n; k++) {
|
|
2807
|
+
pm = m + k;
|
|
2808
|
+
if ( ! *pm ) {
|
|
2809
|
+
p1 = q1 + k*i1;
|
|
2810
|
+
p2 = q2 + k*i2;
|
|
2811
|
+
p3 = q3 + k*i3;
|
|
2812
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2813
|
+
}
|
|
2814
|
+
}
|
|
2815
|
+
} else {
|
|
2816
|
+
for (k=0; k<n; k++) {
|
|
2817
|
+
p1 = q1 + k*i1;
|
|
2818
|
+
p2 = q2 + k*i2;
|
|
2819
|
+
p3 = q3 + k*i3;
|
|
2820
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2821
|
+
}
|
|
2822
|
+
}
|
|
2823
|
+
}
|
|
2824
|
+
|
|
2825
|
+
static void
|
|
2826
|
+
ca_bincmp_le_int8_t (ca_size_t n, boolean8_t *m,
|
|
2827
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2828
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2829
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2830
|
+
double tol)
|
|
2831
|
+
{
|
|
2832
|
+
int8_t *q1 = (int8_t *) ptr1, *q2 = (int8_t *) ptr2;
|
|
2833
|
+
int8_t *p1 = q1, *p2 = q2;
|
|
2834
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2835
|
+
boolean8_t *p3 = q3;
|
|
2836
|
+
ca_size_t k;
|
|
2837
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2838
|
+
(void) tol;
|
|
2839
|
+
if ( m ) {
|
|
2840
|
+
boolean8_t *pm;
|
|
2841
|
+
for (k=0; k<n; k++) {
|
|
2842
|
+
pm = m + k;
|
|
2843
|
+
if ( ! *pm ) {
|
|
2844
|
+
p1 = q1 + k*i1;
|
|
2845
|
+
p2 = q2 + k*i2;
|
|
2846
|
+
p3 = q3 + k*i3;
|
|
2847
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2848
|
+
}
|
|
2849
|
+
}
|
|
2850
|
+
} else {
|
|
2851
|
+
for (k=0; k<n; k++) {
|
|
2852
|
+
p1 = q1 + k*i1;
|
|
2853
|
+
p2 = q2 + k*i2;
|
|
2854
|
+
p3 = q3 + k*i3;
|
|
2855
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2856
|
+
}
|
|
2857
|
+
}
|
|
2858
|
+
}
|
|
2859
|
+
|
|
2860
|
+
static void
|
|
2861
|
+
ca_bincmp_le_uint8_t (ca_size_t n, boolean8_t *m,
|
|
2862
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2863
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2864
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2865
|
+
double tol)
|
|
2866
|
+
{
|
|
2867
|
+
uint8_t *q1 = (uint8_t *) ptr1, *q2 = (uint8_t *) ptr2;
|
|
2868
|
+
uint8_t *p1 = q1, *p2 = q2;
|
|
2869
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2870
|
+
boolean8_t *p3 = q3;
|
|
2871
|
+
ca_size_t k;
|
|
2872
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2873
|
+
(void) tol;
|
|
2874
|
+
if ( m ) {
|
|
2875
|
+
boolean8_t *pm;
|
|
2876
|
+
for (k=0; k<n; k++) {
|
|
2877
|
+
pm = m + k;
|
|
2878
|
+
if ( ! *pm ) {
|
|
2879
|
+
p1 = q1 + k*i1;
|
|
2880
|
+
p2 = q2 + k*i2;
|
|
2881
|
+
p3 = q3 + k*i3;
|
|
2882
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2883
|
+
}
|
|
2884
|
+
}
|
|
2885
|
+
} else {
|
|
2886
|
+
for (k=0; k<n; k++) {
|
|
2887
|
+
p1 = q1 + k*i1;
|
|
2888
|
+
p2 = q2 + k*i2;
|
|
2889
|
+
p3 = q3 + k*i3;
|
|
2890
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2891
|
+
}
|
|
2892
|
+
}
|
|
2893
|
+
}
|
|
2894
|
+
|
|
2895
|
+
static void
|
|
2896
|
+
ca_bincmp_le_int16_t (ca_size_t n, boolean8_t *m,
|
|
2897
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2898
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2899
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2900
|
+
double tol)
|
|
2901
|
+
{
|
|
2902
|
+
int16_t *q1 = (int16_t *) ptr1, *q2 = (int16_t *) ptr2;
|
|
2903
|
+
int16_t *p1 = q1, *p2 = q2;
|
|
2904
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2905
|
+
boolean8_t *p3 = q3;
|
|
2906
|
+
ca_size_t k;
|
|
2907
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2908
|
+
(void) tol;
|
|
2909
|
+
if ( m ) {
|
|
2910
|
+
boolean8_t *pm;
|
|
2911
|
+
for (k=0; k<n; k++) {
|
|
2912
|
+
pm = m + k;
|
|
2913
|
+
if ( ! *pm ) {
|
|
2914
|
+
p1 = q1 + k*i1;
|
|
2915
|
+
p2 = q2 + k*i2;
|
|
2916
|
+
p3 = q3 + k*i3;
|
|
2917
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2918
|
+
}
|
|
2919
|
+
}
|
|
2920
|
+
} else {
|
|
2921
|
+
for (k=0; k<n; k++) {
|
|
2922
|
+
p1 = q1 + k*i1;
|
|
2923
|
+
p2 = q2 + k*i2;
|
|
2924
|
+
p3 = q3 + k*i3;
|
|
2925
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2926
|
+
}
|
|
2927
|
+
}
|
|
2928
|
+
}
|
|
2929
|
+
|
|
2930
|
+
static void
|
|
2931
|
+
ca_bincmp_le_uint16_t (ca_size_t n, boolean8_t *m,
|
|
2932
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2933
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2934
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2935
|
+
double tol)
|
|
2936
|
+
{
|
|
2937
|
+
uint16_t *q1 = (uint16_t *) ptr1, *q2 = (uint16_t *) ptr2;
|
|
2938
|
+
uint16_t *p1 = q1, *p2 = q2;
|
|
2939
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2940
|
+
boolean8_t *p3 = q3;
|
|
2941
|
+
ca_size_t k;
|
|
2942
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2943
|
+
(void) tol;
|
|
2944
|
+
if ( m ) {
|
|
2945
|
+
boolean8_t *pm;
|
|
2946
|
+
for (k=0; k<n; k++) {
|
|
2947
|
+
pm = m + k;
|
|
2948
|
+
if ( ! *pm ) {
|
|
2949
|
+
p1 = q1 + k*i1;
|
|
2950
|
+
p2 = q2 + k*i2;
|
|
2951
|
+
p3 = q3 + k*i3;
|
|
2952
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2953
|
+
}
|
|
2954
|
+
}
|
|
2955
|
+
} else {
|
|
2956
|
+
for (k=0; k<n; k++) {
|
|
2957
|
+
p1 = q1 + k*i1;
|
|
2958
|
+
p2 = q2 + k*i2;
|
|
2959
|
+
p3 = q3 + k*i3;
|
|
2960
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2961
|
+
}
|
|
2962
|
+
}
|
|
2963
|
+
}
|
|
2964
|
+
|
|
2965
|
+
static void
|
|
2966
|
+
ca_bincmp_le_int32_t (ca_size_t n, boolean8_t *m,
|
|
2967
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
2968
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
2969
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
2970
|
+
double tol)
|
|
2971
|
+
{
|
|
2972
|
+
int32_t *q1 = (int32_t *) ptr1, *q2 = (int32_t *) ptr2;
|
|
2973
|
+
int32_t *p1 = q1, *p2 = q2;
|
|
2974
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
2975
|
+
boolean8_t *p3 = q3;
|
|
2976
|
+
ca_size_t k;
|
|
2977
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
2978
|
+
(void) tol;
|
|
2979
|
+
if ( m ) {
|
|
2980
|
+
boolean8_t *pm;
|
|
2981
|
+
for (k=0; k<n; k++) {
|
|
2982
|
+
pm = m + k;
|
|
2983
|
+
if ( ! *pm ) {
|
|
2984
|
+
p1 = q1 + k*i1;
|
|
2985
|
+
p2 = q2 + k*i2;
|
|
2986
|
+
p3 = q3 + k*i3;
|
|
2987
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2988
|
+
}
|
|
2989
|
+
}
|
|
2990
|
+
} else {
|
|
2991
|
+
for (k=0; k<n; k++) {
|
|
2992
|
+
p1 = q1 + k*i1;
|
|
2993
|
+
p2 = q2 + k*i2;
|
|
2994
|
+
p3 = q3 + k*i3;
|
|
2995
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
2996
|
+
}
|
|
2997
|
+
}
|
|
2998
|
+
}
|
|
2999
|
+
|
|
3000
|
+
static void
|
|
3001
|
+
ca_bincmp_le_uint32_t (ca_size_t n, boolean8_t *m,
|
|
3002
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3003
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3004
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3005
|
+
double tol)
|
|
3006
|
+
{
|
|
3007
|
+
uint32_t *q1 = (uint32_t *) ptr1, *q2 = (uint32_t *) ptr2;
|
|
3008
|
+
uint32_t *p1 = q1, *p2 = q2;
|
|
3009
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3010
|
+
boolean8_t *p3 = q3;
|
|
3011
|
+
ca_size_t k;
|
|
3012
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3013
|
+
(void) tol;
|
|
3014
|
+
if ( m ) {
|
|
3015
|
+
boolean8_t *pm;
|
|
3016
|
+
for (k=0; k<n; k++) {
|
|
3017
|
+
pm = m + k;
|
|
3018
|
+
if ( ! *pm ) {
|
|
3019
|
+
p1 = q1 + k*i1;
|
|
3020
|
+
p2 = q2 + k*i2;
|
|
3021
|
+
p3 = q3 + k*i3;
|
|
3022
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3023
|
+
}
|
|
3024
|
+
}
|
|
3025
|
+
} else {
|
|
3026
|
+
for (k=0; k<n; k++) {
|
|
3027
|
+
p1 = q1 + k*i1;
|
|
3028
|
+
p2 = q2 + k*i2;
|
|
3029
|
+
p3 = q3 + k*i3;
|
|
3030
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3031
|
+
}
|
|
3032
|
+
}
|
|
3033
|
+
}
|
|
3034
|
+
|
|
3035
|
+
static void
|
|
3036
|
+
ca_bincmp_le_int64_t (ca_size_t n, boolean8_t *m,
|
|
3037
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3038
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3039
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3040
|
+
double tol)
|
|
3041
|
+
{
|
|
3042
|
+
int64_t *q1 = (int64_t *) ptr1, *q2 = (int64_t *) ptr2;
|
|
3043
|
+
int64_t *p1 = q1, *p2 = q2;
|
|
3044
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3045
|
+
boolean8_t *p3 = q3;
|
|
3046
|
+
ca_size_t k;
|
|
3047
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3048
|
+
(void) tol;
|
|
3049
|
+
if ( m ) {
|
|
3050
|
+
boolean8_t *pm;
|
|
3051
|
+
for (k=0; k<n; k++) {
|
|
3052
|
+
pm = m + k;
|
|
3053
|
+
if ( ! *pm ) {
|
|
3054
|
+
p1 = q1 + k*i1;
|
|
3055
|
+
p2 = q2 + k*i2;
|
|
3056
|
+
p3 = q3 + k*i3;
|
|
3057
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3058
|
+
}
|
|
3059
|
+
}
|
|
3060
|
+
} else {
|
|
3061
|
+
for (k=0; k<n; k++) {
|
|
3062
|
+
p1 = q1 + k*i1;
|
|
3063
|
+
p2 = q2 + k*i2;
|
|
3064
|
+
p3 = q3 + k*i3;
|
|
3065
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3066
|
+
}
|
|
3067
|
+
}
|
|
3068
|
+
}
|
|
3069
|
+
|
|
3070
|
+
static void
|
|
3071
|
+
ca_bincmp_le_uint64_t (ca_size_t n, boolean8_t *m,
|
|
3072
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3073
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3074
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3075
|
+
double tol)
|
|
3076
|
+
{
|
|
3077
|
+
uint64_t *q1 = (uint64_t *) ptr1, *q2 = (uint64_t *) ptr2;
|
|
3078
|
+
uint64_t *p1 = q1, *p2 = q2;
|
|
3079
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3080
|
+
boolean8_t *p3 = q3;
|
|
3081
|
+
ca_size_t k;
|
|
3082
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3083
|
+
(void) tol;
|
|
3084
|
+
if ( m ) {
|
|
3085
|
+
boolean8_t *pm;
|
|
3086
|
+
for (k=0; k<n; k++) {
|
|
3087
|
+
pm = m + k;
|
|
3088
|
+
if ( ! *pm ) {
|
|
3089
|
+
p1 = q1 + k*i1;
|
|
3090
|
+
p2 = q2 + k*i2;
|
|
3091
|
+
p3 = q3 + k*i3;
|
|
3092
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3093
|
+
}
|
|
3094
|
+
}
|
|
3095
|
+
} else {
|
|
3096
|
+
for (k=0; k<n; k++) {
|
|
3097
|
+
p1 = q1 + k*i1;
|
|
3098
|
+
p2 = q2 + k*i2;
|
|
3099
|
+
p3 = q3 + k*i3;
|
|
3100
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3101
|
+
}
|
|
3102
|
+
}
|
|
3103
|
+
}
|
|
3104
|
+
|
|
3105
|
+
static void
|
|
3106
|
+
ca_bincmp_le_float32_t (ca_size_t n, boolean8_t *m,
|
|
3107
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3108
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3109
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3110
|
+
double tol)
|
|
3111
|
+
{
|
|
3112
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
3113
|
+
float *p1 = q1, *p2 = q2;
|
|
3114
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3115
|
+
boolean8_t *p3 = q3;
|
|
3116
|
+
ca_size_t k;
|
|
3117
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3118
|
+
(void) tol;
|
|
3119
|
+
if ( m ) {
|
|
3120
|
+
boolean8_t *pm;
|
|
3121
|
+
for (k=0; k<n; k++) {
|
|
3122
|
+
pm = m + k;
|
|
3123
|
+
if ( ! *pm ) {
|
|
3124
|
+
p1 = q1 + k*i1;
|
|
3125
|
+
p2 = q2 + k*i2;
|
|
3126
|
+
p3 = q3 + k*i3;
|
|
3127
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3128
|
+
}
|
|
3129
|
+
}
|
|
3130
|
+
} else {
|
|
3131
|
+
for (k=0; k<n; k++) {
|
|
3132
|
+
p1 = q1 + k*i1;
|
|
3133
|
+
p2 = q2 + k*i2;
|
|
3134
|
+
p3 = q3 + k*i3;
|
|
3135
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3136
|
+
}
|
|
3137
|
+
}
|
|
3138
|
+
}
|
|
3139
|
+
|
|
3140
|
+
static void
|
|
3141
|
+
ca_bincmp_le_float64_t (ca_size_t n, boolean8_t *m,
|
|
3142
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3143
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3144
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3145
|
+
double tol)
|
|
3146
|
+
{
|
|
3147
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
3148
|
+
double *p1 = q1, *p2 = q2;
|
|
3149
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3150
|
+
boolean8_t *p3 = q3;
|
|
3151
|
+
ca_size_t k;
|
|
3152
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3153
|
+
(void) tol;
|
|
3154
|
+
if ( m ) {
|
|
3155
|
+
boolean8_t *pm;
|
|
3156
|
+
for (k=0; k<n; k++) {
|
|
3157
|
+
pm = m + k;
|
|
3158
|
+
if ( ! *pm ) {
|
|
3159
|
+
p1 = q1 + k*i1;
|
|
3160
|
+
p2 = q2 + k*i2;
|
|
3161
|
+
p3 = q3 + k*i3;
|
|
3162
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3163
|
+
}
|
|
3164
|
+
}
|
|
3165
|
+
} else {
|
|
3166
|
+
for (k=0; k<n; k++) {
|
|
3167
|
+
p1 = q1 + k*i1;
|
|
3168
|
+
p2 = q2 + k*i2;
|
|
3169
|
+
p3 = q3 + k*i3;
|
|
3170
|
+
{ (*p3) = ( (*p1) <= (*p2) ); }
|
|
3171
|
+
}
|
|
3172
|
+
}
|
|
3173
|
+
}
|
|
3174
|
+
|
|
3175
|
+
static void
|
|
3176
|
+
ca_bincmp_le_VALUE (ca_size_t n, boolean8_t *m,
|
|
3177
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3178
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3179
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3180
|
+
double tol)
|
|
3181
|
+
{
|
|
3182
|
+
VALUE *q1 = (VALUE *) ptr1, *q2 = (VALUE *) ptr2;
|
|
3183
|
+
VALUE *p1 = q1, *p2 = q2;
|
|
3184
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3185
|
+
boolean8_t *p3 = q3;
|
|
3186
|
+
ca_size_t k;
|
|
3187
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3188
|
+
(void) tol;
|
|
3189
|
+
if ( m ) {
|
|
3190
|
+
boolean8_t *pm;
|
|
3191
|
+
for (k=0; k<n; k++) {
|
|
3192
|
+
pm = m + k;
|
|
3193
|
+
if ( ! *pm ) {
|
|
3194
|
+
p1 = q1 + k*i1;
|
|
3195
|
+
p2 = q2 + k*i2;
|
|
3196
|
+
p3 = q3 + k*i3;
|
|
3197
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<="), 1, (*p2))) ? 1 : 0; }
|
|
3198
|
+
}
|
|
3199
|
+
}
|
|
3200
|
+
} else {
|
|
3201
|
+
for (k=0; k<n; k++) {
|
|
3202
|
+
p1 = q1 + k*i1;
|
|
3203
|
+
p2 = q2 + k*i2;
|
|
3204
|
+
p3 = q3 + k*i3;
|
|
3205
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("<="), 1, (*p2))) ? 1 : 0; }
|
|
3206
|
+
}
|
|
3207
|
+
}
|
|
3208
|
+
}
|
|
3209
|
+
|
|
3210
|
+
ca_bincmp_func_t
|
|
3211
|
+
ca_bincmp_le[CA_NTYPE] = {
|
|
3212
|
+
ca_bincmp_le_fixlen,
|
|
3213
|
+
ca_bincmp_le_boolean8_t,
|
|
3214
|
+
ca_bincmp_le_int8_t,
|
|
3215
|
+
ca_bincmp_le_uint8_t,
|
|
3216
|
+
ca_bincmp_le_int16_t,
|
|
3217
|
+
ca_bincmp_le_uint16_t,
|
|
3218
|
+
ca_bincmp_le_int32_t,
|
|
3219
|
+
ca_bincmp_le_uint32_t,
|
|
3220
|
+
ca_bincmp_le_int64_t,
|
|
3221
|
+
ca_bincmp_le_uint64_t,
|
|
3222
|
+
ca_bincmp_le_float32_t,
|
|
3223
|
+
ca_bincmp_le_float64_t,
|
|
3224
|
+
ca_bincmp_not_implement,
|
|
3225
|
+
ca_bincmp_not_implement,
|
|
3226
|
+
ca_bincmp_not_implement,
|
|
3227
|
+
ca_bincmp_not_implement,
|
|
3228
|
+
ca_bincmp_le_VALUE,
|
|
3229
|
+
};
|
|
3230
|
+
|
|
3231
|
+
VALUE rb_ca_le (VALUE self, VALUE other)
|
|
3232
|
+
{
|
|
3233
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
3234
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("le"));
|
|
3235
|
+
}
|
|
3236
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_le, 0.0);
|
|
3237
|
+
}
|
|
3238
|
+
|
|
3239
|
+
/* ===== bincmp match ============================================ */
|
|
3240
|
+
|
|
3241
|
+
static void
|
|
3242
|
+
ca_bincmp_match_fixlen (ca_size_t n, boolean8_t *m,
|
|
3243
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3244
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3245
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3246
|
+
double tol)
|
|
3247
|
+
{
|
|
3248
|
+
char *q1 = ptr1, *q2 = ptr2;
|
|
3249
|
+
char *p1 = q1, *p2 = q2;
|
|
3250
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3251
|
+
boolean8_t *p3 = q3;
|
|
3252
|
+
ca_size_t s1 = b1*i1, s2 = b2*i2, s3 = b3*i3;
|
|
3253
|
+
ca_size_t k;
|
|
3254
|
+
(void) tol;
|
|
3255
|
+
if ( m ) {
|
|
3256
|
+
boolean8_t *pm;
|
|
3257
|
+
for (k=0; k<n; k++) {
|
|
3258
|
+
pm = m + k;
|
|
3259
|
+
if ( ! *pm ) {
|
|
3260
|
+
p1 = q1 + k*s1;
|
|
3261
|
+
p2 = q2 + k*s2;
|
|
3262
|
+
p3 = q3 + k*s3;
|
|
3263
|
+
{
|
|
3264
|
+
(*p3) = RTEST(rb_funcall(rb_str_new(p1,b1), rb_intern("=~"), 1, (*p2)));
|
|
3265
|
+
}
|
|
3266
|
+
}
|
|
3267
|
+
}
|
|
3268
|
+
} else {
|
|
3269
|
+
for (k=0; k<n; k++) {
|
|
3270
|
+
p1 = q1 + k*s1;
|
|
3271
|
+
p2 = q2 + k*s2;
|
|
3272
|
+
p3 = q3 + k*s3;
|
|
3273
|
+
{
|
|
3274
|
+
(*p3) = RTEST(rb_funcall(rb_str_new(p1,b1), rb_intern("=~"), 1, (*p2)));
|
|
3275
|
+
}
|
|
3276
|
+
}
|
|
3277
|
+
}
|
|
3278
|
+
}
|
|
3279
|
+
|
|
3280
|
+
static void
|
|
3281
|
+
ca_bincmp_match_VALUE (ca_size_t n, boolean8_t *m,
|
|
3282
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3283
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3284
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3285
|
+
double tol)
|
|
3286
|
+
{
|
|
3287
|
+
VALUE *q1 = (VALUE *) ptr1, *q2 = (VALUE *) ptr2;
|
|
3288
|
+
VALUE *p1 = q1, *p2 = q2;
|
|
3289
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3290
|
+
boolean8_t *p3 = q3;
|
|
3291
|
+
ca_size_t k;
|
|
3292
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3293
|
+
(void) tol;
|
|
3294
|
+
if ( m ) {
|
|
3295
|
+
boolean8_t *pm;
|
|
3296
|
+
for (k=0; k<n; k++) {
|
|
3297
|
+
pm = m + k;
|
|
3298
|
+
if ( ! *pm ) {
|
|
3299
|
+
p1 = q1 + k*i1;
|
|
3300
|
+
p2 = q2 + k*i2;
|
|
3301
|
+
p3 = q3 + k*i3;
|
|
3302
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=~"), 1, (*p2))); }
|
|
3303
|
+
}
|
|
3304
|
+
}
|
|
3305
|
+
} else {
|
|
3306
|
+
for (k=0; k<n; k++) {
|
|
3307
|
+
p1 = q1 + k*i1;
|
|
3308
|
+
p2 = q2 + k*i2;
|
|
3309
|
+
p3 = q3 + k*i3;
|
|
3310
|
+
{ (*p3) = RTEST(rb_funcall((*p1), rb_intern("=~"), 1, (*p2))); }
|
|
3311
|
+
}
|
|
3312
|
+
}
|
|
3313
|
+
}
|
|
3314
|
+
|
|
3315
|
+
ca_bincmp_func_t
|
|
3316
|
+
ca_bincmp_match[CA_NTYPE] = {
|
|
3317
|
+
ca_bincmp_match_fixlen,
|
|
3318
|
+
ca_bincmp_not_implement,
|
|
3319
|
+
ca_bincmp_not_implement,
|
|
3320
|
+
ca_bincmp_not_implement,
|
|
3321
|
+
ca_bincmp_not_implement,
|
|
3322
|
+
ca_bincmp_not_implement,
|
|
3323
|
+
ca_bincmp_not_implement,
|
|
3324
|
+
ca_bincmp_not_implement,
|
|
3325
|
+
ca_bincmp_not_implement,
|
|
3326
|
+
ca_bincmp_not_implement,
|
|
3327
|
+
ca_bincmp_not_implement,
|
|
3328
|
+
ca_bincmp_not_implement,
|
|
3329
|
+
ca_bincmp_not_implement,
|
|
3330
|
+
ca_bincmp_not_implement,
|
|
3331
|
+
ca_bincmp_not_implement,
|
|
3332
|
+
ca_bincmp_not_implement,
|
|
3333
|
+
ca_bincmp_match_VALUE,
|
|
3334
|
+
};
|
|
3335
|
+
|
|
3336
|
+
VALUE rb_ca_match (VALUE self, VALUE other)
|
|
3337
|
+
{
|
|
3338
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
3339
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("match"));
|
|
3340
|
+
}
|
|
3341
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_match, 0.0);
|
|
3342
|
+
}
|
|
3343
|
+
|
|
3344
|
+
/* ===== bincmp is_kind_of ============================================ */
|
|
3345
|
+
|
|
3346
|
+
static void
|
|
3347
|
+
ca_bincmp_is_kind_of_VALUE (ca_size_t n, boolean8_t *m,
|
|
3348
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3349
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3350
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3351
|
+
double tol)
|
|
3352
|
+
{
|
|
3353
|
+
VALUE *q1 = (VALUE *) ptr1, *q2 = (VALUE *) ptr2;
|
|
3354
|
+
VALUE *p1 = q1, *p2 = q2;
|
|
3355
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3356
|
+
boolean8_t *p3 = q3;
|
|
3357
|
+
ca_size_t k;
|
|
3358
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3359
|
+
(void) tol;
|
|
3360
|
+
if ( m ) {
|
|
3361
|
+
boolean8_t *pm;
|
|
3362
|
+
for (k=0; k<n; k++) {
|
|
3363
|
+
pm = m + k;
|
|
3364
|
+
if ( ! *pm ) {
|
|
3365
|
+
p1 = q1 + k*i1;
|
|
3366
|
+
p2 = q2 + k*i2;
|
|
3367
|
+
p3 = q3 + k*i3;
|
|
3368
|
+
{ (*p3) = RTEST(rb_obj_is_kind_of((*p1), (*p2))); }
|
|
3369
|
+
}
|
|
3370
|
+
}
|
|
3371
|
+
} else {
|
|
3372
|
+
for (k=0; k<n; k++) {
|
|
3373
|
+
p1 = q1 + k*i1;
|
|
3374
|
+
p2 = q2 + k*i2;
|
|
3375
|
+
p3 = q3 + k*i3;
|
|
3376
|
+
{ (*p3) = RTEST(rb_obj_is_kind_of((*p1), (*p2))); }
|
|
3377
|
+
}
|
|
3378
|
+
}
|
|
3379
|
+
}
|
|
3380
|
+
|
|
3381
|
+
ca_bincmp_func_t
|
|
3382
|
+
ca_bincmp_is_kind_of[CA_NTYPE] = {
|
|
3383
|
+
ca_bincmp_not_implement,
|
|
3384
|
+
ca_bincmp_not_implement,
|
|
3385
|
+
ca_bincmp_not_implement,
|
|
3386
|
+
ca_bincmp_not_implement,
|
|
3387
|
+
ca_bincmp_not_implement,
|
|
3388
|
+
ca_bincmp_not_implement,
|
|
3389
|
+
ca_bincmp_not_implement,
|
|
3390
|
+
ca_bincmp_not_implement,
|
|
3391
|
+
ca_bincmp_not_implement,
|
|
3392
|
+
ca_bincmp_not_implement,
|
|
3393
|
+
ca_bincmp_not_implement,
|
|
3394
|
+
ca_bincmp_not_implement,
|
|
3395
|
+
ca_bincmp_not_implement,
|
|
3396
|
+
ca_bincmp_not_implement,
|
|
3397
|
+
ca_bincmp_not_implement,
|
|
3398
|
+
ca_bincmp_not_implement,
|
|
3399
|
+
ca_bincmp_is_kind_of_VALUE,
|
|
3400
|
+
};
|
|
3401
|
+
|
|
3402
|
+
VALUE rb_ca_is_kind_of (VALUE self, VALUE other)
|
|
3403
|
+
{
|
|
3404
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
3405
|
+
return rb_ca_binop_pass_to_other(self, other, rb_intern("is_kind_of"));
|
|
3406
|
+
}
|
|
3407
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_is_kind_of, 0.0);
|
|
3408
|
+
}
|
|
3409
|
+
|
|
3410
|
+
/* ===== bincmp is_close ============================================ */
|
|
3411
|
+
|
|
3412
|
+
static void
|
|
3413
|
+
ca_bincmp_is_close_int8_t (ca_size_t n, boolean8_t *m,
|
|
3414
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3415
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3416
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3417
|
+
double tol)
|
|
3418
|
+
{
|
|
3419
|
+
int8_t *q1 = (int8_t *) ptr1, *q2 = (int8_t *) ptr2;
|
|
3420
|
+
int8_t *p1 = q1, *p2 = q2;
|
|
3421
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3422
|
+
boolean8_t *p3 = q3;
|
|
3423
|
+
ca_size_t k;
|
|
3424
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3425
|
+
|
|
3426
|
+
if ( m ) {
|
|
3427
|
+
boolean8_t *pm;
|
|
3428
|
+
for (k=0; k<n; k++) {
|
|
3429
|
+
pm = m + k;
|
|
3430
|
+
if ( ! *pm ) {
|
|
3431
|
+
p1 = q1 + k*i1;
|
|
3432
|
+
p2 = q2 + k*i2;
|
|
3433
|
+
p3 = q3 + k*i3;
|
|
3434
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3435
|
+
}
|
|
3436
|
+
}
|
|
3437
|
+
} else {
|
|
3438
|
+
for (k=0; k<n; k++) {
|
|
3439
|
+
p1 = q1 + k*i1;
|
|
3440
|
+
p2 = q2 + k*i2;
|
|
3441
|
+
p3 = q3 + k*i3;
|
|
3442
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3443
|
+
}
|
|
3444
|
+
}
|
|
3445
|
+
}
|
|
3446
|
+
|
|
3447
|
+
static void
|
|
3448
|
+
ca_bincmp_is_close_uint8_t (ca_size_t n, boolean8_t *m,
|
|
3449
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3450
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3451
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3452
|
+
double tol)
|
|
3453
|
+
{
|
|
3454
|
+
uint8_t *q1 = (uint8_t *) ptr1, *q2 = (uint8_t *) ptr2;
|
|
3455
|
+
uint8_t *p1 = q1, *p2 = q2;
|
|
3456
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3457
|
+
boolean8_t *p3 = q3;
|
|
3458
|
+
ca_size_t k;
|
|
3459
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3460
|
+
|
|
3461
|
+
if ( m ) {
|
|
3462
|
+
boolean8_t *pm;
|
|
3463
|
+
for (k=0; k<n; k++) {
|
|
3464
|
+
pm = m + k;
|
|
3465
|
+
if ( ! *pm ) {
|
|
3466
|
+
p1 = q1 + k*i1;
|
|
3467
|
+
p2 = q2 + k*i2;
|
|
3468
|
+
p3 = q3 + k*i3;
|
|
3469
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3470
|
+
}
|
|
3471
|
+
}
|
|
3472
|
+
} else {
|
|
3473
|
+
for (k=0; k<n; k++) {
|
|
3474
|
+
p1 = q1 + k*i1;
|
|
3475
|
+
p2 = q2 + k*i2;
|
|
3476
|
+
p3 = q3 + k*i3;
|
|
3477
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3478
|
+
}
|
|
3479
|
+
}
|
|
3480
|
+
}
|
|
3481
|
+
|
|
3482
|
+
static void
|
|
3483
|
+
ca_bincmp_is_close_int16_t (ca_size_t n, boolean8_t *m,
|
|
3484
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3485
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3486
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3487
|
+
double tol)
|
|
3488
|
+
{
|
|
3489
|
+
int16_t *q1 = (int16_t *) ptr1, *q2 = (int16_t *) ptr2;
|
|
3490
|
+
int16_t *p1 = q1, *p2 = q2;
|
|
3491
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3492
|
+
boolean8_t *p3 = q3;
|
|
3493
|
+
ca_size_t k;
|
|
3494
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3495
|
+
|
|
3496
|
+
if ( m ) {
|
|
3497
|
+
boolean8_t *pm;
|
|
3498
|
+
for (k=0; k<n; k++) {
|
|
3499
|
+
pm = m + k;
|
|
3500
|
+
if ( ! *pm ) {
|
|
3501
|
+
p1 = q1 + k*i1;
|
|
3502
|
+
p2 = q2 + k*i2;
|
|
3503
|
+
p3 = q3 + k*i3;
|
|
3504
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3505
|
+
}
|
|
3506
|
+
}
|
|
3507
|
+
} else {
|
|
3508
|
+
for (k=0; k<n; k++) {
|
|
3509
|
+
p1 = q1 + k*i1;
|
|
3510
|
+
p2 = q2 + k*i2;
|
|
3511
|
+
p3 = q3 + k*i3;
|
|
3512
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3513
|
+
}
|
|
3514
|
+
}
|
|
3515
|
+
}
|
|
3516
|
+
|
|
3517
|
+
static void
|
|
3518
|
+
ca_bincmp_is_close_uint16_t (ca_size_t n, boolean8_t *m,
|
|
3519
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3520
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3521
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3522
|
+
double tol)
|
|
3523
|
+
{
|
|
3524
|
+
uint16_t *q1 = (uint16_t *) ptr1, *q2 = (uint16_t *) ptr2;
|
|
3525
|
+
uint16_t *p1 = q1, *p2 = q2;
|
|
3526
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3527
|
+
boolean8_t *p3 = q3;
|
|
3528
|
+
ca_size_t k;
|
|
3529
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3530
|
+
|
|
3531
|
+
if ( m ) {
|
|
3532
|
+
boolean8_t *pm;
|
|
3533
|
+
for (k=0; k<n; k++) {
|
|
3534
|
+
pm = m + k;
|
|
3535
|
+
if ( ! *pm ) {
|
|
3536
|
+
p1 = q1 + k*i1;
|
|
3537
|
+
p2 = q2 + k*i2;
|
|
3538
|
+
p3 = q3 + k*i3;
|
|
3539
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3540
|
+
}
|
|
3541
|
+
}
|
|
3542
|
+
} else {
|
|
3543
|
+
for (k=0; k<n; k++) {
|
|
3544
|
+
p1 = q1 + k*i1;
|
|
3545
|
+
p2 = q2 + k*i2;
|
|
3546
|
+
p3 = q3 + k*i3;
|
|
3547
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3548
|
+
}
|
|
3549
|
+
}
|
|
3550
|
+
}
|
|
3551
|
+
|
|
3552
|
+
static void
|
|
3553
|
+
ca_bincmp_is_close_int32_t (ca_size_t n, boolean8_t *m,
|
|
3554
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3555
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3556
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3557
|
+
double tol)
|
|
3558
|
+
{
|
|
3559
|
+
int32_t *q1 = (int32_t *) ptr1, *q2 = (int32_t *) ptr2;
|
|
3560
|
+
int32_t *p1 = q1, *p2 = q2;
|
|
3561
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3562
|
+
boolean8_t *p3 = q3;
|
|
3563
|
+
ca_size_t k;
|
|
3564
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3565
|
+
|
|
3566
|
+
if ( m ) {
|
|
3567
|
+
boolean8_t *pm;
|
|
3568
|
+
for (k=0; k<n; k++) {
|
|
3569
|
+
pm = m + k;
|
|
3570
|
+
if ( ! *pm ) {
|
|
3571
|
+
p1 = q1 + k*i1;
|
|
3572
|
+
p2 = q2 + k*i2;
|
|
3573
|
+
p3 = q3 + k*i3;
|
|
3574
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3575
|
+
}
|
|
3576
|
+
}
|
|
3577
|
+
} else {
|
|
3578
|
+
for (k=0; k<n; k++) {
|
|
3579
|
+
p1 = q1 + k*i1;
|
|
3580
|
+
p2 = q2 + k*i2;
|
|
3581
|
+
p3 = q3 + k*i3;
|
|
3582
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3583
|
+
}
|
|
3584
|
+
}
|
|
3585
|
+
}
|
|
3586
|
+
|
|
3587
|
+
static void
|
|
3588
|
+
ca_bincmp_is_close_uint32_t (ca_size_t n, boolean8_t *m,
|
|
3589
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3590
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3591
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3592
|
+
double tol)
|
|
3593
|
+
{
|
|
3594
|
+
uint32_t *q1 = (uint32_t *) ptr1, *q2 = (uint32_t *) ptr2;
|
|
3595
|
+
uint32_t *p1 = q1, *p2 = q2;
|
|
3596
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3597
|
+
boolean8_t *p3 = q3;
|
|
3598
|
+
ca_size_t k;
|
|
3599
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3600
|
+
|
|
3601
|
+
if ( m ) {
|
|
3602
|
+
boolean8_t *pm;
|
|
3603
|
+
for (k=0; k<n; k++) {
|
|
3604
|
+
pm = m + k;
|
|
3605
|
+
if ( ! *pm ) {
|
|
3606
|
+
p1 = q1 + k*i1;
|
|
3607
|
+
p2 = q2 + k*i2;
|
|
3608
|
+
p3 = q3 + k*i3;
|
|
3609
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3610
|
+
}
|
|
3611
|
+
}
|
|
3612
|
+
} else {
|
|
3613
|
+
for (k=0; k<n; k++) {
|
|
3614
|
+
p1 = q1 + k*i1;
|
|
3615
|
+
p2 = q2 + k*i2;
|
|
3616
|
+
p3 = q3 + k*i3;
|
|
3617
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3618
|
+
}
|
|
3619
|
+
}
|
|
3620
|
+
}
|
|
3621
|
+
|
|
3622
|
+
static void
|
|
3623
|
+
ca_bincmp_is_close_int64_t (ca_size_t n, boolean8_t *m,
|
|
3624
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3625
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3626
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3627
|
+
double tol)
|
|
3628
|
+
{
|
|
3629
|
+
int64_t *q1 = (int64_t *) ptr1, *q2 = (int64_t *) ptr2;
|
|
3630
|
+
int64_t *p1 = q1, *p2 = q2;
|
|
3631
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3632
|
+
boolean8_t *p3 = q3;
|
|
3633
|
+
ca_size_t k;
|
|
3634
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3635
|
+
|
|
3636
|
+
if ( m ) {
|
|
3637
|
+
boolean8_t *pm;
|
|
3638
|
+
for (k=0; k<n; k++) {
|
|
3639
|
+
pm = m + k;
|
|
3640
|
+
if ( ! *pm ) {
|
|
3641
|
+
p1 = q1 + k*i1;
|
|
3642
|
+
p2 = q2 + k*i2;
|
|
3643
|
+
p3 = q3 + k*i3;
|
|
3644
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3645
|
+
}
|
|
3646
|
+
}
|
|
3647
|
+
} else {
|
|
3648
|
+
for (k=0; k<n; k++) {
|
|
3649
|
+
p1 = q1 + k*i1;
|
|
3650
|
+
p2 = q2 + k*i2;
|
|
3651
|
+
p3 = q3 + k*i3;
|
|
3652
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3653
|
+
}
|
|
3654
|
+
}
|
|
3655
|
+
}
|
|
3656
|
+
|
|
3657
|
+
static void
|
|
3658
|
+
ca_bincmp_is_close_uint64_t (ca_size_t n, boolean8_t *m,
|
|
3659
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3660
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3661
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3662
|
+
double tol)
|
|
3663
|
+
{
|
|
3664
|
+
uint64_t *q1 = (uint64_t *) ptr1, *q2 = (uint64_t *) ptr2;
|
|
3665
|
+
uint64_t *p1 = q1, *p2 = q2;
|
|
3666
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3667
|
+
boolean8_t *p3 = q3;
|
|
3668
|
+
ca_size_t k;
|
|
3669
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3670
|
+
|
|
3671
|
+
if ( m ) {
|
|
3672
|
+
boolean8_t *pm;
|
|
3673
|
+
for (k=0; k<n; k++) {
|
|
3674
|
+
pm = m + k;
|
|
3675
|
+
if ( ! *pm ) {
|
|
3676
|
+
p1 = q1 + k*i1;
|
|
3677
|
+
p2 = q2 + k*i2;
|
|
3678
|
+
p3 = q3 + k*i3;
|
|
3679
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3680
|
+
}
|
|
3681
|
+
}
|
|
3682
|
+
} else {
|
|
3683
|
+
for (k=0; k<n; k++) {
|
|
3684
|
+
p1 = q1 + k*i1;
|
|
3685
|
+
p2 = q2 + k*i2;
|
|
3686
|
+
p3 = q3 + k*i3;
|
|
3687
|
+
{ (*p3) = (fabs((double)(*p1) - (double)(*p2)) <= tol) ? 1 : 0; }
|
|
3688
|
+
}
|
|
3689
|
+
}
|
|
3690
|
+
}
|
|
3691
|
+
|
|
3692
|
+
static void
|
|
3693
|
+
ca_bincmp_is_close_float32_t (ca_size_t n, boolean8_t *m,
|
|
3694
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3695
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3696
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3697
|
+
double tol)
|
|
3698
|
+
{
|
|
3699
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
3700
|
+
float *p1 = q1, *p2 = q2;
|
|
3701
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3702
|
+
boolean8_t *p3 = q3;
|
|
3703
|
+
ca_size_t k;
|
|
3704
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3705
|
+
|
|
3706
|
+
if ( m ) {
|
|
3707
|
+
boolean8_t *pm;
|
|
3708
|
+
for (k=0; k<n; k++) {
|
|
3709
|
+
pm = m + k;
|
|
3710
|
+
if ( ! *pm ) {
|
|
3711
|
+
p1 = q1 + k*i1;
|
|
3712
|
+
p2 = q2 + k*i2;
|
|
3713
|
+
p3 = q3 + k*i3;
|
|
3714
|
+
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3715
|
+
}
|
|
3716
|
+
}
|
|
3717
|
+
} else {
|
|
3718
|
+
for (k=0; k<n; k++) {
|
|
3719
|
+
p1 = q1 + k*i1;
|
|
3720
|
+
p2 = q2 + k*i2;
|
|
3721
|
+
p3 = q3 + k*i3;
|
|
3722
|
+
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3723
|
+
}
|
|
3724
|
+
}
|
|
3725
|
+
}
|
|
3726
|
+
|
|
3727
|
+
static void
|
|
3728
|
+
ca_bincmp_is_close_float64_t (ca_size_t n, boolean8_t *m,
|
|
3729
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3730
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3731
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3732
|
+
double tol)
|
|
3733
|
+
{
|
|
3734
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
3735
|
+
double *p1 = q1, *p2 = q2;
|
|
3736
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3737
|
+
boolean8_t *p3 = q3;
|
|
3738
|
+
ca_size_t k;
|
|
3739
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3740
|
+
|
|
3741
|
+
if ( m ) {
|
|
3742
|
+
boolean8_t *pm;
|
|
3743
|
+
for (k=0; k<n; k++) {
|
|
3744
|
+
pm = m + k;
|
|
3745
|
+
if ( ! *pm ) {
|
|
3746
|
+
p1 = q1 + k*i1;
|
|
3747
|
+
p2 = q2 + k*i2;
|
|
3748
|
+
p3 = q3 + k*i3;
|
|
3749
|
+
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3750
|
+
}
|
|
3751
|
+
}
|
|
3752
|
+
} else {
|
|
3753
|
+
for (k=0; k<n; k++) {
|
|
3754
|
+
p1 = q1 + k*i1;
|
|
3755
|
+
p2 = q2 + k*i2;
|
|
3756
|
+
p3 = q3 + k*i3;
|
|
3757
|
+
{ (*p3) = (fabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3758
|
+
}
|
|
3759
|
+
}
|
|
3760
|
+
}
|
|
3761
|
+
|
|
3762
|
+
static void
|
|
3763
|
+
ca_bincmp_is_close_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
3764
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3765
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3766
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3767
|
+
double tol)
|
|
3768
|
+
{
|
|
3769
|
+
cmplx64_t *q1 = (cmplx64_t *) ptr1, *q2 = (cmplx64_t *) ptr2;
|
|
3770
|
+
cmplx64_t *p1 = q1, *p2 = q2;
|
|
3771
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3772
|
+
boolean8_t *p3 = q3;
|
|
3773
|
+
ca_size_t k;
|
|
3774
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3775
|
+
|
|
3776
|
+
if ( m ) {
|
|
3777
|
+
boolean8_t *pm;
|
|
3778
|
+
for (k=0; k<n; k++) {
|
|
3779
|
+
pm = m + k;
|
|
3780
|
+
if ( ! *pm ) {
|
|
3781
|
+
p1 = q1 + k*i1;
|
|
3782
|
+
p2 = q2 + k*i2;
|
|
3783
|
+
p3 = q3 + k*i3;
|
|
3784
|
+
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3785
|
+
}
|
|
3786
|
+
}
|
|
3787
|
+
} else {
|
|
3788
|
+
for (k=0; k<n; k++) {
|
|
3789
|
+
p1 = q1 + k*i1;
|
|
3790
|
+
p2 = q2 + k*i2;
|
|
3791
|
+
p3 = q3 + k*i3;
|
|
3792
|
+
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3793
|
+
}
|
|
3794
|
+
}
|
|
3795
|
+
}
|
|
3796
|
+
|
|
3797
|
+
static void
|
|
3798
|
+
ca_bincmp_is_close_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
3799
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3800
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3801
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3802
|
+
double tol)
|
|
3803
|
+
{
|
|
3804
|
+
cmplx128_t *q1 = (cmplx128_t *) ptr1, *q2 = (cmplx128_t *) ptr2;
|
|
3805
|
+
cmplx128_t *p1 = q1, *p2 = q2;
|
|
3806
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3807
|
+
boolean8_t *p3 = q3;
|
|
3808
|
+
ca_size_t k;
|
|
3809
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3810
|
+
|
|
3811
|
+
if ( m ) {
|
|
3812
|
+
boolean8_t *pm;
|
|
3813
|
+
for (k=0; k<n; k++) {
|
|
3814
|
+
pm = m + k;
|
|
3815
|
+
if ( ! *pm ) {
|
|
3816
|
+
p1 = q1 + k*i1;
|
|
3817
|
+
p2 = q2 + k*i2;
|
|
3818
|
+
p3 = q3 + k*i3;
|
|
3819
|
+
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3820
|
+
}
|
|
3821
|
+
}
|
|
3822
|
+
} else {
|
|
3823
|
+
for (k=0; k<n; k++) {
|
|
3824
|
+
p1 = q1 + k*i1;
|
|
3825
|
+
p2 = q2 + k*i2;
|
|
3826
|
+
p3 = q3 + k*i3;
|
|
3827
|
+
{ (*p3) = (cabs((*p1) - (*p2)) <= tol) ? 1 : 0; }
|
|
3828
|
+
}
|
|
3829
|
+
}
|
|
3830
|
+
}
|
|
3831
|
+
|
|
3832
|
+
ca_bincmp_func_t
|
|
3833
|
+
ca_bincmp_is_close[CA_NTYPE] = {
|
|
3834
|
+
ca_bincmp_not_implement,
|
|
3835
|
+
ca_bincmp_not_implement,
|
|
3836
|
+
ca_bincmp_is_close_int8_t,
|
|
3837
|
+
ca_bincmp_is_close_uint8_t,
|
|
3838
|
+
ca_bincmp_is_close_int16_t,
|
|
3839
|
+
ca_bincmp_is_close_uint16_t,
|
|
3840
|
+
ca_bincmp_is_close_int32_t,
|
|
3841
|
+
ca_bincmp_is_close_uint32_t,
|
|
3842
|
+
ca_bincmp_is_close_int64_t,
|
|
3843
|
+
ca_bincmp_is_close_uint64_t,
|
|
3844
|
+
ca_bincmp_is_close_float32_t,
|
|
3845
|
+
ca_bincmp_is_close_float64_t,
|
|
3846
|
+
ca_bincmp_not_implement,
|
|
3847
|
+
ca_bincmp_is_close_cmplx64_t,
|
|
3848
|
+
ca_bincmp_is_close_cmplx128_t,
|
|
3849
|
+
ca_bincmp_not_implement,
|
|
3850
|
+
ca_bincmp_not_implement,
|
|
3851
|
+
};
|
|
3852
|
+
|
|
3853
|
+
VALUE rb_ca_is_close (VALUE self, VALUE other, VALUE tol_val)
|
|
3854
|
+
{
|
|
3855
|
+
double tol = fabs(NUM2DBL(tol_val));
|
|
3856
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
3857
|
+
return rb_funcall(other, rb_intern("is_close"), 2, self, tol_val);
|
|
3858
|
+
}
|
|
3859
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_is_close, tol);
|
|
3860
|
+
}
|
|
3861
|
+
|
|
3862
|
+
/* ===== bincmp is_equiv ============================================ */
|
|
3863
|
+
|
|
3864
|
+
static void
|
|
3865
|
+
ca_bincmp_is_equiv_int8_t (ca_size_t n, boolean8_t *m,
|
|
3866
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3867
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3868
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3869
|
+
double tol)
|
|
3870
|
+
{
|
|
3871
|
+
int8_t *q1 = (int8_t *) ptr1, *q2 = (int8_t *) ptr2;
|
|
3872
|
+
int8_t *p1 = q1, *p2 = q2;
|
|
3873
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3874
|
+
boolean8_t *p3 = q3;
|
|
3875
|
+
ca_size_t k;
|
|
3876
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3877
|
+
|
|
3878
|
+
if ( m ) {
|
|
3879
|
+
boolean8_t *pm;
|
|
3880
|
+
for (k=0; k<n; k++) {
|
|
3881
|
+
pm = m + k;
|
|
3882
|
+
if ( ! *pm ) {
|
|
3883
|
+
p1 = q1 + k*i1;
|
|
3884
|
+
p2 = q2 + k*i2;
|
|
3885
|
+
p3 = q3 + k*i3;
|
|
3886
|
+
{
|
|
3887
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
3888
|
+
double aa = fabs(a), ab = fabs(b);
|
|
3889
|
+
double m = (aa > ab) ? aa : ab;
|
|
3890
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
3891
|
+
}
|
|
3892
|
+
}
|
|
3893
|
+
}
|
|
3894
|
+
} else {
|
|
3895
|
+
for (k=0; k<n; k++) {
|
|
3896
|
+
p1 = q1 + k*i1;
|
|
3897
|
+
p2 = q2 + k*i2;
|
|
3898
|
+
p3 = q3 + k*i3;
|
|
3899
|
+
{
|
|
3900
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
3901
|
+
double aa = fabs(a), ab = fabs(b);
|
|
3902
|
+
double m = (aa > ab) ? aa : ab;
|
|
3903
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
3904
|
+
}
|
|
3905
|
+
}
|
|
3906
|
+
}
|
|
3907
|
+
}
|
|
3908
|
+
|
|
3909
|
+
static void
|
|
3910
|
+
ca_bincmp_is_equiv_uint8_t (ca_size_t n, boolean8_t *m,
|
|
3911
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3912
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3913
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3914
|
+
double tol)
|
|
3915
|
+
{
|
|
3916
|
+
uint8_t *q1 = (uint8_t *) ptr1, *q2 = (uint8_t *) ptr2;
|
|
3917
|
+
uint8_t *p1 = q1, *p2 = q2;
|
|
3918
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3919
|
+
boolean8_t *p3 = q3;
|
|
3920
|
+
ca_size_t k;
|
|
3921
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3922
|
+
|
|
3923
|
+
if ( m ) {
|
|
3924
|
+
boolean8_t *pm;
|
|
3925
|
+
for (k=0; k<n; k++) {
|
|
3926
|
+
pm = m + k;
|
|
3927
|
+
if ( ! *pm ) {
|
|
3928
|
+
p1 = q1 + k*i1;
|
|
3929
|
+
p2 = q2 + k*i2;
|
|
3930
|
+
p3 = q3 + k*i3;
|
|
3931
|
+
{
|
|
3932
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
3933
|
+
double aa = fabs(a), ab = fabs(b);
|
|
3934
|
+
double m = (aa > ab) ? aa : ab;
|
|
3935
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
3936
|
+
}
|
|
3937
|
+
}
|
|
3938
|
+
}
|
|
3939
|
+
} else {
|
|
3940
|
+
for (k=0; k<n; k++) {
|
|
3941
|
+
p1 = q1 + k*i1;
|
|
3942
|
+
p2 = q2 + k*i2;
|
|
3943
|
+
p3 = q3 + k*i3;
|
|
3944
|
+
{
|
|
3945
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
3946
|
+
double aa = fabs(a), ab = fabs(b);
|
|
3947
|
+
double m = (aa > ab) ? aa : ab;
|
|
3948
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
3949
|
+
}
|
|
3950
|
+
}
|
|
3951
|
+
}
|
|
3952
|
+
}
|
|
3953
|
+
|
|
3954
|
+
static void
|
|
3955
|
+
ca_bincmp_is_equiv_int16_t (ca_size_t n, boolean8_t *m,
|
|
3956
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
3957
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
3958
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
3959
|
+
double tol)
|
|
3960
|
+
{
|
|
3961
|
+
int16_t *q1 = (int16_t *) ptr1, *q2 = (int16_t *) ptr2;
|
|
3962
|
+
int16_t *p1 = q1, *p2 = q2;
|
|
3963
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
3964
|
+
boolean8_t *p3 = q3;
|
|
3965
|
+
ca_size_t k;
|
|
3966
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
3967
|
+
|
|
3968
|
+
if ( m ) {
|
|
3969
|
+
boolean8_t *pm;
|
|
3970
|
+
for (k=0; k<n; k++) {
|
|
3971
|
+
pm = m + k;
|
|
3972
|
+
if ( ! *pm ) {
|
|
3973
|
+
p1 = q1 + k*i1;
|
|
3974
|
+
p2 = q2 + k*i2;
|
|
3975
|
+
p3 = q3 + k*i3;
|
|
3976
|
+
{
|
|
3977
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
3978
|
+
double aa = fabs(a), ab = fabs(b);
|
|
3979
|
+
double m = (aa > ab) ? aa : ab;
|
|
3980
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
3981
|
+
}
|
|
3982
|
+
}
|
|
3983
|
+
}
|
|
3984
|
+
} else {
|
|
3985
|
+
for (k=0; k<n; k++) {
|
|
3986
|
+
p1 = q1 + k*i1;
|
|
3987
|
+
p2 = q2 + k*i2;
|
|
3988
|
+
p3 = q3 + k*i3;
|
|
3989
|
+
{
|
|
3990
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
3991
|
+
double aa = fabs(a), ab = fabs(b);
|
|
3992
|
+
double m = (aa > ab) ? aa : ab;
|
|
3993
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
3994
|
+
}
|
|
3995
|
+
}
|
|
3996
|
+
}
|
|
3997
|
+
}
|
|
3998
|
+
|
|
3999
|
+
static void
|
|
4000
|
+
ca_bincmp_is_equiv_uint16_t (ca_size_t n, boolean8_t *m,
|
|
4001
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4002
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4003
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4004
|
+
double tol)
|
|
4005
|
+
{
|
|
4006
|
+
uint16_t *q1 = (uint16_t *) ptr1, *q2 = (uint16_t *) ptr2;
|
|
4007
|
+
uint16_t *p1 = q1, *p2 = q2;
|
|
4008
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4009
|
+
boolean8_t *p3 = q3;
|
|
4010
|
+
ca_size_t k;
|
|
4011
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4012
|
+
|
|
4013
|
+
if ( m ) {
|
|
4014
|
+
boolean8_t *pm;
|
|
4015
|
+
for (k=0; k<n; k++) {
|
|
4016
|
+
pm = m + k;
|
|
4017
|
+
if ( ! *pm ) {
|
|
4018
|
+
p1 = q1 + k*i1;
|
|
4019
|
+
p2 = q2 + k*i2;
|
|
4020
|
+
p3 = q3 + k*i3;
|
|
4021
|
+
{
|
|
4022
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4023
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4024
|
+
double m = (aa > ab) ? aa : ab;
|
|
4025
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4026
|
+
}
|
|
4027
|
+
}
|
|
4028
|
+
}
|
|
4029
|
+
} else {
|
|
4030
|
+
for (k=0; k<n; k++) {
|
|
4031
|
+
p1 = q1 + k*i1;
|
|
4032
|
+
p2 = q2 + k*i2;
|
|
4033
|
+
p3 = q3 + k*i3;
|
|
4034
|
+
{
|
|
4035
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4036
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4037
|
+
double m = (aa > ab) ? aa : ab;
|
|
4038
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4039
|
+
}
|
|
4040
|
+
}
|
|
4041
|
+
}
|
|
4042
|
+
}
|
|
4043
|
+
|
|
4044
|
+
static void
|
|
4045
|
+
ca_bincmp_is_equiv_int32_t (ca_size_t n, boolean8_t *m,
|
|
4046
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4047
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4048
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4049
|
+
double tol)
|
|
4050
|
+
{
|
|
4051
|
+
int32_t *q1 = (int32_t *) ptr1, *q2 = (int32_t *) ptr2;
|
|
4052
|
+
int32_t *p1 = q1, *p2 = q2;
|
|
4053
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4054
|
+
boolean8_t *p3 = q3;
|
|
4055
|
+
ca_size_t k;
|
|
4056
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4057
|
+
|
|
4058
|
+
if ( m ) {
|
|
4059
|
+
boolean8_t *pm;
|
|
4060
|
+
for (k=0; k<n; k++) {
|
|
4061
|
+
pm = m + k;
|
|
4062
|
+
if ( ! *pm ) {
|
|
4063
|
+
p1 = q1 + k*i1;
|
|
4064
|
+
p2 = q2 + k*i2;
|
|
4065
|
+
p3 = q3 + k*i3;
|
|
4066
|
+
{
|
|
4067
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4068
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4069
|
+
double m = (aa > ab) ? aa : ab;
|
|
4070
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4071
|
+
}
|
|
4072
|
+
}
|
|
4073
|
+
}
|
|
4074
|
+
} else {
|
|
4075
|
+
for (k=0; k<n; k++) {
|
|
4076
|
+
p1 = q1 + k*i1;
|
|
4077
|
+
p2 = q2 + k*i2;
|
|
4078
|
+
p3 = q3 + k*i3;
|
|
4079
|
+
{
|
|
4080
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4081
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4082
|
+
double m = (aa > ab) ? aa : ab;
|
|
4083
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4084
|
+
}
|
|
4085
|
+
}
|
|
4086
|
+
}
|
|
4087
|
+
}
|
|
4088
|
+
|
|
4089
|
+
static void
|
|
4090
|
+
ca_bincmp_is_equiv_uint32_t (ca_size_t n, boolean8_t *m,
|
|
4091
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4092
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4093
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4094
|
+
double tol)
|
|
4095
|
+
{
|
|
4096
|
+
uint32_t *q1 = (uint32_t *) ptr1, *q2 = (uint32_t *) ptr2;
|
|
4097
|
+
uint32_t *p1 = q1, *p2 = q2;
|
|
4098
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4099
|
+
boolean8_t *p3 = q3;
|
|
4100
|
+
ca_size_t k;
|
|
4101
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4102
|
+
|
|
4103
|
+
if ( m ) {
|
|
4104
|
+
boolean8_t *pm;
|
|
4105
|
+
for (k=0; k<n; k++) {
|
|
4106
|
+
pm = m + k;
|
|
4107
|
+
if ( ! *pm ) {
|
|
4108
|
+
p1 = q1 + k*i1;
|
|
4109
|
+
p2 = q2 + k*i2;
|
|
4110
|
+
p3 = q3 + k*i3;
|
|
4111
|
+
{
|
|
4112
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4113
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4114
|
+
double m = (aa > ab) ? aa : ab;
|
|
4115
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4116
|
+
}
|
|
4117
|
+
}
|
|
4118
|
+
}
|
|
4119
|
+
} else {
|
|
4120
|
+
for (k=0; k<n; k++) {
|
|
4121
|
+
p1 = q1 + k*i1;
|
|
4122
|
+
p2 = q2 + k*i2;
|
|
4123
|
+
p3 = q3 + k*i3;
|
|
4124
|
+
{
|
|
4125
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4126
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4127
|
+
double m = (aa > ab) ? aa : ab;
|
|
4128
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4129
|
+
}
|
|
4130
|
+
}
|
|
4131
|
+
}
|
|
4132
|
+
}
|
|
4133
|
+
|
|
4134
|
+
static void
|
|
4135
|
+
ca_bincmp_is_equiv_int64_t (ca_size_t n, boolean8_t *m,
|
|
4136
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4137
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4138
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4139
|
+
double tol)
|
|
4140
|
+
{
|
|
4141
|
+
int64_t *q1 = (int64_t *) ptr1, *q2 = (int64_t *) ptr2;
|
|
4142
|
+
int64_t *p1 = q1, *p2 = q2;
|
|
4143
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4144
|
+
boolean8_t *p3 = q3;
|
|
4145
|
+
ca_size_t k;
|
|
4146
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4147
|
+
|
|
4148
|
+
if ( m ) {
|
|
4149
|
+
boolean8_t *pm;
|
|
4150
|
+
for (k=0; k<n; k++) {
|
|
4151
|
+
pm = m + k;
|
|
4152
|
+
if ( ! *pm ) {
|
|
4153
|
+
p1 = q1 + k*i1;
|
|
4154
|
+
p2 = q2 + k*i2;
|
|
4155
|
+
p3 = q3 + k*i3;
|
|
4156
|
+
{
|
|
4157
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4158
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4159
|
+
double m = (aa > ab) ? aa : ab;
|
|
4160
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4161
|
+
}
|
|
4162
|
+
}
|
|
4163
|
+
}
|
|
4164
|
+
} else {
|
|
4165
|
+
for (k=0; k<n; k++) {
|
|
4166
|
+
p1 = q1 + k*i1;
|
|
4167
|
+
p2 = q2 + k*i2;
|
|
4168
|
+
p3 = q3 + k*i3;
|
|
4169
|
+
{
|
|
4170
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4171
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4172
|
+
double m = (aa > ab) ? aa : ab;
|
|
4173
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4174
|
+
}
|
|
4175
|
+
}
|
|
4176
|
+
}
|
|
4177
|
+
}
|
|
4178
|
+
|
|
4179
|
+
static void
|
|
4180
|
+
ca_bincmp_is_equiv_uint64_t (ca_size_t n, boolean8_t *m,
|
|
4181
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4182
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4183
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4184
|
+
double tol)
|
|
4185
|
+
{
|
|
4186
|
+
uint64_t *q1 = (uint64_t *) ptr1, *q2 = (uint64_t *) ptr2;
|
|
4187
|
+
uint64_t *p1 = q1, *p2 = q2;
|
|
4188
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4189
|
+
boolean8_t *p3 = q3;
|
|
4190
|
+
ca_size_t k;
|
|
4191
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4192
|
+
|
|
4193
|
+
if ( m ) {
|
|
4194
|
+
boolean8_t *pm;
|
|
4195
|
+
for (k=0; k<n; k++) {
|
|
4196
|
+
pm = m + k;
|
|
4197
|
+
if ( ! *pm ) {
|
|
4198
|
+
p1 = q1 + k*i1;
|
|
4199
|
+
p2 = q2 + k*i2;
|
|
4200
|
+
p3 = q3 + k*i3;
|
|
4201
|
+
{
|
|
4202
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4203
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4204
|
+
double m = (aa > ab) ? aa : ab;
|
|
4205
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4206
|
+
}
|
|
4207
|
+
}
|
|
4208
|
+
}
|
|
4209
|
+
} else {
|
|
4210
|
+
for (k=0; k<n; k++) {
|
|
4211
|
+
p1 = q1 + k*i1;
|
|
4212
|
+
p2 = q2 + k*i2;
|
|
4213
|
+
p3 = q3 + k*i3;
|
|
4214
|
+
{
|
|
4215
|
+
double a = (double)(*p1), b = (double)(*p2);
|
|
4216
|
+
double aa = fabs(a), ab = fabs(b);
|
|
4217
|
+
double m = (aa > ab) ? aa : ab;
|
|
4218
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs(a - b) / m <= tol) ) ? 1 : 0;
|
|
4219
|
+
}
|
|
4220
|
+
}
|
|
4221
|
+
}
|
|
4222
|
+
}
|
|
4223
|
+
|
|
4224
|
+
static void
|
|
4225
|
+
ca_bincmp_is_equiv_float32_t (ca_size_t n, boolean8_t *m,
|
|
4226
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4227
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4228
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4229
|
+
double tol)
|
|
4230
|
+
{
|
|
4231
|
+
float *q1 = (float *) ptr1, *q2 = (float *) ptr2;
|
|
4232
|
+
float *p1 = q1, *p2 = q2;
|
|
4233
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4234
|
+
boolean8_t *p3 = q3;
|
|
4235
|
+
ca_size_t k;
|
|
4236
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4237
|
+
|
|
4238
|
+
if ( m ) {
|
|
4239
|
+
boolean8_t *pm;
|
|
4240
|
+
for (k=0; k<n; k++) {
|
|
4241
|
+
pm = m + k;
|
|
4242
|
+
if ( ! *pm ) {
|
|
4243
|
+
p1 = q1 + k*i1;
|
|
4244
|
+
p2 = q2 + k*i2;
|
|
4245
|
+
p3 = q3 + k*i3;
|
|
4246
|
+
{
|
|
4247
|
+
float aa = fabs((*p1)), ab = fabs((*p2));
|
|
4248
|
+
float m = (aa > ab) ? aa : ab;
|
|
4249
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
4250
|
+
}
|
|
4251
|
+
}
|
|
4252
|
+
}
|
|
4253
|
+
} else {
|
|
4254
|
+
for (k=0; k<n; k++) {
|
|
4255
|
+
p1 = q1 + k*i1;
|
|
4256
|
+
p2 = q2 + k*i2;
|
|
4257
|
+
p3 = q3 + k*i3;
|
|
4258
|
+
{
|
|
4259
|
+
float aa = fabs((*p1)), ab = fabs((*p2));
|
|
4260
|
+
float m = (aa > ab) ? aa : ab;
|
|
4261
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
4262
|
+
}
|
|
4263
|
+
}
|
|
4264
|
+
}
|
|
4265
|
+
}
|
|
4266
|
+
|
|
4267
|
+
static void
|
|
4268
|
+
ca_bincmp_is_equiv_float64_t (ca_size_t n, boolean8_t *m,
|
|
4269
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4270
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4271
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4272
|
+
double tol)
|
|
4273
|
+
{
|
|
4274
|
+
double *q1 = (double *) ptr1, *q2 = (double *) ptr2;
|
|
4275
|
+
double *p1 = q1, *p2 = q2;
|
|
4276
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4277
|
+
boolean8_t *p3 = q3;
|
|
4278
|
+
ca_size_t k;
|
|
4279
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4280
|
+
|
|
4281
|
+
if ( m ) {
|
|
4282
|
+
boolean8_t *pm;
|
|
4283
|
+
for (k=0; k<n; k++) {
|
|
4284
|
+
pm = m + k;
|
|
4285
|
+
if ( ! *pm ) {
|
|
4286
|
+
p1 = q1 + k*i1;
|
|
4287
|
+
p2 = q2 + k*i2;
|
|
4288
|
+
p3 = q3 + k*i3;
|
|
4289
|
+
{
|
|
4290
|
+
double aa = fabs((*p1)), ab = fabs((*p2));
|
|
4291
|
+
double m = (aa > ab) ? aa : ab;
|
|
4292
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
4293
|
+
}
|
|
4294
|
+
}
|
|
4295
|
+
}
|
|
4296
|
+
} else {
|
|
4297
|
+
for (k=0; k<n; k++) {
|
|
4298
|
+
p1 = q1 + k*i1;
|
|
4299
|
+
p2 = q2 + k*i2;
|
|
4300
|
+
p3 = q3 + k*i3;
|
|
4301
|
+
{
|
|
4302
|
+
double aa = fabs((*p1)), ab = fabs((*p2));
|
|
4303
|
+
double m = (aa > ab) ? aa : ab;
|
|
4304
|
+
(*p3) = ( (*p1) == (*p2) || (m > 0 && fabs((*p1) - (*p2)) / m <= tol) ) ? 1 : 0;
|
|
4305
|
+
}
|
|
4306
|
+
}
|
|
4307
|
+
}
|
|
4308
|
+
}
|
|
4309
|
+
|
|
4310
|
+
static void
|
|
4311
|
+
ca_bincmp_is_equiv_cmplx64_t (ca_size_t n, boolean8_t *m,
|
|
4312
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4313
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4314
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4315
|
+
double tol)
|
|
4316
|
+
{
|
|
4317
|
+
cmplx64_t *q1 = (cmplx64_t *) ptr1, *q2 = (cmplx64_t *) ptr2;
|
|
4318
|
+
cmplx64_t *p1 = q1, *p2 = q2;
|
|
4319
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4320
|
+
boolean8_t *p3 = q3;
|
|
4321
|
+
ca_size_t k;
|
|
4322
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4323
|
+
|
|
4324
|
+
if ( m ) {
|
|
4325
|
+
boolean8_t *pm;
|
|
4326
|
+
for (k=0; k<n; k++) {
|
|
4327
|
+
pm = m + k;
|
|
4328
|
+
if ( ! *pm ) {
|
|
4329
|
+
p1 = q1 + k*i1;
|
|
4330
|
+
p2 = q2 + k*i2;
|
|
4331
|
+
p3 = q3 + k*i3;
|
|
4332
|
+
{
|
|
4333
|
+
double aa = cabs((*p1)), ab = cabs((*p2));
|
|
4334
|
+
double m = (aa > ab) ? aa : ab;
|
|
4335
|
+
(*p3) = ( m > 0 && cabs((*p1) - (*p2)) / m <= tol ) ? 1 : 0;
|
|
4336
|
+
}
|
|
4337
|
+
}
|
|
4338
|
+
}
|
|
4339
|
+
} else {
|
|
4340
|
+
for (k=0; k<n; k++) {
|
|
4341
|
+
p1 = q1 + k*i1;
|
|
4342
|
+
p2 = q2 + k*i2;
|
|
4343
|
+
p3 = q3 + k*i3;
|
|
4344
|
+
{
|
|
4345
|
+
double aa = cabs((*p1)), ab = cabs((*p2));
|
|
4346
|
+
double m = (aa > ab) ? aa : ab;
|
|
4347
|
+
(*p3) = ( m > 0 && cabs((*p1) - (*p2)) / m <= tol ) ? 1 : 0;
|
|
4348
|
+
}
|
|
4349
|
+
}
|
|
4350
|
+
}
|
|
4351
|
+
}
|
|
4352
|
+
|
|
4353
|
+
static void
|
|
4354
|
+
ca_bincmp_is_equiv_cmplx128_t (ca_size_t n, boolean8_t *m,
|
|
4355
|
+
char *ptr1, ca_size_t b1, ca_size_t i1,
|
|
4356
|
+
char *ptr2, ca_size_t b2, ca_size_t i2,
|
|
4357
|
+
char *ptr3, ca_size_t b3, ca_size_t i3,
|
|
4358
|
+
double tol)
|
|
4359
|
+
{
|
|
4360
|
+
cmplx128_t *q1 = (cmplx128_t *) ptr1, *q2 = (cmplx128_t *) ptr2;
|
|
4361
|
+
cmplx128_t *p1 = q1, *p2 = q2;
|
|
4362
|
+
boolean8_t *q3 = (boolean8_t *) ptr3;
|
|
4363
|
+
boolean8_t *p3 = q3;
|
|
4364
|
+
ca_size_t k;
|
|
4365
|
+
(void) b1; (void) b2; (void) b3; /* unused for non-fixlen kernels */
|
|
4366
|
+
|
|
4367
|
+
if ( m ) {
|
|
4368
|
+
boolean8_t *pm;
|
|
4369
|
+
for (k=0; k<n; k++) {
|
|
4370
|
+
pm = m + k;
|
|
4371
|
+
if ( ! *pm ) {
|
|
4372
|
+
p1 = q1 + k*i1;
|
|
4373
|
+
p2 = q2 + k*i2;
|
|
4374
|
+
p3 = q3 + k*i3;
|
|
4375
|
+
{
|
|
4376
|
+
double aa = cabs((*p1)), ab = cabs((*p2));
|
|
4377
|
+
double m = (aa > ab) ? aa : ab;
|
|
4378
|
+
(*p3) = ( m > 0 && cabs((*p1) - (*p2)) / m <= tol ) ? 1 : 0;
|
|
4379
|
+
}
|
|
4380
|
+
}
|
|
4381
|
+
}
|
|
4382
|
+
} else {
|
|
4383
|
+
for (k=0; k<n; k++) {
|
|
4384
|
+
p1 = q1 + k*i1;
|
|
4385
|
+
p2 = q2 + k*i2;
|
|
4386
|
+
p3 = q3 + k*i3;
|
|
4387
|
+
{
|
|
4388
|
+
double aa = cabs((*p1)), ab = cabs((*p2));
|
|
4389
|
+
double m = (aa > ab) ? aa : ab;
|
|
4390
|
+
(*p3) = ( m > 0 && cabs((*p1) - (*p2)) / m <= tol ) ? 1 : 0;
|
|
4391
|
+
}
|
|
4392
|
+
}
|
|
4393
|
+
}
|
|
4394
|
+
}
|
|
4395
|
+
|
|
4396
|
+
ca_bincmp_func_t
|
|
4397
|
+
ca_bincmp_is_equiv[CA_NTYPE] = {
|
|
4398
|
+
ca_bincmp_not_implement,
|
|
4399
|
+
ca_bincmp_not_implement,
|
|
4400
|
+
ca_bincmp_is_equiv_int8_t,
|
|
4401
|
+
ca_bincmp_is_equiv_uint8_t,
|
|
4402
|
+
ca_bincmp_is_equiv_int16_t,
|
|
4403
|
+
ca_bincmp_is_equiv_uint16_t,
|
|
4404
|
+
ca_bincmp_is_equiv_int32_t,
|
|
4405
|
+
ca_bincmp_is_equiv_uint32_t,
|
|
4406
|
+
ca_bincmp_is_equiv_int64_t,
|
|
4407
|
+
ca_bincmp_is_equiv_uint64_t,
|
|
4408
|
+
ca_bincmp_is_equiv_float32_t,
|
|
4409
|
+
ca_bincmp_is_equiv_float64_t,
|
|
4410
|
+
ca_bincmp_not_implement,
|
|
4411
|
+
ca_bincmp_is_equiv_cmplx64_t,
|
|
4412
|
+
ca_bincmp_is_equiv_cmplx128_t,
|
|
4413
|
+
ca_bincmp_not_implement,
|
|
4414
|
+
ca_bincmp_not_implement,
|
|
4415
|
+
};
|
|
4416
|
+
|
|
4417
|
+
VALUE rb_ca_is_equiv (VALUE self, VALUE other, VALUE tol_val)
|
|
4418
|
+
{
|
|
4419
|
+
double tol = fabs(NUM2DBL(tol_val));
|
|
4420
|
+
if ( ! rb_ca_test_castable(other) ) {
|
|
4421
|
+
return rb_funcall(other, rb_intern("is_equiv"), 2, self, tol_val);
|
|
4422
|
+
}
|
|
4423
|
+
return rb_ca_call_bincmp(self, other, ca_bincmp_is_equiv, tol);
|
|
4424
|
+
}
|
|
4425
|
+
|
|
4426
|
+
void
|
|
4427
|
+
Init_carray_kernels_bincmp (void)
|
|
4428
|
+
{
|
|
4429
|
+
rb_define_method(rb_cCArray, "feq", rb_ca_feq, 1);
|
|
4430
|
+
rb_define_method(rb_cCArray, "eq", rb_ca_eq, 1);
|
|
4431
|
+
rb_define_method(rb_cCArray, "ne", rb_ca_ne, 1);
|
|
4432
|
+
rb_define_method(rb_cCArray, "gt", rb_ca_gt, 1);
|
|
4433
|
+
rb_define_method(rb_cCArray, "lt", rb_ca_lt, 1);
|
|
4434
|
+
rb_define_method(rb_cCArray, "ge", rb_ca_ge, 1);
|
|
4435
|
+
rb_define_method(rb_cCArray, "le", rb_ca_le, 1);
|
|
4436
|
+
rb_define_method(rb_cCArray, "match", rb_ca_match, 1);
|
|
4437
|
+
rb_define_method(rb_cCArray, "is_kind_of", rb_ca_is_kind_of, 1);
|
|
4438
|
+
rb_define_alias(rb_cCArray, ">", "gt");
|
|
4439
|
+
rb_define_alias(rb_cCArray, "<", "lt");
|
|
4440
|
+
rb_define_alias(rb_cCArray, ">=", "ge");
|
|
4441
|
+
rb_define_alias(rb_cCArray, "<=", "le");
|
|
4442
|
+
rb_define_alias(rb_cCArray, "=~", "match");
|
|
4443
|
+
rb_define_method(rb_cCArray, "is_close", rb_ca_is_close, 2);
|
|
4444
|
+
rb_define_method(rb_cCArray, "is_equiv", rb_ca_is_equiv, 2);
|
|
4445
|
+
}
|