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)15 GrB_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