Line data Source code
1 : //------------------------------------------------------------------------------ 2 : // LAGraph_NameOfType: return the C name of a GraphBLAS GrB_Type 3 : //------------------------------------------------------------------------------ 4 : 5 : // LAGraph, (c) 2019-2023 by The LAGraph Contributors, All Rights Reserved. 6 : // SPDX-License-Identifier: BSD-2-Clause 7 : // 8 : // For additional details (including references to third party source code and 9 : // other files) see the LICENSE file or contact permission@sei.cmu.edu. See 10 : // Contributors.txt for a full list of contributors. Created, in part, with 11 : // funding and support from the U.S. Government (see Acknowledgments.txt file). 12 : // DM22-0790 13 : 14 : // Contributed by Timothy A. Davis, Texas A&M University 15 : 16 : //------------------------------------------------------------------------------ 17 : 18 : #define LG_FREE_WORK LAGraph_Free ((void **) &s, NULL) ; 19 : #define LG_FREE_ALL LG_FREE_WORK 20 : 21 : #include "LG_internal.h" 22 : 23 16 : int LAGraph_NameOfType 24 : ( 25 : // output: 26 : char *name, // name of the type: user provided array of size at 27 : // least LAGRAPH_MAX_NAME_LEN. 28 : // input: 29 : GrB_Type type, // GraphBLAS type 30 : char *msg 31 : ) 32 : { 33 : 34 : //-------------------------------------------------------------------------- 35 : // check inputs 36 : //-------------------------------------------------------------------------- 37 : 38 16 : char *s = NULL ; 39 16 : LG_CLEAR_MSG ; 40 16 : LG_ASSERT (type != NULL, GrB_NULL_POINTER) ; 41 14 : LG_ASSERT (name != NULL, GrB_NULL_POINTER) ; 42 : 43 : //-------------------------------------------------------------------------- 44 : // determine the name of the type 45 : //-------------------------------------------------------------------------- 46 : 47 : size_t len ; 48 13 : name [0] = '\0' ; 49 : 50 : int32_t typecode ; 51 13 : GRB_TRY (GrB_Type_get_INT32 (type, &typecode, GrB_EL_TYPE_CODE)) ; 52 : 53 13 : switch (typecode) 54 : { 55 : 56 : // for user-defined types, return the GrB_NAME of the type 57 2 : default : 58 : case GrB_UDT_CODE : 59 2 : GRB_TRY (GrB_Type_get_SIZE (type, &len, GrB_NAME)) ; 60 2 : LG_TRY (LAGraph_Malloc ((void **) &s, len+1, sizeof (char), msg)) ; 61 2 : GRB_TRY (GrB_Type_get_String (type, s, GrB_NAME)) ; 62 2 : len = LAGRAPH_MIN (len, LAGRAPH_MAX_NAME_LEN) ; 63 2 : strncpy (name, s, len) ; 64 2 : name [LAGRAPH_MAX_NAME_LEN-1] = '\0' ; 65 2 : LG_FREE_WORK ; 66 2 : break ; 67 : 68 : // for built-in types, return the C type name 69 1 : case GrB_BOOL_CODE : strcpy (name, "bool" ) ; break ; 70 1 : case GrB_INT8_CODE : strcpy (name, "int8_t" ) ; break ; 71 1 : case GrB_INT16_CODE : strcpy (name, "int16_t" ) ; break ; 72 1 : case GrB_INT32_CODE : strcpy (name, "int32_t" ) ; break ; 73 1 : case GrB_INT64_CODE : strcpy (name, "int64_t" ) ; break ; 74 1 : case GrB_UINT8_CODE : strcpy (name, "uint8_t" ) ; break ; 75 1 : case GrB_UINT16_CODE : strcpy (name, "uint16_t") ; break ; 76 1 : case GrB_UINT32_CODE : strcpy (name, "uint32_t") ; break ; 77 1 : case GrB_UINT64_CODE : strcpy (name, "uint64_t") ; break ; 78 1 : case GrB_FP32_CODE : strcpy (name, "float" ) ; break ; 79 1 : case GrB_FP64_CODE : strcpy (name, "double" ) ; break ; 80 : // case GxB_FC32_CODE : strcpy (name, "float complex" ) ; break ; 81 : // case GxB_FC64_CODE : strcpy (name, "double complex" ) ; break ; 82 : } 83 13 : return (GrB_SUCCESS) ; 84 : } 85 :