diff options
Diffstat (limited to 'fortran/src/H5Tff.F90')
| -rw-r--r-- | fortran/src/H5Tff.F90 | 2171 |
1 files changed, 2171 insertions, 0 deletions
diff --git a/fortran/src/H5Tff.F90 b/fortran/src/H5Tff.F90 new file mode 100644 index 0000000..006aa79 --- /dev/null +++ b/fortran/src/H5Tff.F90 @@ -0,0 +1,2171 @@ +!> @defgroup FH5T Fortran Datatype (H5T) Interface +!! +!! @see H5T, C-API +!! +!! @see @ref H5T_UG, User Guide +!! + +!> @ingroup FH5T +!! +!! @brief This module contains Fortran interfaces for H5T functions. +! +! COPYRIGHT +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! Copyright by The HDF Group. * +! 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 COPYING file, which can be found at the root of the source code * +! distribution tree, or in https://www.hdfgroup.org/licenses. * +! If you do not have access to either file, you may request a copy from * +! help@hdfgroup.org. * +! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +! +! NOTES +! +! _____ __ __ _____ ____ _____ _______ _ _ _______ +! |_ _| \/ | __ \ / __ \| __ \__ __|/\ | \ | |__ __| +! **** | | | \ / | |__) | | | | |__) | | | / \ | \| | | | **** +! **** | | | |\/| | ___/| | | | _ / | | / /\ \ | . ` | | | **** +! **** _| |_| | | | | | |__| | | \ \ | |/ ____ \| |\ | | | **** +! |_____|_| |_|_| \____/|_| \_\ |_/_/ \_\_| \_| |_| +! +! If you add a new function here then you MUST add the function name to the +! Windows dll file 'hdf5_fortrandll.def.in' in the fortran/src directory. +! This is needed for Windows based operating systems. +! + +MODULE H5T + + USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_CHAR, C_NULL_PTR + USE H5GLOBAL + IMPLICIT NONE + + PRIVATE h5tenum_insert_f03, h5tenum_insert_f90 + +! Fortran2003 Derived Type: + TYPE hvl_t + INTEGER(size_t) :: len !< Length of VL data (in base type units) + TYPE(C_PTR) :: p !< Pointer to VL data + END TYPE hvl_t + +#ifndef H5_DOXYGEN + + INTERFACE h5tenum_insert_f + MODULE PROCEDURE h5tenum_insert_f03 + MODULE PROCEDURE h5tenum_insert_f90 + END INTERFACE + +#endif + +CONTAINS + +!> +!! \ingroup FH5T +!! +!! \brief Opens named datatype. +!! +!! \param loc_id Location identifier. +!! \param name A datatype name. +!! \param type_id Datatype identifier. +!! \param hdferr \fortran_error +!! \param tapl_id Datatype access property list identifier. +!! +!! See C API: @ref H5Topen2() +!! + SUBROUTINE h5topen_f(loc_id, name, type_id, hdferr, tapl_id) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(HID_T), INTENT(OUT) :: type_id + INTEGER, INTENT(OUT) :: hdferr + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id + INTEGER :: namelen ! Name length + INTEGER(HID_T) :: tapl_id_default + + INTERFACE + INTEGER FUNCTION h5topen_c(loc_id, name, namelen, type_id, tapl_id_default) BIND(C,NAME='h5topen_c') + IMPORT :: C_CHAR + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(KIND=C_CHAR), INTENT(IN) :: name + INTEGER :: namelen + INTEGER(HID_T), INTENT(OUT) :: type_id + INTEGER(HID_T) :: tapl_id_default + END FUNCTION h5topen_c + END INTERFACE + + namelen = LEN(name) + + tapl_id_default = H5P_DEFAULT_F + IF(PRESENT(tapl_id)) tapl_id_default = tapl_id + + hdferr = h5topen_c(loc_id, name, namelen, type_id, tapl_id_default) + END SUBROUTINE h5topen_f +!> +!! \ingroup FH5T +!! +!! \brief Commits a transient datatype to a file, creating a new named datatype. +!! +!! \param loc_id Location identifier. +!! \param name Name of the datatype to be stored at the specified location +!! \param type_id Identifier of a datatype to be stored. +!! \param hdferr \fortran_error +!! \param lcpl_id Link creation property list. +!! \param tcpl_id Datatype creation property list. +!! \param tapl_id Datatype access property list. +!! +!! See C API: @ref H5Tcommit2() +!! + SUBROUTINE h5tcommit_f(loc_id, name, type_id, hdferr, & + lcpl_id, tcpl_id, tapl_id ) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: hdferr + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tcpl_id + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id + + INTEGER :: namelen ! Name length + + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: tcpl_id_default + INTEGER(HID_T) :: tapl_id_default + + INTERFACE + INTEGER FUNCTION h5tcommit_c(loc_id, name, namelen, type_id, & + lcpl_id_default, tcpl_id_default, tapl_id_default ) BIND(C,NAME='h5tcommit_c') + IMPORT :: C_CHAR + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name + INTEGER :: namelen + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T) :: lcpl_id_default + INTEGER(HID_T) :: tcpl_id_default + INTEGER(HID_T) :: tapl_id_default + END FUNCTION h5tcommit_c + END INTERFACE + + lcpl_id_default = H5P_DEFAULT_F + tcpl_id_default = H5P_DEFAULT_F + tapl_id_default = H5P_DEFAULT_F + + IF (PRESENT(lcpl_id)) lcpl_id_default = lcpl_id + IF (PRESENT(tcpl_id)) tcpl_id_default = tcpl_id + IF (PRESENT(tapl_id)) tapl_id_default = tapl_id + + namelen = LEN(name) + + hdferr = h5tcommit_c(loc_id, name, namelen, type_id, & + lcpl_id_default, tcpl_id_default, tapl_id_default ) + + END SUBROUTINE h5tcommit_f +!> +!! \ingroup FH5T +!! +!! \brief Creates a copy of existing datatype. +!! +!! \param type_id Datatype identifier. +!! \param new_type_id Identifier of datatype's copy. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tcopy() +!! + SUBROUTINE h5tcopy_f(type_id, new_type_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(OUT) :: new_type_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tcopy_c(type_id, new_type_id) BIND(C,NAME='h5tcopy_c') + IMPORT :: HID_T + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(OUT) :: new_type_id + END FUNCTION h5tcopy_c + END INTERFACE + + hdferr = h5tcopy_c(type_id, new_type_id) + END SUBROUTINE h5tcopy_f +!> +!! \ingroup FH5T +!! +!! \brief Determines whether two datatype identifiers refer to the same datatype. +!! +!! \param type1_id Datatype identifier. +!! \param type2_id Datatype identifier. +!! \param flag TRUE/FALSE flag to indicate if two datatypes are equal. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tequal() +!! + SUBROUTINE h5tequal_f(type1_id, type2_id, flag, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type1_id + INTEGER(HID_T), INTENT(IN) :: type2_id + LOGICAL, INTENT(OUT) :: flag + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: c_flag + INTERFACE + INTEGER FUNCTION h5tequal_c(type1_id, type2_id, c_flag) BIND(C,NAME='h5tequal_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type1_id + INTEGER(HID_T), INTENT(IN) :: type2_id + INTEGER :: c_flag + END FUNCTION h5tequal_c + END INTERFACE + + flag = .FALSE. + hdferr = h5tequal_c(type1_id, type2_id, c_flag) + IF(c_flag .GT. 0) flag = .TRUE. + END SUBROUTINE h5tequal_f +!> +!! \ingroup FH5T +!! +!! \brief Releases a datatype. +!! +!! \param type_id Datatype identifier. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tclose() +!! + SUBROUTINE h5tclose_f(type_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tclose_c(type_id) BIND(C,NAME='h5tclose_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + END FUNCTION h5tclose_c + END INTERFACE + + hdferr = h5tclose_c(type_id) + END SUBROUTINE h5tclose_f +!> +!! \ingroup FH5T +!! +!! \brief Returns the datatype class identifier. +!! +!! \param type_id Datatype identifier. +!! \param class Class, possible values are: +!! \li H5T_NO_CLASS_F +!! \li H5T_INTEGER_F +!! \li H5T_FLOAT_F +!! \li H5T_TIME_F +!! \li H5T_STRING_F +!! \li H5T_BITFIELD_F +!! \li H5T_OPAQUE_F +!! \li H5T_COMPOUND_F +!! \li H5T_REFERENCE_F +!! \li H5T_ENUM_F +!! \li H5T_VLEN_F +!! \li H5T_ARRAY_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_class() +!! + SUBROUTINE h5tget_class_f(type_id, class, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: class + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_class_c(type_id, class) BIND(C,NAME='h5tget_class_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: class + END FUNCTION h5tget_class_c + END INTERFACE + + hdferr = h5tget_class_c(type_id, class) + END SUBROUTINE h5tget_class_f +!> +!! \ingroup FH5T +!! +!! \brief Returns the size of a datatype. +!! +!! \param type_id Datatype identifier. +!! \param size Datatype size. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_size() +!! + SUBROUTINE h5tget_size_f(type_id, size, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: size + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_size_c(type_id, size) BIND(C,NAME='h5tget_size_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: size + END FUNCTION h5tget_size_c + END INTERFACE + + hdferr = h5tget_size_c(type_id, size) + END SUBROUTINE h5tget_size_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets the total size for an atomic datatype. +!! +!! \param type_id Datatype identifier. +!! \param size Size of the datatype. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_size() +!! + SUBROUTINE h5tset_size_f(type_id, size, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: size + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_size_c(type_id, size) BIND(C,NAME='h5tset_size_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: size + END FUNCTION h5tset_size_c + END INTERFACE + + hdferr = h5tset_size_c(type_id, size) + END SUBROUTINE h5tset_size_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns the byte order of an atomic datatype. +!! +!! \param type_id Datatype identifier. +!! \param order Byte order for the datatype, possible values are: +!! \li H5T_ORDER_LE_F +!! \li H5T_ORDER_BE_F +!! \li H5T_ORDER_VAX_F (not implemented yet) +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_order() +!! + SUBROUTINE h5tget_order_f(type_id, order, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: order + ! H5T_ORDER_VAX_F + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_order_c(type_id, order) BIND(C,NAME='h5tget_order_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: order + END FUNCTION h5tget_order_c + END INTERFACE + + hdferr = h5tget_order_c(type_id, order) + END SUBROUTINE h5tget_order_f +!> +!! \ingroup FH5T +!! +!! \brief Sets the byte ordering of an atomic datatype. +!! +!! \param type_id Datatype identifier. +!! \param order Datatype byte order Possible values are: +!! \li H5T_ORDER_LE_F +!! \li H5T_ORDER_BE_F +!! \li H5T_ORDER_VAX_F (not implemented yet) +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_order() +!! + SUBROUTINE h5tset_order_f(type_id, order, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: order + ! H5T_ORDER_VAX_F + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_order_c(type_id, order) BIND(C,NAME='h5tset_order_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: order + END FUNCTION h5tset_order_c + END INTERFACE + + hdferr = h5tset_order_c(type_id, order) + END SUBROUTINE h5tset_order_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns the precision of an atomic datatype. +!! +!! \param type_id Datatype identifier. +!! \param precision Precision of the datatype. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_precision() +!! + SUBROUTINE h5tget_precision_f(type_id, PRECISION, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: precision + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_precision_c(type_id, PRECISION) BIND(C,NAME='h5tget_precision_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: PRECISION + END FUNCTION h5tget_precision_c + END INTERFACE + + hdferr = h5tget_precision_c(type_id, PRECISION) + END SUBROUTINE h5tget_precision_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets the precision of an atomic datatype. +!! +!! \param type_id Datatype identifier. +!! \param precision Datatype precision. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_precision() +!! + SUBROUTINE h5tset_precision_f(type_id, PRECISION, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: PRECISION + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_precision_c (type_id, PRECISION) BIND(C,NAME='h5tset_precision_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: PRECISION + END FUNCTION h5tset_precision_c + END INTERFACE + + hdferr = h5tset_precision_c(type_id, PRECISION) + END SUBROUTINE h5tset_precision_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the bit offset of the first significant bit. +!! +!! \param type_id Datatype identifier. +!! \param offset Offset value. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_offset() +!! + SUBROUTINE h5tget_offset_f(type_id, offset, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: offset + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_offset_c(type_id, offset) BIND(C,NAME='h5tget_offset_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: offset + END FUNCTION h5tget_offset_c + END INTERFACE + + hdferr = h5tget_offset_c(type_id, offset) + END SUBROUTINE h5tget_offset_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets the bit offset of the first significant bit. +!! +!! \param type_id Datatype identifier. +!! \param offset Offset value. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_offset() +!! + SUBROUTINE h5tset_offset_f(type_id, offset, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: offset + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_offset_c(type_id, offset) BIND(C,NAME='h5tset_offset_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: offset + END FUNCTION h5tset_offset_c + END INTERFACE + + hdferr = h5tset_offset_c(type_id, offset) + END SUBROUTINE h5tset_offset_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the padding type of the least and most-significant bit padding. +!! +!! \param type_id Datatype identifier. +!! \param lsbpad Least-significant bit padding type. +!! \param msbpad Most-significant bit padding type. Possible values are: +!! \li H5T_PAD_ERROR_F +!! \li H5T_PAD_ZERO_F +!! \li H5T_PAD_ONE_F +!! \li H5T_PAD_BACKGROUND_F +!! \li H5T_PAD_NPAD_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_pad() +!! + SUBROUTINE h5tget_pad_f(type_id, lsbpad, msbpad, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: lsbpad + INTEGER, INTENT(OUT) :: msbpad + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_pad_c(type_id, lsbpad, msbpad) BIND(C,NAME='h5tget_pad_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: lsbpad + INTEGER, INTENT(OUT) :: msbpad + END FUNCTION h5tget_pad_c + END INTERFACE + + hdferr = h5tget_pad_c(type_id, lsbpad, msbpad) + END SUBROUTINE h5tget_pad_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets the least and most-significant bits padding types. +!! +!! \param type_id Datatype identifier. +!! \param lsbpad Least-significant bit padding type. +!! \param msbpad Most-significant bit padding type. Possible values are: +!! \li H5T_PAD_ERROR_F +!! \li H5T_PAD_ZERO_F +!! \li H5T_PAD_ONE_F +!! \li H5T_PAD_BACKGROUND_F +!! \li H5T_PAD_NPAD_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_pad() +!! + SUBROUTINE h5tset_pad_f(type_id, lsbpad, msbpad, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: lsbpad + INTEGER, INTENT(IN) :: msbpad + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_pad_c(type_id, lsbpad, msbpad) BIND(C,NAME='h5tset_pad_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: lsbpad + INTEGER, INTENT(IN) :: msbpad + END FUNCTION h5tset_pad_c + END INTERFACE + + hdferr = h5tset_pad_c(type_id, lsbpad, msbpad) + END SUBROUTINE h5tset_pad_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the sign type for an integer type. +!! +!! \param type_id Datatype identifier. +!! \param sign Sign type. Possible values are: +!! \li Unsigned integer type +!! H5T_SGN_NONE_F = 0 +!! \li Two's complement signed integer type +!! H5T_SGN_2_F = 1 +!! \li Error value +!! H5T_SGN_ERROR_F = -1 +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_sign() +!! + SUBROUTINE h5tget_sign_f(type_id, sign, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: sign + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER FUNCTION h5tget_sign_c(type_id, sign) BIND(C,NAME='h5tget_sign_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: sign + END FUNCTION h5tget_sign_c + END INTERFACE + + hdferr = h5tget_sign_c(type_id, sign) + END SUBROUTINE h5tget_sign_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets the sign property for an integer type. +!! +!! \param type_id Datatype identifier. +!! \param sign Sign type. Possible values are: +!! \li Unsigned integer type +!! H5T_SGN_NONE_F = 0 +!! \li Two's complement signed integer type +!! H5T_SGN_2_F = 1 +!! \li Error value +!! H5T_SGN_ERROR_F = -1 +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_sign() +!! + SUBROUTINE h5tset_sign_f(type_id, sign, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: sign + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_sign_c(type_id, sign) BIND(C,NAME='h5tset_sign_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: sign + END FUNCTION h5tset_sign_c + END INTERFACE + + hdferr = h5tset_sign_c(type_id, sign) + END SUBROUTINE h5tset_sign_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves floating point datatype bit field information. +!! +!! \param type_id Datatype identifier. +!! \param spos Sign bit-position. +!! \param epos Exponent bit-position. +!! \param esize Size of exponent in bits. +!! \param mpos Mantissa position. +!! \param msize Size of mantissa in bits. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_fields() +!! + SUBROUTINE h5tget_fields_f(type_id, spos, epos, esize, mpos, msize, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: spos + INTEGER(SIZE_T), INTENT(OUT) :: epos + INTEGER(SIZE_T), INTENT(OUT) :: esize + INTEGER(SIZE_T), INTENT(OUT) :: mpos + INTEGER(SIZE_T), INTENT(OUT) :: msize + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER FUNCTION h5tget_fields_c(type_id, spos, epos, esize, mpos, msize) & + BIND(C,NAME='h5tget_fields_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: spos + INTEGER(SIZE_T), INTENT(OUT) :: epos + INTEGER(SIZE_T), INTENT(OUT) :: esize + INTEGER(SIZE_T), INTENT(OUT) :: mpos + INTEGER(SIZE_T), INTENT(OUT) :: msize + END FUNCTION h5tget_fields_c + END INTERFACE + + hdferr = h5tget_fields_c(type_id, spos, epos, esize, mpos, msize) + END SUBROUTINE h5tget_fields_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets locations and sizes of floating point bit fields. +!! +!! \param type_id Datatype identifier. +!! \param spos Sign bit-position. +!! \param epos Exponent bit-position. +!! \param esize Size of exponent in bits. +!! \param mpos Mantissa position. +!! \param msize Size of mantissa in bits. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_fields() +!! + SUBROUTINE h5tset_fields_f(type_id, spos, epos, esize, mpos, msize, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: spos + INTEGER(SIZE_T), INTENT(IN) :: epos + INTEGER(SIZE_T), INTENT(IN) :: esize + INTEGER(SIZE_T), INTENT(IN) :: mpos + INTEGER(SIZE_T), INTENT(IN) :: msize + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER FUNCTION h5tset_fields_c(type_id, spos, epos, esize, mpos, msize) & + BIND(C,NAME='h5tset_fields_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: spos + INTEGER(SIZE_T), INTENT(IN) :: epos + INTEGER(SIZE_T), INTENT(IN) :: esize + INTEGER(SIZE_T), INTENT(IN) :: mpos + INTEGER(SIZE_T), INTENT(IN) :: msize + END FUNCTION h5tset_fields_c + END INTERFACE + + hdferr = h5tset_fields_c(type_id, spos, epos, esize, mpos, msize) + END SUBROUTINE h5tset_fields_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the exponent bias of a floating-point type. +!! +!! \param type_id Datatype identifier. +!! \param ebias Datatype exponent bias. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_ebias() +!! + SUBROUTINE h5tget_ebias_f(type_id, ebias, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: ebias + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER FUNCTION h5tget_ebias_c(type_id, ebias) BIND(C,NAME='h5tget_ebias_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(OUT) :: ebias + END FUNCTION h5tget_ebias_c + END INTERFACE + + hdferr = h5tget_ebias_c(type_id, ebias) + END SUBROUTINE h5tget_ebias_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets the exponent bias of a floating-point type. +!! +!! \param type_id Datatype identifier. +!! \param ebias Datatype exponent bias. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_ebias() +!! + SUBROUTINE h5tset_ebias_f(type_id, ebias, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: ebias + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_ebias_c(type_id, ebias) BIND(C,NAME='h5tset_ebias_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(SIZE_T), INTENT(IN) :: ebias + END FUNCTION h5tset_ebias_c + END INTERFACE + + hdferr = h5tset_ebias_c(type_id, ebias) + END SUBROUTINE h5tset_ebias_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves mantissa normalization of a floating-point datatype. +!! +!! \param type_id Datatype identifier. +!! \param norm Normalization types, valid values are: +!! \li H5T_NORM_IMPLIED_F +!! \li H5T_NORM_MSBSET_F +!! \li H5T_NORM_NONE_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_norm() +!! + SUBROUTINE h5tget_norm_f(type_id, norm, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: norm + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER FUNCTION h5tget_norm_c(type_id, norm) BIND(C,NAME='h5tget_norm_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: norm + END FUNCTION h5tget_norm_c + END INTERFACE + + hdferr = h5tget_norm_c(type_id, norm) + END SUBROUTINE h5tget_norm_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets the mantissa normalization of a floating-point datatype. +!! +!! \param type_id Datatype identifier. +!! \param norm Normalization types, valid values are: +!! \li H5T_NORM_IMPLIED_F +!! \li H5T_NORM_MSBSET_F +!! \li H5T_NORM_NONE_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_norm() +!! + SUBROUTINE h5tset_norm_f(type_id, norm, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: norm + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_norm_c(type_id, norm) BIND(C,NAME='h5tset_norm_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: norm + END FUNCTION h5tset_norm_c + END INTERFACE + + hdferr = h5tset_norm_c(type_id, norm) + END SUBROUTINE h5tset_norm_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the internal padding type for unused bits in floating-point datatypes. +!! +!! \param type_id Datatype identifier. +!! \param padtype Padding type for unused bits. Possible values are: +!! \li H5T_PAD_ZERO_F +!! \li H5T_PAD_ONE_F +!! \li H5T_PAD_BACKGROUND_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_inpad() +!! + SUBROUTINE h5tget_inpad_f(type_id, padtype, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: padtype + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_inpad_c(type_id, padtype) BIND(C,NAME='h5tget_inpad_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: padtype + END FUNCTION h5tget_inpad_c + END INTERFACE + + hdferr = h5tget_inpad_c(type_id, padtype) + END SUBROUTINE h5tget_inpad_f + +!> +!! \ingroup FH5T +!! +!! \brief Fills unused internal floating point bits. +!! +!! \param type_id Datatype identifier. +!! \param padtype Padding type for unused bits. Possible values are: +!! \li H5T_PAD_ZERO_F +!! \li H5T_PAD_ONE_F +!! \li H5T_PAD_BACKGROUND_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_inpad() +!! + SUBROUTINE h5tset_inpad_f(type_id, padtype, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: padtype + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_inpad_c(type_id, padtype) BIND(C,NAME='h5tset_inpad_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: padtype + END FUNCTION h5tset_inpad_c + END INTERFACE + + hdferr = h5tset_inpad_c(type_id, padtype) + END SUBROUTINE h5tset_inpad_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the character set type of a string datatype. +!! +!! \param type_id Datatype identifier. +!! \param cset Character set type of a string datatype. Possible values are: +!! \li H5T_CSET_ASCII_F +!! \li H5T_CSET_UTF8_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_cset() +!! + SUBROUTINE h5tget_cset_f(type_id, cset, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: cset + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_cset_c(type_id, cset) BIND(C,NAME='h5tget_cset_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: cset + END FUNCTION h5tget_cset_c + END INTERFACE + + hdferr = h5tget_cset_c(type_id, cset) + END SUBROUTINE h5tget_cset_f + +!> +!! \ingroup FH5T +!! +!! \brief Sets character set to be used. +!! +!! \param type_id Datatype identifier. +!! \param cset Character set type of a string datatype. Possible values are: +!! \li H5T_CSET_ASCII_F +!! \li H5T_CSET_UTF8_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_cset() +!! + SUBROUTINE h5tset_cset_f(type_id, cset, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: cset + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_cset_c(type_id, cset) BIND(C,NAME='h5tset_cset_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: cset + END FUNCTION h5tset_cset_c + END INTERFACE + + hdferr = h5tset_cset_c(type_id, cset) + END SUBROUTINE h5tset_cset_f +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the storage mechanism for a string datatype. +!! +!! \param type_id Datatype identifier. +!! \param strpad Storage method for a string datatype. Possible values are: +!! \li H5T_STR_NULLTERM_F +!! \li H5T_STR_NULLPAD_F +!! \li H5T_STR_SPACEPAD_F +!! \li H5T_STR_ERROR_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_strpad() +!! + SUBROUTINE h5tget_strpad_f(type_id, strpad, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: strpad + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_strpad_c(type_id, strpad) BIND(C,NAME='h5tget_strpad_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: strpad + END FUNCTION h5tget_strpad_c + END INTERFACE + + hdferr = h5tget_strpad_c(type_id, strpad) + END SUBROUTINE h5tget_strpad_f + +!> +!! \ingroup FH5T +!! +!! \brief Defines the storage mechanism for character strings. +!! +!! \param type_id Datatype identifier. +!! \param strpad Storage method for a string datatype. Possible values are: +!! \li H5T_STR_NULLTERM_F +!! \li H5T_STR_NULLPAD_F +!! \li H5T_STR_SPACEPAD_F +!! \li H5T_STR_ERROR_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_strpad() +!! + SUBROUTINE h5tset_strpad_f(type_id, strpad, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: strpad + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tset_strpad_c(type_id, strpad) BIND(C,NAME='h5tset_strpad_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: strpad + END FUNCTION h5tset_strpad_c + END INTERFACE + + hdferr = h5tset_strpad_c(type_id, strpad) + END SUBROUTINE h5tset_strpad_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the number of fields in a compound datatype. +!! +!! \param type_id Datatype identifier. +!! \param num_members Number of members. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_nmembers() +!! + SUBROUTINE h5tget_nmembers_f(type_id, num_members, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: num_members + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_nmembers_c(type_id, num_members) BIND(C,NAME='h5tget_nmembers_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: num_members + END FUNCTION h5tget_nmembers_c + END INTERFACE + + hdferr = h5tget_nmembers_c(type_id, num_members) + END SUBROUTINE h5tget_nmembers_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the name of a field of a compound datatype. +!! +!! \param type_id Datatype identifier. +!! \param index Filed index (0-based). +!! \param member_name Buffer to hold member's name. +!! \param namelen Name length. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_member_name() +!! + SUBROUTINE h5tget_member_name_f(type_id, index, member_name, namelen, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: index + CHARACTER(LEN=*), INTENT(OUT) :: member_name + INTEGER, INTENT(OUT) :: namelen + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_member_name_c(type_id, index, member_name, namelen) BIND(C,NAME='h5tget_member_name_c') + IMPORT :: C_CHAR + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: index + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(OUT) :: member_name + INTEGER, INTENT(OUT) :: namelen + END FUNCTION h5tget_member_name_c + END INTERFACE + + hdferr = h5tget_member_name_c(type_id, index, member_name, namelen) + END SUBROUTINE h5tget_member_name_f + +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the offset of a field of a compound datatype. +!! +!! \param type_id Datatype identifier. +!! \param member_no Number of the field. +!! \param offset Byte offset of the requested field. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_member_offset() +!! + SUBROUTINE h5tget_member_offset_f(type_id, member_no, offset, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: member_no + INTEGER(SIZE_T), INTENT(OUT) :: offset + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_member_offset_c(type_id, member_no, offset ) BIND(C,NAME='h5tget_member_offset_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: member_no + INTEGER(SIZE_T), INTENT(OUT) :: offset + END FUNCTION h5tget_member_offset_c + END INTERFACE + + hdferr = h5tget_member_offset_c(type_id, member_no, offset ) + END SUBROUTINE h5tget_member_offset_f +!> +!! \ingroup FH5T +!! +!! \brief Retrieves the index of a compound or enumeration datatype member. +!! +!! \param type_id Datatype identifier. +!! \param name Name of the field or member whose index to be retrieved from the datatype. +!! \param index Based index of the filed or member (0 to N-1). +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_member_index() +!! + SUBROUTINE h5tget_member_index_f(type_id, name, index, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER, INTENT(OUT) :: index + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: namelen ! Name length + + INTERFACE + INTEGER FUNCTION h5tget_member_index_c(type_id, name, namelen, index) BIND(C,NAME='h5tget_member_index_c') + IMPORT :: C_CHAR + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name + INTEGER, INTENT(IN) :: namelen + INTEGER, INTENT(OUT) :: index + END FUNCTION h5tget_member_index_c + END INTERFACE + + namelen = LEN(name) + hdferr = h5tget_member_index_c(type_id, name, namelen, index) + END SUBROUTINE h5tget_member_index_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns sizes of array dimensions. +!! +!! \param type_id Array datatype identifier. +!! \param dims Buffer to store array datatype dimensions. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_array_dims2() +!! + SUBROUTINE h5tget_array_dims_f(type_id, dims, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HSIZE_T),DIMENSION(*), INTENT(OUT) :: dims + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_array_dims_c(type_id, dims) BIND(C,NAME='h5tget_array_dims_c') + IMPORT :: HID_T, HSIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HSIZE_T),DIMENSION(*), INTENT(OUT) :: dims + END FUNCTION h5tget_array_dims_c + END INTERFACE + + hdferr = h5tget_array_dims_c(type_id, dims) + + END SUBROUTINE h5tget_array_dims_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns the rank of an array datatype. +!! +!! \param type_id Array datatype identifier. +!! \param ndims Number of array dimensions. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_array_ndims() +!! + SUBROUTINE h5tget_array_ndims_f(type_id, ndims, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: ndims + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_array_ndims_c(type_id, ndims) BIND(C,NAME='h5tget_array_ndims_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: ndims + END FUNCTION h5tget_array_ndims_c + END INTERFACE + + hdferr = h5tget_array_ndims_c(type_id, ndims) + + END SUBROUTINE h5tget_array_ndims_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns the base datatype from which a datatype is derived. +!! +!! \param type_id Datatype identifier. +!! \param base_type_id Identifier of the base type. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_super() +!! + SUBROUTINE h5tget_super_f(type_id, base_type_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(OUT) :: base_type_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_super_c(type_id, base_type_id) BIND(C,NAME='h5tget_super_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(OUT) :: base_type_id + END FUNCTION h5tget_super_c + END INTERFACE + + hdferr = h5tget_super_c(type_id, base_type_id) + + END SUBROUTINE h5tget_super_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns the datatype of the specified member. +!! +!! \param type_id Compound datatype identifier. +!! \param field_idx Field index (0-based). +!! \param datatype Identifier of the member's datatype. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_member_type() +!! + SUBROUTINE h5tget_member_type_f(type_id, field_idx, datatype, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: field_idx + INTEGER(HID_T), INTENT(OUT) :: datatype + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_member_type_c(type_id, field_idx , datatype) & + BIND(C,NAME='h5tget_member_type_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: field_idx + INTEGER(HID_T), INTENT(OUT) :: datatype + END FUNCTION h5tget_member_type_c + END INTERFACE + + hdferr = h5tget_member_type_c(type_id, field_idx , datatype) + END SUBROUTINE h5tget_member_type_f + +!> +!! \ingroup FH5T +!! +!! \brief Creates a new datatype. +!! +!! \param class Datatype class can be one of: +!! \li H5T_COMPOUND_F +!! \li H5T_ENUM_F +!! \li H5T_OPAQUE_F +!! \li H5T_STRING_F +!! \param size Size of the datatype. +!! \param type_id Datatype identifier. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tcreate() +!! + SUBROUTINE h5tcreate_f(class, size, type_id, hdferr) + IMPLICIT NONE + INTEGER , INTENT(IN) :: class + INTEGER(SIZE_T), INTENT(IN) :: size + INTEGER(HID_T) , INTENT(OUT) :: type_id + INTEGER , INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tcreate_c(class, size, type_id) BIND(C,NAME='h5tcreate_c') + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER, INTENT(IN) :: class + INTEGER(SIZE_T), INTENT(IN) :: size + INTEGER(HID_T), INTENT(OUT) :: type_id + END FUNCTION h5tcreate_c + END INTERFACE + + hdferr = h5tcreate_c(class, size, type_id) + END SUBROUTINE h5tcreate_f + +!> +!! \ingroup FH5T +!! +!! \brief Adds a new member to a compound datatype. +!! +!! \param type_id Compound datatype identifier. +!! \param name Name of the field to insert. +!! \param offset Start of the member in an instance of the compound datatype. +!! \param field_id Datatype identifier of the field to insert. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tinsert() +!! + SUBROUTINE h5tinsert_f(type_id, name, offset, field_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER(SIZE_T), INTENT(IN) :: offset + INTEGER(HID_T), INTENT(IN) :: field_id + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: namelen + + INTERFACE + INTEGER FUNCTION h5tinsert_c(type_id, name, namelen, offset, field_id) BIND(C,NAME='h5tinsert_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name + INTEGER(SIZE_T), INTENT(IN) :: offset + INTEGER(HID_T), INTENT(IN) :: field_id + INTEGER :: namelen + END FUNCTION h5tinsert_c + END INTERFACE + + namelen = LEN(name) + hdferr = h5tinsert_c(type_id, name, namelen, offset, field_id ) + END SUBROUTINE h5tinsert_f + +!> +!! \ingroup FH5T +!! +!! \brief Recursively removes padding from within a compound datatype. +!! +!! \param type_id Compound datatype identifier. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tpack() +!! + SUBROUTINE h5tpack_f(type_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tpack_c(type_id) BIND(C,NAME='h5tpack_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + END FUNCTION h5tpack_c + END INTERFACE + + hdferr = h5tpack_c(type_id) + END SUBROUTINE h5tpack_f + +! +! NAME +! h5tinsert_array_f +! +! PURPOSE +! This function is not available on hdf5-1.4.* +! +! INPUTS +! OUTPUTS +! hdferr: - error code +! Success: 0 +! Failure: -1 +! +! AUTHOR +! Elena Pourmal +! August 12, 1999 +! +! HISTORY +! Explicit Fortran interfaces were added for +! called C functions (it is needed for Windows +! port). March 7, 2001 +! SOURCE +! SUBROUTINE h5tinsert_array_f(parent_id,name,offset, ndims, dims, member_id, hdferr, perm) +! IMPLICIT NONE +! +! INTEGER, EXTERNAL :: h5tinsert_array_c, h5tinsert_array_c2 +! namelen = LEN(name) +! if (present(perm)) then +! hdferr = h5tinsert_array_c(parent_id, name, namelen, offset, ndims,dims, member_id, perm) +! else +! hdferr = h5tinsert_array_c2(parent_id, name, namelen, offset, ndims,dims, member_id) +! end if +! +! END SUBROUTINE h5tinsert_array_f + +!> +!! \ingroup FH5T +!! +!! \brief Creates an array datatype object. +!! +!! \param base_id Datatype identifier for the array base datatype +!! \param rank Rank of the array. +!! \param dims Array dimension sizes. +!! \param type_id Array datatype identifier. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tarray_create2() +!! + SUBROUTINE h5tarray_create_f(base_id, rank, dims, type_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: base_id + INTEGER, INTENT(IN) :: rank + INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims + INTEGER(HID_T), INTENT(OUT) :: type_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tarray_create_c(base_id, rank, dims, type_id) BIND(C,NAME='h5tarray_create_c') + IMPORT :: HID_T, HSIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: base_id + INTEGER, INTENT(IN) :: rank + INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims + INTEGER(HID_T), INTENT(OUT) :: type_id + END FUNCTION h5tarray_create_c + END INTERFACE + + hdferr = h5tarray_create_c(base_id, rank, dims, type_id) + + END SUBROUTINE h5tarray_create_f + +!> +!! \ingroup FH5T +!! +!! \brief Creates a new enumeration datatype. +!! +!! \param parent_id Datatype identifier for base datatype. +!! \param new_type_id Datatype identifier for the enumeration datatype. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tenum_create() +!! + SUBROUTINE h5tenum_create_f(parent_id, new_type_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: parent_id + INTEGER(HID_T), INTENT(OUT) :: new_type_id + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER FUNCTION h5tenum_create_c(parent_id, new_type_id) BIND(C,NAME='h5tenum_create_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: parent_id + INTEGER(HID_T), INTENT(OUT) :: new_type_id + END FUNCTION h5tenum_create_c + END INTERFACE + + hdferr = h5tenum_create_c(parent_id, new_type_id) + END SUBROUTINE h5tenum_create_f +!> +!! \ingroup FH5T +!! +!! \brief Returns the symbol name corresponding to a specified member of an enumeration datatype. +!! +!! \param type_id Datatype identifier. +!! \param value Value of the enumeration datatype. +!! \param namelen Name buffer size. +!! \param name Buffer to hold symbol name. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tenum_nameof() +!! + SUBROUTINE h5tenum_nameof_f(type_id, value, namelen, name, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(LEN=*), INTENT(OUT) :: name + INTEGER(SIZE_T), INTENT(IN) :: namelen + INTEGER, INTENT(IN) :: value + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tenum_nameof_c(type_id, value, name, namelen) BIND(C,NAME='h5tenum_nameof_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(OUT) :: name + INTEGER(SIZE_T), INTENT(IN) :: namelen + INTEGER, INTENT(IN) :: value + END FUNCTION h5tenum_nameof_c + END INTERFACE + + name(1:LEN(name)) = ' ' + + hdferr = h5tenum_nameof_c(type_id, value, name, namelen) + END SUBROUTINE h5tenum_nameof_f +!> +!! \ingroup FH5T +!! +!! \brief Returns the value corresponding to a specified member of an enumeration datatype. +!! +!! \param type_id Datatype identifier. +!! \param name Symbol name. +!! \param value Value of the enumeration datatype. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tenum_valueof() +!! + SUBROUTINE h5tenum_valueof_f(type_id, name, value, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER, INTENT(OUT) :: value + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: namelen + + INTERFACE + INTEGER FUNCTION h5tenum_valueof_c(type_id, name, namelen, value) & + BIND(C,NAME='h5tenum_valueof_c') + IMPORT :: C_CHAR + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name + INTEGER, INTENT(IN) :: namelen + INTEGER, INTENT(OUT) :: value + END FUNCTION h5tenum_valueof_c + END INTERFACE + + namelen = LEN(name) + hdferr = h5tenum_valueof_c(type_id, name, namelen, value) + END SUBROUTINE h5tenum_valueof_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns the value of an enumeration datatype member. +!! +!! \param type_id Datatype identifier. +!! \param member_no Number of the enumeration datatype member. +!! \param value Value of the enumeration datatype. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_member_value() +!! + SUBROUTINE h5tget_member_value_f(type_id, member_no, value, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: member_no + INTEGER, INTENT(OUT) :: value + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_member_value_c(type_id, member_no, value) & + BIND(C,NAME='h5tget_member_value_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: member_no + INTEGER, INTENT(OUT) :: value + END FUNCTION h5tget_member_value_c + END INTERFACE + + hdferr = h5tget_member_value_c(type_id, member_no, value) + END SUBROUTINE h5tget_member_value_f + +!> +!! \ingroup FH5T +!! +!! \brief Tags an opaque datatype. +!! +!! \param type_id Identifier for opaque datatype. +!! \param tag Unique ASCII string with which the opaque datatype is to be tagged. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tset_tag() +!! + SUBROUTINE h5tset_tag_f(type_id, tag, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(LEN=*), INTENT(IN) :: tag + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: taglen + + INTERFACE + INTEGER FUNCTION h5tset_tag_c(type_id, tag, taglen) BIND(C,NAME='h5tset_tag_c') + IMPORT :: C_CHAR + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: tag + INTEGER :: taglen + END FUNCTION h5tset_tag_c + END INTERFACE + + taglen = LEN(tag) + hdferr = h5tset_tag_c(type_id, tag, taglen) + END SUBROUTINE h5tset_tag_f + +!> +!! \ingroup FH5T +!! +!! \brief Gets the tag associated with an opaque datatype. +!! +!! \param type_id Identifier for opaque datatype. +!! \param tag Unique ASCII string associated with opaque datatype. +!! \param taglen Length of tag. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_tag() +!! + SUBROUTINE h5tget_tag_f(type_id, tag,taglen, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(LEN=*), INTENT(OUT) :: tag + INTEGER, INTENT(OUT) :: taglen + INTEGER, INTENT(OUT) :: hdferr + INTEGER(SIZE_T):: tag_size ! Declared character length of tab + INTERFACE + INTEGER FUNCTION h5tget_tag_c(type_id, tag, tag_size, taglen) & + BIND(C,NAME='h5tget_tag_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(OUT) :: tag + INTEGER(SIZE_T), INTENT(IN) :: tag_size + INTEGER, INTENT(OUT) :: taglen + END FUNCTION h5tget_tag_c + END INTERFACE + + tag_size = LEN(tag) + hdferr = h5tget_tag_c(type_id, tag, tag_size, taglen ) + END SUBROUTINE h5tget_tag_f + +!> +!! \ingroup FH5T +!! +!! \brief Creates a new variable-length datatype. +!! +!! \param type_id Identifier iof base datatype. +!! \param vltype_id Identifier for VL datatype. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tvlen_create() +!! + SUBROUTINE h5tvlen_create_f(type_id, vltype_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(OUT) :: vltype_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tvlen_create_c(type_id, vltype_id) BIND(C,NAME='h5tvlen_create_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER(HID_T), INTENT(OUT) :: vltype_id + END FUNCTION h5tvlen_create_c + END INTERFACE + + hdferr = h5tvlen_create_c(type_id, vltype_id) + END SUBROUTINE h5tvlen_create_f + +!> +!! \ingroup FH5T +!! +!! \brief Determines whether a dattype is a variable string. +!! +!! \param type_id Datartpe identifier. +!! \param status Flag to indicate if datatype is a variable string ( TRUE or FALSE). +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tis_variable_str() +!! + SUBROUTINE h5tis_variable_str_f(type_id, status, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + LOGICAL, INTENT(OUT) :: status + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: flag ! "TRUE/FALSE/ERROR from C" + + INTERFACE + INTEGER FUNCTION h5tis_variable_str_c(type_id, flag) & + BIND(C,NAME='h5tis_variable_str_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER :: flag + END FUNCTION h5tis_variable_str_c + END INTERFACE + + hdferr = h5tis_variable_str_c(type_id, flag) + status = .TRUE. + IF (flag .EQ. 0) status = .FALSE. + + END SUBROUTINE h5tis_variable_str_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns datatype class of compound datatype member. +!! +!! \param type_id Datartpe identifier. +!! \param member_no Index of compound datatype member. +!! \param class Class type for compound dadtype member. Valid classes: +!! \li H5T_NO_CLASS_F (error) +!! \li H5T_INTEGER_F +!! \li H5T_FLOAT_F +!! \li H5T_TIME_F +!! \li H5T_STRING_F +!! \li H5T_BITFIELD_F +!! \li H5T_OPAQUE_F +!! \li H5T_COMPOUND_F +!! \li H5T_REFERENCE_F +!! \li H5T_ENUM_F +!! \li H5T_VLEN_F +!! \li H5T_ARRAY_F +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_member_class() +!! + SUBROUTINE h5tget_member_class_f(type_id, member_no, class, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: member_no + INTEGER, INTENT(OUT) :: class + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_member_class_c(type_id, member_no, class) & + BIND(C,NAME='h5tget_member_class_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + INTEGER, INTENT(IN) :: member_no + INTEGER, INTENT(OUT) :: class + END FUNCTION h5tget_member_class_c + END INTERFACE + + hdferr = h5tget_member_class_c(type_id, member_no, class) + + END SUBROUTINE h5tget_member_class_f + +!> +!! \ingroup FH5T +!! +!! \brief Commits a transient datatype to a file, creating a new named datatype, but does not link it into the file structure. +!! +!! \param loc_id A file or group identifier specifying the file in which the new named datatype is to be created. +!! \param dtype_id A datatype identifier. +!! \param hdferr \fortran_error +!! \param tcpl_id A datatype creation property list identifier (H5P_DEFAULT_F for the default property list.) +!! \param tapl_id A datatype access property list identifier should always be passed as the value H5P_DEFAULT_F. +!! +!! See C API: @ref H5Tcommit_anon() +!! + SUBROUTINE h5tcommit_anon_f(loc_id, dtype_id, hdferr, tcpl_id, tapl_id) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id + INTEGER(HID_T), INTENT(IN) :: dtype_id + INTEGER, INTENT(OUT) :: hdferr + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tcpl_id + INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id + INTEGER(HID_T) :: tcpl_id_default + INTEGER(HID_T) :: tapl_id_default + + INTERFACE + INTEGER FUNCTION h5tcommit_anon_c(loc_id, dtype_id, & + tcpl_id_default, tapl_id_default) BIND(C,NAME='h5tcommit_anon_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: loc_id + INTEGER(HID_T), INTENT(IN) :: dtype_id + INTEGER(HID_T) :: tcpl_id_default + INTEGER(HID_T) :: tapl_id_default + END FUNCTION h5tcommit_anon_c + END INTERFACE + + tcpl_id_default = H5P_DEFAULT_F + tapl_id_default = H5P_DEFAULT_F + + IF(PRESENT(tcpl_id)) tcpl_id_default = tcpl_id + IF(PRESENT(tapl_id)) tapl_id_default = tapl_id + + hdferr = h5tcommit_anon_c(loc_id, dtype_id, & + tcpl_id_default, tapl_id_default ) + + END SUBROUTINE h5tcommit_anon_f + +!> +!! \ingroup FH5T +!! +!! \brief Determines whether a datatype is a named type or a transient type. +!! +!! \param dtype_id A datatype identifier. +!! \param committed .TRUE. if the datatype has been committed, and .FALSE. if the datatype has not been committed. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tcommitted() +!! + SUBROUTINE h5tcommitted_f(dtype_id, committed, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dtype_id + LOGICAL, INTENT(OUT) :: committed + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tcommitted_c(dtype_id) BIND(C,NAME='h5tcommitted_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dtype_id + END FUNCTION h5tcommitted_c + END INTERFACE + + hdferr = h5tcommitted_c(dtype_id) + + IF(hdferr.GT.0)THEN + committed = .TRUE. + hdferr = 0 + ELSE IF(hdferr.EQ.0)THEN + committed = .FALSE. + hdferr = 0 + ELSE + hdferr = -1 + ENDIF + + END SUBROUTINE h5tcommitted_f + +!> +!! \ingroup FH5T +!! +!! \brief Decode A binary object description of data type and return a new object handle. +!! +!! \param buf Buffer for the data space object to be decoded. +!! \param obj_id Object ID. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tdecode() +!! + SUBROUTINE h5tdecode_f(buf, obj_id, hdferr) + IMPLICIT NONE + CHARACTER(LEN=*), INTENT(IN) :: buf + INTEGER(HID_T), INTENT(OUT) :: obj_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tdecode_c(buf, obj_id) BIND(C,NAME='h5tdecode_c') + IMPORT :: C_CHAR + IMPORT :: HID_T + IMPLICIT NONE + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: buf + INTEGER(HID_T), INTENT(OUT) :: obj_id + END FUNCTION h5tdecode_c + END INTERFACE + + hdferr = h5tdecode_c(buf, obj_id) + + END SUBROUTINE h5tdecode_f + +!> +!! \ingroup FH5T +!! +!! \brief Encode a data type object description into a binary buffer. +!! +!! \param obj_id Identifier of the object to be encoded. +!! \param buf Buffer for the object to be encoded into. +!! \param nalloc If set to zero, returns the size of the buffer needed. Otherwise, it sets the size of \p buf allocated. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tencode() +!! + SUBROUTINE h5tencode_f(obj_id, buf, nalloc, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(LEN=*), INTENT(OUT) :: buf + INTEGER(SIZE_T), INTENT(INOUT) :: nalloc + INTEGER, INTENT(OUT) :: hdferr + + INTERFACE + INTEGER FUNCTION h5tencode_c(buf, obj_id, nalloc) BIND(C,NAME='h5tencode_c') + IMPORT :: C_CHAR + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: obj_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(OUT) :: buf + INTEGER(SIZE_T), INTENT(INOUT) :: nalloc + END FUNCTION h5tencode_c + END INTERFACE + + hdferr = h5tencode_c(buf, obj_id, nalloc) + + END SUBROUTINE h5tencode_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns a copy of a datatype creation property list. +!! +!! \param dtype_id Datatype identifier. +!! \param dtpl_id Datatype property list identifier. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_create_plist() +!! + SUBROUTINE h5tget_create_plist_f(dtype_id, dtpl_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dtype_id + INTEGER(HID_T), INTENT(OUT) :: dtpl_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_create_plist_c(dtype_id, dtpl_id) BIND(C,NAME='h5tget_create_plist_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dtype_id + INTEGER(HID_T), INTENT(OUT) :: dtpl_id + END FUNCTION h5tget_create_plist_c + END INTERFACE + + hdferr = h5tget_create_plist_c(dtype_id, dtpl_id) + END SUBROUTINE h5tget_create_plist_f + +!> +!! \ingroup FH5T +!! +!! \brief Check whether the library’s default conversion is hard conversion. +!! +!! \param src_id Identifier for the source datatype. +!! \param dst_id Identifier for the destination datatype. +!! \param flag .TRUE. for compiler conversion, .FALSE. for library conversion. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tcompiler_conv() +!! + SUBROUTINE h5tcompiler_conv_f(src_id, dst_id, flag, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: src_id + INTEGER(HID_T), INTENT(IN) :: dst_id + LOGICAL, INTENT(OUT) :: flag + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: c_flag + + INTERFACE + INTEGER FUNCTION h5tcompiler_conv_c(src_id, dst_id, c_flag) BIND(C,NAME='h5tcompiler_conv_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: src_id + INTEGER(HID_T), INTENT(IN) :: dst_id + INTEGER :: c_flag + END FUNCTION h5tcompiler_conv_c + END INTERFACE + + hdferr = h5tcompiler_conv_c(src_id, dst_id, c_flag) + + flag = .FALSE. + IF(c_flag .GT. 0) flag = .TRUE. + + END SUBROUTINE h5tcompiler_conv_f + +!> +!! \ingroup FH5T +!! +!! \brief Returns the native datatype of a specified datatype. +!! +!! \param dtype_id Datatype identifier for the dataset datatype. +!! \param direction Direction of search: +!! H5T_DIR_DEFAULT, default direction is inscendent, +!! H5T_DIR_ASCEND , in inscendent order, +!! H5T_DIR_DESCEND, in descendent order. +!! * NOTE: In C it is defined as a structure: H5T_direction_t +!! \param native_dtype_id The native datatype identifier for the specified dataset datatype. +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Tget_native_type() +!! + SUBROUTINE h5tget_native_type_f(dtype_id, direction, native_dtype_id, hdferr) + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dtype_id + INTEGER, INTENT(IN) :: direction + INTEGER(HID_T), INTENT(OUT) :: native_dtype_id + INTEGER, INTENT(OUT) :: hdferr + INTERFACE + INTEGER FUNCTION h5tget_native_type_c(dtype_id, direction, native_dtype_id) BIND(C,NAME='h5tget_native_type_c') + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: dtype_id + INTEGER, INTENT(IN) :: direction + INTEGER(HID_T), INTENT(OUT) :: native_dtype_id + END FUNCTION h5tget_native_type_c + END INTERFACE + + hdferr = h5tget_native_type_c(dtype_id, direction, native_dtype_id) + END SUBROUTINE h5tget_native_type_f + +!> +!! \ingroup FH5T +!! +!! \brief Converts data from between specified datatypes. +!! +!! \param src_id Identifier for the source datatype. +!! \param dst_id Identifier for the destination datatype. +!! \param nelmts Size of array buf. +!! \param buf Array containing pre-conversion values. +!! \param hdferr \fortran_error +!! \param background Background buffer. +!! \param plist_id Dataset transfer property list identifier. +!! +!! See C API: @ref H5Tconvert() +!! + SUBROUTINE h5tconvert_f(src_id, dst_id, nelmts, buf, hdferr, background, plist_id) + IMPLICIT NONE + INTEGER(HID_T) , INTENT(IN) :: src_id + INTEGER(HID_T) , INTENT(IN) :: dst_id + INTEGER(SIZE_T), INTENT(IN) :: nelmts + TYPE(C_PTR) , INTENT(INOUT) :: buf + INTEGER , INTENT(OUT) :: hdferr + TYPE(C_PTR) , INTENT(INOUT), OPTIONAL :: background + INTEGER(HID_T) , INTENT(IN) , OPTIONAL :: plist_id + INTEGER(HID_T) :: plist_id_default + TYPE(C_PTR) :: background_default + + INTERFACE + INTEGER FUNCTION h5tconvert_c(src_id, dst_id, nelmts, buf, background, plist_id) & + BIND(C, NAME='h5tconvert_c') + IMPORT :: c_ptr + IMPORT :: HID_T, SIZE_T + IMPLICIT NONE + INTEGER(HID_T) , INTENT(IN) :: src_id + INTEGER(HID_T) , INTENT(IN) :: dst_id + INTEGER(SIZE_T), INTENT(IN) :: nelmts + TYPE(C_PTR) , VALUE :: buf + TYPE(C_PTR) , VALUE :: background + INTEGER(HID_T) , INTENT(IN) :: plist_id + END FUNCTION h5tconvert_c + END INTERFACE + + plist_id_default = H5P_DEFAULT_F + IF(PRESENT(plist_id)) plist_id_default = plist_id + + background_default = C_NULL_PTR + IF(PRESENT(background)) background_default = background + + hdferr = H5Tconvert_c(src_id, dst_id, nelmts, buf, background_default, plist_id_default) + + END SUBROUTINE h5tconvert_f + +!> +!! \ingroup FH5T +!! +!! \brief Inserts a new enumeration datatype member. +!! +!! \attention \fortran_approved +!! +!! \param type_id Datatype identifier for the enumeration datatype. +!! \param name Datatype identifier. +!! \param value Pointer to the value of the new member. +!! \param hdferr \fortran_error +!! +#ifdef H5_DOXYGEN +!! See C API: @ref H5Tenum_insert() +!! + SUBROUTINE h5tenum_insert_f(& +#else + SUBROUTINE h5tenum_insert_f03(& +#endif + type_id, name, value, hdferr) + IMPLICIT NONE + INTEGER(HID_T) , INTENT(IN) :: type_id + CHARACTER(LEN=*), INTENT(IN) :: name + TYPE(C_PTR) , INTENT(IN) :: value + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: namelen + + INTERFACE + INTEGER FUNCTION h5tenum_insert_ptr_c(type_id, name, namelen, value) & + BIND(C, NAME='h5tenum_insert_ptr_c') + IMPORT :: C_CHAR, C_PTR + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name + INTEGER :: namelen + TYPE(C_PTR), VALUE :: value + END FUNCTION h5tenum_insert_ptr_c + END INTERFACE + + namelen = LEN(name) + hdferr = h5tenum_insert_ptr_c(type_id, name, namelen, value) +#ifdef H5_DOXYGEN + END SUBROUTINE h5tenum_insert_f +#else + END SUBROUTINE h5tenum_insert_f03 +#endif + +!> +!! \ingroup FH5T +!! +!! \brief Inserts a new enumeration datatype member. +!! +!! \attention \fortran_obsolete +!! +!! \param type_id Datatype identifier for the enumeration datatype. +!! \param name Datatype identifier. +!! \param value Value of the new member. +!! \param hdferr \fortran_error +!! +#ifdef H5_DOXYGEN +!! See C API: @ref H5Tenum_insert() +!! + SUBROUTINE h5tenum_insert_f(type_id, name, value, hdferr) +#else + SUBROUTINE h5tenum_insert_f90(type_id, name, value, hdferr) +#endif + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(LEN=*), INTENT(IN) :: name + INTEGER, INTENT(IN) :: value + INTEGER, INTENT(OUT) :: hdferr + INTEGER :: namelen + INTERFACE + INTEGER FUNCTION h5tenum_insert_c(type_id, name, namelen, value) BIND(C,NAME='h5tenum_insert_c') + IMPORT :: C_CHAR + IMPORT :: HID_T + IMPLICIT NONE + INTEGER(HID_T), INTENT(IN) :: type_id + CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name + INTEGER, INTENT(IN) :: value + INTEGER :: namelen + END FUNCTION h5tenum_insert_c + END INTERFACE + + namelen = LEN(name) + hdferr = h5tenum_insert_c(type_id, name, namelen, value) +#ifdef H5_DOXYGEN + END SUBROUTINE h5tenum_insert_f +#else + END SUBROUTINE h5tenum_insert_f90 +#endif + +END MODULE H5T |
