//------------------------------------------------------------------------------ // GB_red: hard-coded functions for reductions //------------------------------------------------------------------------------ // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2023, All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 //------------------------------------------------------------------------------ #include "GB.h" #include "GB_control.h" #include "GB_red__include.h" // reduction operator and type: GB_update_op GB_add_op GB_geta_and_update // A matrix (no typecasting to Z type here) GB_atype GB_declarea GB_geta // monoid properties: GB_ztype GB_declare_identity GB_declare_const_identity GB_is_any_monoid GB_monoid_is_terminal GB_terminal_condition GB_if_terminal_break GB_declare_const_terminal // panel size GB_panel // disable this operator and use the generic case if these conditions hold GB_disable #include "GB_monoid_shared_definitions.h" //------------------------------------------------------------------------------ // reduce to a non-iso matrix to scalar, for monoids only //------------------------------------------------------------------------------ GrB_Info GB (_red) ( GB_Z_TYPE *result, const GrB_Matrix A, GB_void *restrict W_space, bool *restrict F, int ntasks, int nthreads ) { #if GB_DISABLE return (GrB_NO_VALUE) ; #else GB_Z_TYPE z = (*result) ; GB_Z_TYPE *restrict W = (GB_Z_TYPE *) W_space ; if (A->nzombies > 0 || GB_IS_BITMAP (A)) { #include "GB_reduce_to_scalar_template.c" } else { #include "GB_reduce_panel.c" } (*result) = z ; return (GrB_SUCCESS) ; #endif }