1 //------------------------------------------------------------------------------ 2 // GB_positional_binop_ijflip: swap i and j in a binary positional op 3 //------------------------------------------------------------------------------ 4 5 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved. 6 // SPDX-License-Identifier: Apache-2.0 7 8 //------------------------------------------------------------------------------ 9 10 // Flip i and j to handle the CSR/CSC variations, for ewise positional ops. 11 // This is not used for semirings. 12 13 #include "GB.h" 14 GB_positional_binop_ijflip(GrB_BinaryOp op)15GrB_BinaryOp GB_positional_binop_ijflip // return flipped operator 16 ( 17 GrB_BinaryOp op // operator to flip 18 ) 19 { 20 21 ASSERT (op != NULL) ; 22 23 if (op->ztype == GrB_INT64) 24 { 25 switch (op->opcode) 26 { 27 case GB_FIRSTI_opcode : return (GxB_FIRSTJ_INT64 ) ; 28 case GB_FIRSTI1_opcode : return (GxB_FIRSTJ1_INT64 ) ; 29 case GB_FIRSTJ_opcode : return (GxB_FIRSTI_INT64 ) ; 30 case GB_FIRSTJ1_opcode : return (GxB_FIRSTI1_INT64 ) ; 31 case GB_SECONDI_opcode : return (GxB_SECONDJ_INT64 ) ; 32 case GB_SECONDI1_opcode : return (GxB_SECONDJ1_INT64) ; 33 case GB_SECONDJ_opcode : return (GxB_SECONDI_INT64 ) ; 34 case GB_SECONDJ1_opcode : return (GxB_SECONDI1_INT64) ; 35 default: ; 36 } 37 } 38 else 39 { 40 switch (op->opcode) 41 { 42 case GB_FIRSTI_opcode : return (GxB_FIRSTJ_INT32 ) ; 43 case GB_FIRSTI1_opcode : return (GxB_FIRSTJ1_INT32 ) ; 44 case GB_FIRSTJ_opcode : return (GxB_FIRSTI_INT32 ) ; 45 case GB_FIRSTJ1_opcode : return (GxB_FIRSTI1_INT32 ) ; 46 case GB_SECONDI_opcode : return (GxB_SECONDJ_INT32 ) ; 47 case GB_SECONDI1_opcode : return (GxB_SECONDJ1_INT32) ; 48 case GB_SECONDJ_opcode : return (GxB_SECONDI_INT32 ) ; 49 case GB_SECONDJ1_opcode : return (GxB_SECONDI1_INT32) ; 50 default: ; 51 } 52 } 53 54 // non-positional op is returned unmodified 55 return (op) ; 56 } 57 58