//------------------------------------------------------------------------------ // GB_as: assign/subassign kernels with no accum //------------------------------------------------------------------------------ // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2023, All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 //------------------------------------------------------------------------------ // C(I,J) = A #include "GB.h" #include "GB_control.h" #include "GB_ek_slice.h" #include "GB_as__include.h" // A and C matrices #define GB_A_TYPE uint8_t #define GB_C_TYPE uint8_t #define GB_DECLAREC(cwork) uint8_t cwork #define GB_COPY_aij_to_cwork(cwork,Ax,pA,A_iso) cwork = Ax [A_iso ? 0 : (pA)] #define GB_COPY_aij_to_C(Cx,pC,Ax,pA,A_iso,cwork) Cx [pC] = (A_iso) ? cwork : Ax [pA] #define GB_COPY_scalar_to_C(Cx,pC,cwork) Cx [pC] = cwork #define GB_AX_MASK(Ax,pA,asize) (Ax [pA] != 0) // disable this operator and use the generic case if these conditions hold #if (defined(GxB_NO_UINT8)) #define GB_DISABLE 1 #else #define GB_DISABLE 0 #endif #include "GB_assign_shared_definitions.h" //------------------------------------------------------------------------------ // C = scalar, when C is dense //------------------------------------------------------------------------------ GrB_Info GB (_subassign_05d__uint8) ( GrB_Matrix C, const GrB_Matrix M, const bool Mask_struct, const GB_void *scalar, // of type C->type GB_Werk Werk ) { #if GB_DISABLE return (GrB_NO_VALUE) ; #else GB_C_TYPE cwork = (*((GB_C_TYPE *) scalar)) ; int nthreads_max = GB_Context_nthreads_max ( ) ; double chunk = GB_Context_chunk ( ) ; #include "GB_subassign_05d_template.c" return (GrB_SUCCESS) ; #endif } //------------------------------------------------------------------------------ // C = A, when C is dense //------------------------------------------------------------------------------ GrB_Info GB (_subassign_06d__uint8) ( GrB_Matrix C, const GrB_Matrix A, const bool Mask_struct, GB_Werk Werk ) { #if GB_DISABLE return (GrB_NO_VALUE) ; #else ASSERT (C->type == A->type) ; int nthreads_max = GB_Context_nthreads_max ( ) ; double chunk = GB_Context_chunk ( ) ; #include "GB_subassign_06d_template.c" return (GrB_SUCCESS) ; #endif } //------------------------------------------------------------------------------ // C = A, when C is empty and A is dense //------------------------------------------------------------------------------ GrB_Info GB (_subassign_25__uint8) ( GrB_Matrix C, const GrB_Matrix M, const GrB_Matrix A, GB_Werk Werk ) { #if GB_DISABLE return (GrB_NO_VALUE) ; #else ASSERT (C->type == A->type) ; int nthreads_max = GB_Context_nthreads_max ( ) ; double chunk = GB_Context_chunk ( ) ; #include "GB_subassign_25_template.c" return (GrB_SUCCESS) ; #endif }