MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / reduce_all_promote

Function reduce_all_promote

src/api/c/reduce.cpp:727–786  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

725
726template<af_op_t op>
727static af_err reduce_all_promote(double *real_val, double *imag_val,
728 const af_array in, bool change_nan = false,
729 double nanval = 0) {
730 try {
731 const ArrayInfo &in_info = getInfo(in);
732 af_dtype type = in_info.getType();
733
734 ARG_ASSERT(0, real_val != nullptr);
735 *real_val = 0;
736 if (imag_val) { *imag_val = 0; }
737
738 cfloat cfval;
739 cdouble cdval;
740
741 switch (type) {
742 // clang-format off
743 case f32: *real_val = reduce_all<op, float, float>(in, change_nan, nanval); break;
744 case f64: *real_val = reduce_all<op, double, double>(in, change_nan, nanval); break;
745 case u32: *real_val = reduce_all<op, uint, uint>(in, change_nan, nanval); break;
746 case s32: *real_val = reduce_all<op, int, int>(in, change_nan, nanval); break;
747 case u64: *real_val = reduce_all<op, uintl, uintl>(in, change_nan, nanval); break;
748 case s64: *real_val = reduce_all<op, intl, intl>(in, change_nan, nanval); break;
749 case u16: *real_val = reduce_all<op, ushort, uint>(in, change_nan, nanval); break;
750 case s16: *real_val = reduce_all<op, short, int>(in, change_nan, nanval); break;
751 case u8: *real_val = reduce_all<op, uchar, uint>(in, change_nan, nanval); break;
752 case s8: *real_val = reduce_all<op, schar, int>(in, change_nan, nanval); break;
753 // clang-format on
754 case b8: {
755 if (op == af_mul_t) {
756 *real_val = reduce_all<af_and_t, char, char>(in, change_nan,
757 nanval);
758 } else {
759 *real_val = reduce_all<af_notzero_t, char, uint>(
760 in, change_nan, nanval);
761 }
762 } break;
763 case c32:
764 cfval = reduce_all<op, cfloat, cfloat, cfloat>(in);
765 ARG_ASSERT(1, imag_val != nullptr);
766 *real_val = real(cfval);
767 *imag_val = imag(cfval);
768 break;
769
770 case c64:
771 cdval = reduce_all<op, cdouble, cdouble, cdouble>(in);
772 ARG_ASSERT(1, imag_val != nullptr);
773 *real_val = real(cdval);
774 *imag_val = imag(cdval);
775 break;
776 case f16:
777 *real_val = reduce_all<op, half, float>(in, change_nan, nanval);
778 break;
779
780 default: TYPE_ERROR(1, type);
781 }
782 }
783 CATCHALL;
784

Callers

nothing calls this directly

Calls 3

realFunction · 0.50
imagFunction · 0.50
getTypeMethod · 0.45

Tested by

no test coverage detected