//------------------------------------------------------------------------------
// GB_code_size: given a type code, return sizeof (type)
//------------------------------------------------------------------------------

// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2019, All Rights Reserved.
// http://suitesparse.com   See GraphBLAS/Doc/License.txt for license.

//------------------------------------------------------------------------------

// The user-defined type has no known size, so this must be provided on input.

// not parallel: this function does O(1) work and is already thread-safe.

#include "GB.h"

size_t GB_code_size             // return the size of a type, given its code
(
    const GB_Type_code code,    // input code of the type to find the size of
    const size_t usize          // known size of user-defined type
)
{

    switch (code)
    {
        case GB_BOOL_code   : return (sizeof (bool))     ;
        case GB_INT8_code   : return (sizeof (int8_t))   ;
        case GB_UINT8_code  : return (sizeof (uint8_t))  ;
        case GB_INT16_code  : return (sizeof (int16_t))  ;
        case GB_UINT16_code : return (sizeof (uint16_t)) ;
        case GB_INT32_code  : return (sizeof (int32_t))  ;
        case GB_UINT32_code : return (sizeof (uint32_t)) ;
        case GB_INT64_code  : return (sizeof (int64_t))  ;
        case GB_UINT64_code : return (sizeof (uint64_t)) ;
        case GB_FP32_code   : return (sizeof (float))    ;
        case GB_FP64_code   : return (sizeof (double))   ;
        case GB_UCT_code    :
        case GB_UDT_code    : return (usize) ;
        default             : return (0) ;
    }
}

