1 //------------------------------------------------------------------------------
2 // gbdescriptorinfo: print a GraphBLAS descriptor (for illustration only)
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 // Usage:
11 
12 // gbdescriptorinfo
13 // gbdescriptorinfo (desc)
14 
15 #include "gb_matlab.h"
16 
17 #define USAGE "usage: GrB.descriptorinfo or GrB.descriptorinfo (desc)"
18 
mexFunction(int nargout,mxArray * pargout[],int nargin,const mxArray * pargin[])19 void mexFunction
20 (
21     int nargout,
22     mxArray *pargout [ ],
23     int nargin,
24     const mxArray *pargin [ ]
25 )
26 {
27 
28     //--------------------------------------------------------------------------
29     // check inputs
30     //--------------------------------------------------------------------------
31 
32     gb_usage (nargin <= 1 && nargout == 0, USAGE) ;
33 
34     //--------------------------------------------------------------------------
35     // construct the GraphBLAS descriptor
36     //--------------------------------------------------------------------------
37 
38     base_enum_t base = BASE_DEFAULT ;
39     kind_enum_t kind = KIND_GRB ;
40     GxB_Format_Value fmt = GxB_NO_FORMAT ;
41     int sparsity = 0 ;
42     GrB_Descriptor desc = NULL ;
43     if (nargin > 0)
44     {
45         desc = gb_mxarray_to_descriptor (pargin [nargin-1], &kind, &fmt,
46             &sparsity, &base) ;
47     }
48 
49     if (desc == NULL)
50     {
51         printf ("\nDefault GraphBLAS descriptor:\n") ;
52         OK (GrB_Descriptor_new (&desc)) ;
53     }
54 
55     //--------------------------------------------------------------------------
56     // print the GraphBLAS descriptor
57     //--------------------------------------------------------------------------
58 
59     OK (GxB_Descriptor_fprint (desc, "", GxB_COMPLETE, NULL)) ;
60 
61     //--------------------------------------------------------------------------
62     // print the extra terms in the MATLAB interface descriptor
63     //--------------------------------------------------------------------------
64 
65     printf ("    d.kind     = ") ;
66     switch (kind)
67     {
68         case KIND_SPARSE : printf ("sparse\n")  ; break ;
69         case KIND_FULL   : printf ("full\n")    ; break ;
70         case KIND_MATLAB : printf ("matlab\n")  ; break ;
71         case KIND_GRB    :
72         default          : printf ("GrB\n")     ; break ;
73     }
74 
75     printf ("    d.base     = ") ;
76     switch (base)
77     {
78         case BASE_0_INT64  : printf ("zero-based\n")    ; break ;
79         case BASE_1_INT64  : printf ("one-based int\n") ; break ;
80         case BASE_1_DOUBLE : printf ("one-based\n")     ; break ;
81         case BASE_DEFAULT  :
82         default            : printf ("default\n")       ; break ;
83     }
84 
85     printf ("    d.format   = ") ;
86 
87     switch (sparsity)
88     {
89         case GxB_HYPERSPARSE :                              // 1
90             printf ("hypersparse ") ;
91             break ;
92         case GxB_SPARSE :                                   // 2
93             printf ("sparse ") ;
94             break ;
95         case GxB_HYPERSPARSE + GxB_SPARSE :                 // 3
96             printf ("hypersparse/sparse ") ;
97             break ;
98         case GxB_BITMAP :                                   // 4
99             printf ("bitmap ") ;
100             break ;
101         case GxB_HYPERSPARSE + GxB_BITMAP :                 // 5
102             printf ("hypersparse/bitmap ") ;
103             break ;
104         case GxB_SPARSE + GxB_BITMAP :                      // 6
105             printf ("sparse/bitmap ") ;
106             break ;
107         case GxB_HYPERSPARSE + GxB_SPARSE + GxB_BITMAP :    // 7
108             printf ("hypersparse/sparse/bitmap ") ;
109             break ;
110         case GxB_FULL :                                     // 8
111             printf ("full ") ;
112             break ;
113         case GxB_HYPERSPARSE + GxB_FULL :                   // 9
114             printf ("hypersparse/full ") ;
115             break ;
116         case GxB_SPARSE + GxB_FULL :                        // 10
117             printf ("sparse/full ") ;
118             break ;
119         default :
120         case GxB_HYPERSPARSE + GxB_SPARSE + GxB_FULL :      // 11
121             // printf ("hypersparse/sparse/full ") ;
122             break ;
123         case GxB_BITMAP + GxB_FULL :                        // 12
124             printf ("bitmap/full ") ;
125             break ;
126         case GxB_HYPERSPARSE + GxB_BITMAP + GxB_FULL :      // 13
127             printf ("hypersparse/bitmap/full ") ;
128             break ;
129         case GxB_SPARSE + GxB_BITMAP + GxB_FULL :           // 14
130             printf ("sparse/bitmap/full ") ;
131             break ;
132         case GxB_HYPERSPARSE + GxB_SPARSE + GxB_BITMAP + GxB_FULL : // 15
133             printf ("hypersparse/sparse/bitmap/full ") ;
134             break ;
135     }
136 
137     switch (fmt)
138     {
139         case GxB_BY_ROW    : printf ("by row\n")     ; break ;
140         case GxB_BY_COL    : printf ("by col\n")     ; break ;
141         case GxB_NO_FORMAT :
142         default            : printf ("by default\n") ; break ;
143     }
144 
145     //--------------------------------------------------------------------------
146     // free the descriptor
147     //--------------------------------------------------------------------------
148 
149     OK (GrB_Descriptor_free (&desc)) ;
150     GB_WRAPUP ;
151 }
152 
153