1 //------------------------------------------------------------------------------
2 // GB_positional_unop_ijflip: swap i and j in a unary 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 unary positional ops.
11 
12 #include "GB.h"
13 
GB_positional_unop_ijflip(GrB_UnaryOp op)14 GrB_UnaryOp GB_positional_unop_ijflip   // return flipped operator
15 (
16     GrB_UnaryOp op                      // operator to flip
17 )
18 {
19 
20     ASSERT (op != NULL) ;
21 
22     if (op->ztype == GrB_INT64)
23     {
24         switch (op->opcode)
25         {
26             case GB_POSITIONI_opcode  : return (GxB_POSITIONJ_INT64 ) ;
27             case GB_POSITIONI1_opcode : return (GxB_POSITIONJ1_INT64) ;
28             case GB_POSITIONJ_opcode  : return (GxB_POSITIONI_INT64 ) ;
29             case GB_POSITIONJ1_opcode : return (GxB_POSITIONI1_INT64) ;
30             // non-positional op is returned unmodified
31             default                   : return (op) ;
32         }
33     }
34     else
35     {
36         switch (op->opcode)
37         {
38             case GB_POSITIONI_opcode  : return (GxB_POSITIONJ_INT32 ) ;
39             case GB_POSITIONI1_opcode : return (GxB_POSITIONJ1_INT32) ;
40             case GB_POSITIONJ_opcode  : return (GxB_POSITIONI_INT32 ) ;
41             case GB_POSITIONJ1_opcode : return (GxB_POSITIONI1_INT32) ;
42             // non-positional op is returned unmodified
43             default                   : return (op) ;
44         }
45     }
46 }
47 
48