1 //------------------------------------------------------------------------------
2 // gb_string_to_selectop: get a GraphBLAS select operator from a string
3 //------------------------------------------------------------------------------
4 
5 // SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2021, All Rights Reserved.
6 // SPDX-License-Identifier: GPL-3.0-or-later
7 
8 //------------------------------------------------------------------------------
9 
10 #include "gb_matlab.h"
11 
12 //  select operators, with their equivalent aliases
13 
gb_string_to_selectop(char * opstring)14 GxB_SelectOp gb_string_to_selectop      // return select operator from a string
15 (
16     char *opstring                      // string defining the operator
17 )
18 {
19 
20     //--------------------------------------------------------------------------
21     // check inputs
22     //--------------------------------------------------------------------------
23 
24     CHECK_ERROR (opstring == NULL || opstring [0] == '\0', "invalid selectop") ;
25 
26     //--------------------------------------------------------------------------
27     // convert the string to a GraphBLAS select operator
28     //--------------------------------------------------------------------------
29 
30     if (MATCH (opstring, "tril"))
31     {
32         return (GxB_TRIL) ;
33     }
34     else if (MATCH (opstring, "triu"))
35     {
36         return (GxB_TRIU) ;
37     }
38     else if (MATCH (opstring, "diag"))
39     {
40         return (GxB_DIAG) ;
41     }
42     else if (MATCH (opstring, "offdiag"))
43     {
44         return (GxB_OFFDIAG) ;
45     }
46     else if (MATCH (opstring, "nonzero") || MATCH (opstring, "~=0"))
47     {
48         return (GxB_NONZERO) ;
49     }
50     else if (MATCH (opstring, "zero") || MATCH (opstring, "==0"))
51     {
52         return (GxB_EQ_ZERO) ;
53     }
54     else if (MATCH (opstring, "positive") || MATCH (opstring, ">0"))
55     {
56         return (GxB_GT_ZERO) ;
57     }
58     else if (MATCH (opstring, "nonnegative") || MATCH (opstring, ">=0"))
59     {
60         return (GxB_GE_ZERO) ;
61     }
62     else if (MATCH (opstring, "negative") || MATCH (opstring, "<0"))
63     {
64         return (GxB_LT_ZERO) ;
65     }
66     else if (MATCH (opstring, "nonpositive") || MATCH (opstring, "<=0"))
67     {
68         return (GxB_LE_ZERO) ;
69     }
70     else if (MATCH (opstring, "~="))
71     {
72         return (GxB_NE_THUNK) ;
73     }
74     else if (MATCH (opstring, "=="))
75     {
76         return (GxB_EQ_THUNK) ;
77     }
78     else if (MATCH (opstring, ">"))
79     {
80         return (GxB_GT_THUNK) ;
81     }
82     else if (MATCH (opstring, ">="))
83     {
84         return (GxB_GE_THUNK) ;
85     }
86     else if (MATCH (opstring, "<"))
87     {
88         return (GxB_LT_THUNK) ;
89     }
90     else if (MATCH (opstring, "<="))
91     {
92         return (GxB_LE_THUNK) ;
93     }
94 
95     ERROR2 ("selectop unknown: %s\n", opstring) ;
96     return (NULL) ;
97 }
98 
99