1 //------------------------------------------------------------------------------
2 // GB_Type_check: print a built-in type
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 // There are two character strings: name passed in from the caller, and
11 // type->name. The caller can use the name argument to print "the type of
12 // matrix A:", for example. The internal name is the C typedef with which the
13 // GraphBLAS GrB_Type was created.
14
15 #include "GB.h"
16
17 GB_PUBLIC // accessed by the MATLAB tests in GraphBLAS/Test only
GB_Type_check(const GrB_Type type,const char * name,int pr,FILE * f)18 GrB_Info GB_Type_check // check a GraphBLAS Type
19 (
20 const GrB_Type type, // GraphBLAS type to print and check
21 const char *name, // name of the type from the caller; optional
22 int pr, // print level
23 FILE *f // file for output
24 )
25 {
26
27 //--------------------------------------------------------------------------
28 // check inputs
29 //--------------------------------------------------------------------------
30
31 GBPR0 (" GraphBLAS type: ") ;
32 if (name != NULL) GBPR0 ("%s ", name) ;
33
34 if (type == NULL)
35 {
36 GBPR0 ("NULL\n") ;
37 return (GrB_NULL_POINTER) ;
38 }
39
40 //--------------------------------------------------------------------------
41 // check object
42 //--------------------------------------------------------------------------
43
44 GB_CHECK_MAGIC (type, "Type") ;
45
46 switch (type->code)
47 {
48 case GB_BOOL_code : GBPR0 ("bool" ) ; break ;
49 case GB_INT8_code : GBPR0 ("int8_t" ) ; break ;
50 case GB_UINT8_code : GBPR0 ("uint8_t" ) ; break ;
51 case GB_INT16_code : GBPR0 ("int16_t" ) ; break ;
52 case GB_UINT16_code : GBPR0 ("uint16_t" ) ; break ;
53 case GB_INT32_code : GBPR0 ("int32_t" ) ; break ;
54 case GB_UINT32_code : GBPR0 ("uint32_t" ) ; break ;
55 case GB_INT64_code : GBPR0 ("int64_t" ) ; break ;
56 case GB_UINT64_code : GBPR0 ("uint64_t" ) ; break ;
57 case GB_FP32_code : GBPR0 ("float" ) ; break ;
58 case GB_FP64_code : GBPR0 ("double" ) ; break ;
59 case GB_FC32_code : GBPR0 ("float complex" ) ; break ;
60 case GB_FC64_code : GBPR0 ("double complex") ; break ;
61 case GB_UDT_code : GBPR0 ("user-defined: [%s]", type->name) ; break ;
62 default : GBPR0 ("unknown type\n") ;
63 return (GrB_INVALID_OBJECT) ;
64 }
65
66 GBPR0 (" size: %zu\n", type->size) ;
67
68 if (type->size == 0 || type->size != GB_code_size (type->code, type->size))
69 {
70 GBPR0 (" Type has an invalid size\n") ;
71 return (GrB_INVALID_OBJECT) ;
72 }
73
74 return (GrB_SUCCESS) ;
75 }
76
77