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