/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * Copyright by the Board of Trustees of the University of Illinois. * * All rights reserved. * * * * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the files COPYING and Copyright.html. COPYING can be found at the root * * of the source code distribution tree; Copyright.html can be found at the * * root level of an installed copy of the electronic HDF5 document set and * * is linked from the top-level documents page. It can also be found at * * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * * access to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "H5private.h" #include "h5tools.h" /*------------------------------------------------------------------------- * Function: h5tools_get_native_type * * Purpose: Wrapper around H5Tget_native_type() to work around * Problems with bitfields. * * Return: Success: datatype ID * * Failure: FAIL * * Programmer: Quincey Koziol * Tuesday, October 5, 2004 * * Modifications: * *------------------------------------------------------------------------- */ hid_t h5tools_get_native_type(hid_t type) { hid_t p_type; H5T_class_t type_class; type_class = H5Tget_class(type); if(type_class==H5T_BITFIELD) p_type=H5Tcopy(type); else p_type = H5Tget_native_type(type,H5T_DIR_DEFAULT); return(p_type); } /*------------------------------------------------------------------------- * Function: h5tools_get_little_endian_type * * Purpose: Get a little endian type from a file type * * Return: Success: datatype ID * Failure: FAIL * * Programmer: Pedro Vicente Nunes * Tuesday, July 18, 2006 * * Modifications: * *------------------------------------------------------------------------- */ hid_t h5tools_get_little_endian_type(hid_t tid) { hid_t p_type=-1; H5T_class_t type_class; size_t size; H5T_sign_t sign; type_class = H5Tget_class(tid); size = H5Tget_size(tid); sign = H5Tget_sign(tid); switch(type_class) { case H5T_INTEGER: if ( size == 1 && sign == H5T_SGN_2) p_type=H5Tcopy(H5T_STD_I8LE); else if ( size == 2 && sign == H5T_SGN_2) p_type=H5Tcopy(H5T_STD_I16LE); else if ( size == 4 && sign == H5T_SGN_2) p_type=H5Tcopy(H5T_STD_I32LE); else if ( size == 8 && sign == H5T_SGN_2) p_type=H5Tcopy(H5T_STD_I64LE); else if ( size == 1 && sign == H5T_SGN_NONE) p_type=H5Tcopy(H5T_STD_U8LE); else if ( size == 2 && sign == H5T_SGN_NONE) p_type=H5Tcopy(H5T_STD_U16LE); else if ( size == 4 && sign == H5T_SGN_NONE) p_type=H5Tcopy(H5T_STD_U32LE); else if ( size == 8 && sign == H5T_SGN_NONE) p_type=H5Tcopy(H5T_STD_U64LE); break; case H5T_FLOAT: if ( size == 4) p_type=H5Tcopy(H5T_IEEE_F32LE); else if ( size == 8) p_type=H5Tcopy(H5T_IEEE_F64LE); break; case H5T_TIME: case H5T_BITFIELD: case H5T_OPAQUE: case H5T_STRING: case H5T_COMPOUND: case H5T_REFERENCE: case H5T_ENUM: case H5T_VLEN: case H5T_ARRAY: break; case H5T_NO_CLASS: case H5T_NCLASSES: default: HDassert(0); break; } /* end switch */ return p_type; } /* end h5tools_get_little_endian_type() */ /*------------------------------------------------------------------------- * Function: h5tools_get_big_endian_type * * Purpose: Get a big endian type from a file type * * Return: Success: datatype ID * Failure: FAIL * * Programmer: Pedro Vicente Nunes * Tuesday, July 18, 2006 * * Modifications: * *------------------------------------------------------------------------- */ hid_t h5tools_get_big_endian_type(hid_t tid) { hid_t p_type=-1; H5T_class_t type_class; size_t size; H5T_sign_t sign; type_class = H5Tget_class(tid); size = H5Tget_size(tid); sign = H5Tget_sign(tid); switch(type_class) { case H5T_INTEGER: if ( size == 1 && sign == H5T_SGN_2) p_type=H5Tcopy(H5T_STD_I8BE); else if ( size == 2 && sign == H5T_SGN_2) p_type=H5Tcopy(H5T_STD_I16BE); else if ( size == 4 && sign == H5T_SGN_2) p_type=H5Tcopy(H5T_STD_I32BE); else if ( size == 8 && sign == H5T_SGN_2) p_type=H5Tcopy(H5T_STD_I64BE); else if ( size == 1 && sign == H5T_SGN_NONE) p_type=H5Tcopy(H5T_STD_U8BE); else if ( size == 2 && sign == H5T_SGN_NONE) p_type=H5Tcopy(H5T_STD_U16BE); else if ( size == 4 && sign == H5T_SGN_NONE) p_type=H5Tcopy(H5T_STD_U32BE); else if ( size == 8 && sign == H5T_SGN_NONE) p_type=H5Tcopy(H5T_STD_U64BE); break; case H5T_FLOAT: if ( size == 4) p_type=H5Tcopy(H5T_IEEE_F32BE); else if ( size == 8) p_type=H5Tcopy(H5T_IEEE_F64BE); break; case H5T_TIME: case H5T_BITFIELD: case H5T_OPAQUE: case H5T_STRING: case H5T_COMPOUND: case H5T_REFERENCE: case H5T_ENUM: case H5T_VLEN: case H5T_ARRAY: break; case H5T_NO_CLASS: case H5T_NCLASSES: default: HDassert(0); break; } /* end switch */ return p_type; } /* end h5tools_get_big_endian_type() */