summaryrefslogtreecommitdiffstats
path: root/fortran/src/H5Gff.F90
diff options
context:
space:
mode:
authorDana Robinson <43805+derobins@users.noreply.github.com>2023-04-22 06:25:12 (GMT)
committerGitHub <noreply@github.com>2023-04-22 06:25:12 (GMT)
commit7707859279a60b32d2b6c915442a7c04d44445b4 (patch)
tree890d16aa2408b270368b36ea4f05ca20fe2f16f6 /fortran/src/H5Gff.F90
parenta4371b6fce577852691dfdeac642dec1dd4b9453 (diff)
downloadhdf5-7707859279a60b32d2b6c915442a7c04d44445b4.zip
hdf5-7707859279a60b32d2b6c915442a7c04d44445b4.tar.gz
hdf5-7707859279a60b32d2b6c915442a7c04d44445b4.tar.bz2
Merge with develop (#2790)
Diffstat (limited to 'fortran/src/H5Gff.F90')
-rw-r--r--fortran/src/H5Gff.F90936
1 files changed, 801 insertions, 135 deletions
diff --git a/fortran/src/H5Gff.F90 b/fortran/src/H5Gff.F90
index 436eece..655c226 100644
--- a/fortran/src/H5Gff.F90
+++ b/fortran/src/H5Gff.F90
@@ -36,8 +36,127 @@
!
MODULE H5G
- USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_CHAR
+ USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_CHAR, C_INT
USE H5GLOBAL
+ USE H5P, ONLY : H5Pcreate_f, H5Pset_local_heap_size_hint_f, H5Pclose_f
+
+
+!
+! @brief Fortran2003 Derived Type for @ref H5G_info_t
+!
+ TYPE, BIND(C) :: H5G_info_t
+ INTEGER(C_INT ) :: storage_type !< Type of storage for links in group:
+ !< \li H5G_STORAGE_TYPE_COMPACT_F: Compact storage
+ !< \li H5G_STORAGE_TYPE_DENSE_F: Indexed storage
+ !< \li H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure
+ INTEGER(HSIZE_T) :: nlinks !< Number of links in group
+ INTEGER(C_INT64_T) :: max_corder !< Current maximum creation order value for group
+ LOGICAL(C_BOOL) :: mounted !< Whether group has a file mounted on it
+ END TYPE H5G_info_t
+
+#ifndef H5_DOXYGEN
+ INTERFACE H5Gget_info_f
+ MODULE PROCEDURE h5Gget_info_f90
+ MODULE PROCEDURE h5Gget_info_f03
+ END INTERFACE
+
+ INTERFACE H5Gget_info_by_idx_f
+ MODULE PROCEDURE H5Gget_info_by_idx_f90
+ MODULE PROCEDURE H5Gget_info_by_idx_f03
+ END INTERFACE
+
+ INTERFACE H5Gget_info_by_name_f
+ MODULE PROCEDURE H5Gget_info_by_name_f90
+ MODULE PROCEDURE H5Gget_info_by_name_f03
+ END INTERFACE
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5Gget_info(loc_id, ginfo) BIND(C,NAME='H5Gget_info')
+ IMPORT :: C_INT, C_PTR
+ IMPORT :: HID_T
+ INTEGER(HID_T), VALUE :: loc_id
+ TYPE(C_PTR), VALUE :: ginfo
+ END FUNCTION H5Gget_info
+ END INTERFACE
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5Gget_info_async(file, func, line, loc_id, ginfo, es_id) &
+ BIND(C,NAME='H5Gget_info_async')
+ IMPORT :: C_CHAR, C_INT, C_PTR
+ IMPORT :: HID_T
+ TYPE(C_PTR), VALUE :: file
+ TYPE(C_PTR), VALUE :: func
+ INTEGER(C_INT), VALUE :: line
+ INTEGER(HID_T), VALUE :: loc_id
+ TYPE(C_PTR) , VALUE :: ginfo
+ INTEGER(HID_T), VALUE :: es_id
+ END FUNCTION H5Gget_info_async
+ END INTERFACE
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5Gget_info_by_idx(loc_id, group_name, idx_type, order, n, ginfo, lapl_id) &
+ BIND(C,NAME='H5Gget_info_by_idx')
+ IMPORT :: C_CHAR, C_INT, C_PTR
+ IMPORT :: HID_T, HSIZE_T
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: group_name
+ INTEGER(C_INT) , VALUE :: idx_type
+ INTEGER(C_INT) , VALUE :: order
+ INTEGER(HSIZE_T), VALUE :: n
+ TYPE(C_PTR) , VALUE :: ginfo
+ INTEGER(HID_T) , VALUE :: lapl_id
+ END FUNCTION H5Gget_info_by_idx
+ END INTERFACE
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5Gget_info_by_idx_async(file, func, line, loc_id, &
+ group_name, idx_type, order, n, ginfo, lapl_id, es_id) &
+ BIND(C,NAME='H5Gget_info_by_idx_async')
+ IMPORT :: C_CHAR, C_INT, C_PTR
+ IMPORT :: HID_T, HSIZE_T
+ TYPE(C_PTR), VALUE :: file
+ TYPE(C_PTR), VALUE :: func
+ INTEGER(C_INT), VALUE :: line
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: group_name
+ INTEGER(C_INT) , VALUE :: idx_type
+ INTEGER(C_INT) , VALUE :: order
+ INTEGER(HSIZE_T), VALUE :: n
+ TYPE(C_PTR) , VALUE :: ginfo
+ INTEGER(HID_T) , VALUE :: lapl_id
+ INTEGER(HID_T) , VALUE :: es_id
+ END FUNCTION H5Gget_info_by_idx_async
+ END INTERFACE
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5Gget_info_by_name(loc_id, name, ginfo, lapl_id) &
+ BIND(C,NAME='H5Gget_info_by_name')
+ IMPORT :: C_CHAR, C_INT, C_PTR
+ IMPORT :: HID_T
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
+ TYPE(C_PTR), VALUE :: ginfo
+ INTEGER(HID_T), VALUE :: lapl_id
+ END FUNCTION H5Gget_info_by_name
+ END INTERFACE
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5Gget_info_by_name_async(file, func, line,loc_id, name, ginfo, lapl_id, es_id) &
+ BIND(C,NAME='H5Gget_info_by_name_async')
+ IMPORT :: C_CHAR, C_INT, C_PTR
+ IMPORT :: HID_T
+ TYPE(C_PTR), VALUE :: file
+ TYPE(C_PTR), VALUE :: func
+ INTEGER(C_INT), VALUE :: line
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
+ TYPE(C_PTR), VALUE :: ginfo
+ INTEGER(HID_T), VALUE :: lapl_id
+ INTEGER(HID_T), VALUE :: es_id
+ END FUNCTION H5Gget_info_by_name_async
+ END INTERFACE
+
+#endif
CONTAINS
@@ -52,7 +171,7 @@ CONTAINS
!! \param hdferr \fortran_error
!! \param size_hint A parameter indicating the number of bytes to reserve for the names that will appear in the group.
!! Set to OBJECT_NAMELEN_DEFAULT_F if using any of the optional parameters lcpl_id, gcpl_id,
-!! and/or gapl_id when not using keywords in specifying the optional parameters.
+!! and/or gapl_id when not using keywords in specifying the optional parameters. See @ref H5Gcreate1().
!! \param lcpl_id Property list for link creation.
!! \param gcpl_id Property list for group creation.
!! \param gapl_id Property list for group access.
@@ -65,50 +184,187 @@ CONTAINS
CHARACTER(LEN=*), INTENT(IN) :: name
INTEGER(HID_T), INTENT(OUT) :: grp_id
INTEGER, INTENT(OUT) :: hdferr
- INTEGER(SIZE_T), OPTIONAL, INTENT(IN) :: size_hint
- INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id
- INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gcpl_id
- INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id
+ INTEGER(SIZE_T), INTENT(IN), OPTIONAL :: size_hint
+ INTEGER(HID_T) , INTENT(IN), OPTIONAL :: lcpl_id
+ INTEGER(HID_T) , INTENT(IN), OPTIONAL :: gcpl_id
+ INTEGER(HID_T) , INTENT(IN), OPTIONAL :: gapl_id
INTEGER(HID_T) :: lcpl_id_default
INTEGER(HID_T) :: gcpl_id_default
INTEGER(HID_T) :: gapl_id_default
- INTEGER :: namelen ! Length of the name character string
INTEGER(SIZE_T) :: size_hint_default
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
INTERFACE
- INTEGER FUNCTION h5gcreate_c(loc_id, name, namelen, &
- size_hint_default, grp_id, lcpl_id_default, gcpl_id_default, gapl_id_default) &
- BIND(C,NAME='h5gcreate_c')
+ INTEGER(HID_T) FUNCTION H5Gcreate2(loc_id, name, &
+ lcpl_id_default, gcpl_id_default, gapl_id_default) &
+ BIND(C,NAME='H5Gcreate2')
IMPORT :: C_CHAR
- IMPORT :: HID_T, SIZE_T
- INTEGER(HID_T), INTENT(IN) :: loc_id
- CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
- INTEGER :: namelen
- INTEGER(SIZE_T) :: size_hint_default
- INTEGER(HID_T), INTENT(OUT) :: grp_id
- INTEGER(HID_T) :: lcpl_id_default
- INTEGER(HID_T) :: gcpl_id_default
- INTEGER(HID_T) :: gapl_id_default
- END FUNCTION h5gcreate_c
+ IMPORT :: HID_T
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
+ INTEGER(HID_T), VALUE :: lcpl_id_default
+ INTEGER(HID_T), VALUE :: gcpl_id_default
+ INTEGER(HID_T), VALUE :: gapl_id_default
+ END FUNCTION H5Gcreate2
END INTERFACE
- size_hint_default = OBJECT_NAMELEN_DEFAULT_F
- IF (PRESENT(size_hint)) size_hint_default = size_hint
+ hdferr = 0
+ c_name = TRIM(name)//C_NULL_CHAR
+
lcpl_id_default = H5P_DEFAULT_F
- IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id
gcpl_id_default = H5P_DEFAULT_F
- IF(PRESENT(gcpl_id)) gcpl_id_default = gcpl_id
gapl_id_default = H5P_DEFAULT_F
- IF(PRESENT(gapl_id)) gapl_id_default = gapl_id
+ size_hint_default = OBJECT_NAMELEN_DEFAULT_F
- namelen = LEN(name)
+ IF(PRESENT(size_hint)) size_hint_default = size_hint
+ IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id
+ IF(PRESENT(gcpl_id)) gcpl_id_default = gcpl_id
+ IF(PRESENT(gapl_id)) gapl_id_default = gapl_id
+ !
+ ! size_hint was introduced as an overload option for H5Gcreate1,
+ ! it was removed in H5Gcreate2.
+ !
+ IF(size_hint_default .EQ. OBJECT_NAMELEN_DEFAULT_F)THEN
+ grp_id = H5Gcreate2(loc_id, c_name, &
+ lcpl_id_default, gcpl_id_default, gapl_id_default)
+ ELSE
+ ! Create the group creation property list
+ CALL H5Pcreate_f(H5P_GROUP_CREATE_F, gcpl_id_default, hdferr)
+ IF(hdferr.LT.0) RETURN
+
+ ! Set the local heap size hint
+ CALL H5Pset_local_heap_size_hint_f(gcpl_id_default, size_hint, hdferr)
+ IF(hdferr.LT.0)THEN
+ CALL H5Pclose_f(gcpl_id_default, hdferr)
+ hdferr = -1
+ RETURN
+ END IF
+
+ grp_id = H5Gcreate2(loc_id, c_name, &
+ H5P_DEFAULT_F, gcpl_id_default, H5P_DEFAULT_F)
+
+ CALL H5Pclose_f(gcpl_id_default, hdferr)
+ IF(hdferr.LT.0) RETURN
+ ENDIF
- hdferr = h5gcreate_c(loc_id, name, namelen, size_hint_default, grp_id, &
- lcpl_id_default, gcpl_id_default, gapl_id_default)
+ IF(grp_id.LT.0) hdferr = -1
END SUBROUTINE h5gcreate_f
+
+!>
+!! \ingroup FH5G
+!!
+!! \brief Asynchronously creates a new group.
+!!
+!! \param loc_id Location identifier.
+!! \param name Group name at the specified location.
+!! \param grp_id Group identifier.
+!! \param es_id \es_id
+!! \param hdferr \fortran_error
+!! \param size_hint A parameter indicating the number of bytes to reserve for the names that will appear in the group.
+!! Set to OBJECT_NAMELEN_DEFAULT_F if using any of the optional parameters lcpl_id, gcpl_id,
+!! and/or gapl_id when not using keywords in specifying the optional parameters. See @ref H5Gcreate1().
+!! \param lcpl_id Property list for link creation.
+!! \param gcpl_id Property list for group creation.
+!! \param gapl_id Property list for group access.
+!! \param file \fortran_file
+!! \param func \fortran_func
+!! \param line \fortran_line
+!!
+!! See C API: @ref H5Gcreate_async()
+!!
+ SUBROUTINE h5gcreate_async_f(loc_id, name, grp_id, es_id, hdferr, &
+ size_hint, lcpl_id, gcpl_id, gapl_id, file, func, line)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(LEN=*), INTENT(IN) :: name
+ INTEGER(HID_T), INTENT(OUT) :: grp_id
+ INTEGER(HID_T), INTENT(IN) :: es_id
+ INTEGER, INTENT(OUT) :: hdferr
+ INTEGER(SIZE_T), INTENT(IN), OPTIONAL :: size_hint
+ INTEGER(HID_T) , INTENT(IN), OPTIONAL :: lcpl_id
+ INTEGER(HID_T) , INTENT(IN), OPTIONAL :: gcpl_id
+ INTEGER(HID_T) , INTENT(IN), OPTIONAL :: gapl_id
+ TYPE(C_PTR), OPTIONAL :: file
+ TYPE(C_PTR), OPTIONAL :: func
+ INTEGER , INTENT(IN), OPTIONAL :: line
+
+ INTEGER(HID_T) :: lcpl_id_default
+ INTEGER(HID_T) :: gcpl_id_default
+ INTEGER(HID_T) :: gapl_id_default
+ INTEGER(SIZE_T) :: size_hint_default
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
+ TYPE(C_PTR) :: file_default = C_NULL_PTR
+ TYPE(C_PTR) :: func_default = C_NULL_PTR
+ INTEGER(KIND=C_INT) :: line_default = 0
+
+ INTERFACE
+ INTEGER(HID_T) FUNCTION H5Gcreate_async(file, func, line, loc_id, name, &
+ lcpl_id_default, gcpl_id_default, gapl_id_default, es_id) &
+ BIND(C,NAME='H5Gcreate_async')
+ IMPORT :: C_CHAR, C_INT, C_PTR
+ IMPORT :: HID_T
+ IMPLICIT NONE
+ TYPE(C_PTR), VALUE :: file
+ TYPE(C_PTR), VALUE :: func
+ INTEGER(C_INT), VALUE :: line
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
+ INTEGER(HID_T), VALUE :: lcpl_id_default
+ INTEGER(HID_T), VALUE :: gcpl_id_default
+ INTEGER(HID_T), VALUE :: gapl_id_default
+ INTEGER(HID_T), VALUE :: es_id
+ END FUNCTION H5Gcreate_async
+ END INTERFACE
+
+ hdferr = 0
+ c_name = TRIM(name)//C_NULL_CHAR
+
+ lcpl_id_default = H5P_DEFAULT_F
+ gcpl_id_default = H5P_DEFAULT_F
+ gapl_id_default = H5P_DEFAULT_F
+ size_hint_default = OBJECT_NAMELEN_DEFAULT_F
+
+ IF(PRESENT(size_hint)) size_hint_default = size_hint
+ IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id
+ IF(PRESENT(gcpl_id)) gcpl_id_default = gcpl_id
+ IF(PRESENT(gapl_id)) gapl_id_default = gapl_id
+ IF(PRESENT(file)) file_default = file
+ IF(PRESENT(func)) func_default = func
+ IF(PRESENT(line)) line_default = INT(line, C_INT)
+ !
+ ! size_hint was introduced as an overload option for H5Gcreate1,
+ ! it was removed in H5Gcreate2.
+ !
+ IF(size_hint_default .EQ. OBJECT_NAMELEN_DEFAULT_F)THEN
+ grp_id = H5Gcreate_async(file_default, func_default, line_default, loc_id, c_name, &
+ lcpl_id_default, gcpl_id_default, gapl_id_default, es_id)
+ ELSE
+ ! Create the group creation property list
+ CALL H5Pcreate_f(H5P_GROUP_CREATE_F, gcpl_id_default, hdferr)
+ IF(hdferr.LT.0) RETURN
+
+ ! Set the local heap size hint
+ CALL H5Pset_local_heap_size_hint_f(gcpl_id_default, size_hint, hdferr)
+ IF(hdferr.LT.0)THEN
+ CALL H5Pclose_f(gcpl_id_default, hdferr)
+ hdferr = -1
+ RETURN
+ END IF
+
+ grp_id = H5Gcreate_async(file_default, func_default, line_default, loc_id, c_name, &
+ H5P_DEFAULT_F, gcpl_id_default, H5P_DEFAULT_F, es_id)
+
+ CALL H5Pclose_f(gcpl_id_default, hdferr)
+ IF(hdferr.LT.0) RETURN
+ ENDIF
+
+ IF(grp_id.LT.0) hdferr = -1
+
+ END SUBROUTINE h5gcreate_async_f
+
!>
!! \ingroup FH5G
!!
@@ -128,30 +384,100 @@ CONTAINS
CHARACTER(LEN=*), INTENT(IN) :: name
INTEGER(HID_T), INTENT(OUT) :: grp_id
INTEGER, INTENT(OUT) :: hdferr
- INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: gapl_id
+
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
INTEGER(HID_T) :: gapl_id_default
- INTEGER :: namelen ! Length of the name character string
INTERFACE
- INTEGER FUNCTION h5gopen_c(loc_id, name, namelen, gapl_id_default, grp_id) &
- BIND(C,NAME='h5gopen_c')
+ INTEGER(HID_T) FUNCTION H5Gopen2(loc_id, name, gapl_id_default) &
+ BIND(C,NAME='H5Gopen2')
IMPORT :: C_CHAR
IMPORT :: HID_T
- INTEGER(HID_T), INTENT(IN) :: loc_id
- CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: name
- INTEGER :: namelen
- INTEGER(HID_T), INTENT(IN) :: gapl_id_default
- INTEGER(HID_T), INTENT(OUT) :: grp_id
- END FUNCTION h5gopen_c
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
+ INTEGER(HID_T), VALUE :: gapl_id_default
+ END FUNCTION H5Gopen2
END INTERFACE
+ c_name = TRIM(name)//C_NULL_CHAR
+
gapl_id_default = H5P_DEFAULT_F
IF(PRESENT(gapl_id)) gapl_id_default = gapl_id
- namelen = LEN(name)
- hdferr = h5gopen_c(loc_id, name, namelen, gapl_id_default, grp_id)
+ grp_id = H5Gopen2(loc_id, c_name, gapl_id_default)
+
+ hdferr = 0
+ IF(grp_id.LT.0) hdferr = -1
END SUBROUTINE h5gopen_f
+
+!>
+!! \ingroup FH5G
+!!
+!! \brief Asynchronously opens an existing group.
+!!
+!! \param loc_id Location identifier.
+!! \param name Name of the group to open.
+!! \param grp_id Group identifier.
+!! \param es_id \es_id
+!! \param hdferr \fortran_error
+!! \param gapl_id Group access property list identifier.
+!! \param file \fortran_file
+!! \param func \fortran_func
+!! \param line \fortran_line
+!!
+!! See C API: @ref H5Gopen_async()
+!!
+ SUBROUTINE h5gopen_async_f(loc_id, name, grp_id, es_id, hdferr, &
+ gapl_id, file, func, line)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(LEN=*), INTENT(IN) :: name
+ INTEGER(HID_T), INTENT(OUT) :: grp_id
+ INTEGER(HID_T), INTENT(IN) :: es_id
+ INTEGER, INTENT(OUT) :: hdferr
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: gapl_id
+ TYPE(C_PTR), OPTIONAL :: file
+ TYPE(C_PTR), OPTIONAL :: func
+ INTEGER , INTENT(IN), OPTIONAL :: line
+
+ INTEGER(HID_T) :: gapl_id_default
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
+ TYPE(C_PTR) :: file_default = C_NULL_PTR
+ TYPE(C_PTR) :: func_default = C_NULL_PTR
+ INTEGER(KIND=C_INT) :: line_default = 0
+
+ INTERFACE
+ INTEGER(HID_T) FUNCTION H5Gopen_async(file, func, line, loc_id, name, gapl_id_default, es_id) &
+ BIND(C,NAME='H5Gopen_async')
+ IMPORT :: C_CHAR, C_INT, C_PTR
+ IMPORT :: HID_T
+ TYPE(C_PTR), VALUE :: file
+ TYPE(C_PTR), VALUE :: func
+ INTEGER(C_INT), VALUE :: line
+ INTEGER(HID_T), VALUE :: loc_id
+ CHARACTER(KIND=C_CHAR), DIMENSION(*) :: name
+ INTEGER(HID_T), VALUE :: gapl_id_default
+ INTEGER(HID_T), VALUE :: es_id
+ END FUNCTION H5Gopen_async
+ END INTERFACE
+
+ c_name = TRIM(name)//C_NULL_CHAR
+
+ gapl_id_default = H5P_DEFAULT_F
+ IF(PRESENT(gapl_id)) gapl_id_default = gapl_id
+ IF(PRESENT(file)) file_default = file
+ IF(PRESENT(func)) func_default = func
+ IF(PRESENT(line)) line_default = INT(line, C_INT)
+
+ grp_id = H5Gopen_async(file_default, func_default, line_default, &
+ loc_id, c_name, gapl_id_default, es_id)
+
+ hdferr = 0
+ IF(grp_id.LT.0) hdferr = -1
+
+ END SUBROUTINE h5gopen_async_f
!>
!! \ingroup FH5G
!!
@@ -167,18 +493,66 @@ CONTAINS
INTEGER(HID_T), INTENT(IN) :: grp_id
INTEGER, INTENT(OUT) :: hdferr
INTERFACE
- INTEGER FUNCTION h5gclose_c(grp_id) BIND(C,NAME='h5gclose_c')
+ INTEGER(C_INT) FUNCTION H5Gclose(grp_id) BIND(C,NAME='H5Gclose')
+ IMPORT :: C_INT
IMPORT :: HID_T
- INTEGER(HID_T), INTENT(IN) :: grp_id
- END FUNCTION h5gclose_c
+ INTEGER(HID_T), VALUE :: grp_id
+ END FUNCTION H5Gclose
END INTERFACE
- hdferr = h5gclose_c(grp_id)
+ hdferr = INT(H5Gclose(grp_id))
END SUBROUTINE h5gclose_f
!>
!! \ingroup FH5G
!!
+!! \brief Asynchronously closes the specified group.
+!!
+!! \param grp_id Group identifier.
+!! \param es_id \es_id
+!! \param hdferr \fortran_error
+!! \param file \fortran_file
+!! \param func \fortran_func
+!! \param line \fortran_line
+!!
+!! See C API: @ref H5Gclose_async()
+!!
+ SUBROUTINE h5gclose_async_f(grp_id, es_id, hdferr, file, func, line)
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: grp_id
+ INTEGER(HID_T), INTENT(IN) :: es_id
+ INTEGER, INTENT(OUT) :: hdferr
+ TYPE(C_PTR), OPTIONAL :: file
+ TYPE(C_PTR), OPTIONAL :: func
+ INTEGER , INTENT(IN), OPTIONAL :: line
+
+ TYPE(C_PTR) :: file_default = C_NULL_PTR
+ TYPE(C_PTR) :: func_default = C_NULL_PTR
+ INTEGER(KIND=C_INT) :: line_default = 0
+
+ INTERFACE
+ INTEGER(C_INT) FUNCTION H5Gclose_async(file, func, line, grp_id, es_id) &
+ BIND(C,NAME='H5Gclose_async')
+ IMPORT :: C_CHAR, C_INT, C_PTR
+ IMPORT :: HID_T
+ TYPE(C_PTR), VALUE :: file
+ TYPE(C_PTR), VALUE :: func
+ INTEGER(C_INT), VALUE :: line
+ INTEGER(HID_T), VALUE :: grp_id
+ INTEGER(HID_T), VALUE :: es_id
+ END FUNCTION H5Gclose_async
+ END INTERFACE
+
+ IF(PRESENT(file)) file_default = file
+ IF(PRESENT(func)) func_default = func
+ IF(PRESENT(line)) line_default = INT(line, C_INT)
+
+ hdferr = INT(H5Gclose_async(file_default, func_default, line_default, grp_id, es_id))
+
+ END SUBROUTINE h5gclose_async_f
+!>
+!! \ingroup FH5G
+!!
!! \brief Returns name and type of the group member identified by its index.
!!
!! \param loc_id Location identifier.
@@ -604,8 +978,8 @@ CONTAINS
INTEGER(HID_T), INTENT(IN) :: loc_id
INTEGER(HID_T), INTENT(OUT) :: grp_id
INTEGER, INTENT(OUT) :: hdferr
- INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gcpl_id
- INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: gcpl_id
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: gapl_id
INTEGER(HID_T) :: gcpl_id_default
INTEGER(HID_T) :: gapl_id_default
@@ -657,15 +1031,96 @@ CONTAINS
END SUBROUTINE h5gget_create_plist_f
+#ifdef H5_DOXYGEN
!>
!! \ingroup FH5G
!!
!! \brief Retrieves information about a group
!!
-!! \param group_id Group identifier.
+!! \attention \fortran_approved
+!!
+!! \param loc_id Location identifier. The identifier may be that of a file, group, dataset, named datatype, or attribute.
+!! \param ginfo Derived type in which group information is returned.
+!! \param hdferr \fortran_error
+!!
+!! See C API: @ref H5Gget_info()
+!!
+ SUBROUTINE h5gget_info_f(&
+#else
+ SUBROUTINE h5gget_info_f03(&
+#endif
+ loc_id, ginfo, hdferr)
+
+ IMPLICIT NONE
+
+ INTEGER(HID_T) , INTENT(IN) :: loc_id
+ TYPE(H5G_info_t), INTENT(OUT), TARGET :: ginfo
+ INTEGER , INTENT(OUT) :: hdferr
+
+ TYPE(C_PTR) :: ptr
+
+ ptr = C_LOC(ginfo)
+
+ hdferr = INT(H5Gget_info(loc_id, ptr))
+
+#ifdef H5_DOXYGEN
+ END SUBROUTINE h5gget_info_f
+#else
+ END SUBROUTINE h5gget_info_f03
+#endif
+
+!>
+!! \ingroup FH5G
+!!
+!! \brief Asynchronously retrieves information about a group
+!!
+!! \param loc_id Location identifier. The identifier may be that of a file, group, dataset, named datatype, or attribute.
+!! \param ginfo Derived type in which group information is returned.
+!! \param es_id \es_id
+!! \param hdferr \fortran_error
+!! \param file \fortran_file
+!! \param func \fortran_func
+!! \param line \fortran_line
+!!
+!! See C API: @ref H5Gget_info_async()
+!!
+ SUBROUTINE h5gget_info_async_f(loc_id, ginfo, es_id, hdferr, file, func, line)
+
+ IMPLICIT NONE
+
+ INTEGER(HID_T) , INTENT(IN) :: loc_id
+ TYPE(H5G_info_t), INTENT(OUT), TARGET :: ginfo
+ INTEGER(HID_T) , INTENT(IN) :: es_id
+ INTEGER , INTENT(OUT) :: hdferr
+ TYPE(C_PTR), OPTIONAL :: file
+ TYPE(C_PTR), OPTIONAL :: func
+ INTEGER , INTENT(IN), OPTIONAL :: line
+
+ TYPE(C_PTR) :: ptr
+ TYPE(C_PTR) :: file_default = C_NULL_PTR
+ TYPE(C_PTR) :: func_default = C_NULL_PTR
+ INTEGER(KIND=C_INT) :: line_default = 0
+
+ IF(PRESENT(file)) file_default = file
+ IF(PRESENT(func)) func_default = func
+ IF(PRESENT(line)) line_default = INT(line, C_INT)
+ ptr = C_LOC(ginfo)
+
+ hdferr = INT(H5Gget_info_async(file_default, func_default, line_default, loc_id, ptr, es_id))
+
+ END SUBROUTINE h5gget_info_async_f
+
+!>
+!! \ingroup FH5G
+!!
+!! \brief Retrieves information about a group.
+!!
+!! \attention \fortran_obsolete. Both nlinks and max_corder can overflow.
+!!
+!! \param loc_id Location identifier. The identifier may be that of a file, group, dataset, named datatype, or attribute.
!! \param storage_type Type of storage for links in group:
!! \li H5G_STORAGE_TYPE_COMPACT_F: Compact storage
-!! \li H5G_STORAGE_TYPE_DENS_FE: Indexed storage
+!! \li H5G_STORAGE_TYPE_DENSE_F: Indexed storage
!! \li H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure
!! \param nlinks Number of links in group.
!! \param max_corder Current maximum creation order value for group.
@@ -674,48 +1129,169 @@ CONTAINS
!!
!! See C API: @ref H5Gget_info()
!!
- SUBROUTINE h5gget_info_f(group_id, storage_type, nlinks, max_corder, hdferr, mounted)
+#ifdef H5_DOXYGEN
+ SUBROUTINE h5gget_info_f(&
+#else
+ SUBROUTINE h5gget_info_f90(&
+#endif
+ loc_id, storage_type, nlinks, max_corder, hdferr, mounted)
+
IMPLICIT NONE
- INTEGER(HID_T), INTENT(IN) :: group_id
+ INTEGER(HID_T), INTENT(IN) :: loc_id
INTEGER, INTENT(OUT) :: storage_type
INTEGER, INTENT(OUT) :: nlinks
INTEGER, INTENT(OUT) :: max_corder
INTEGER, INTENT(OUT) :: hdferr
LOGICAL, INTENT(OUT), OPTIONAL :: mounted
- INTEGER :: mounted_c
- INTERFACE
- INTEGER FUNCTION h5gget_info_c(group_id, storage_type, nlinks, max_corder, mounted_c) &
- BIND(C,NAME='h5gget_info_c')
- IMPORT :: HID_T
- INTEGER(HID_T), INTENT(IN) :: group_id
- INTEGER, INTENT(OUT) :: storage_type
- INTEGER, INTENT(OUT) :: nlinks
- INTEGER, INTENT(OUT) :: max_corder
- INTEGER :: mounted_c
- END FUNCTION h5gget_info_c
- END INTERFACE
+ TYPE(H5G_info_t), TARGET :: ginfo
+ TYPE(C_PTR) :: ptr
+
+ ptr = C_LOC(ginfo)
+ hdferr = INT(H5Gget_info(loc_id, ptr))
- hdferr = h5gget_info_c(group_id, storage_type, nlinks, max_corder, mounted_c)
+ storage_type = INT(ginfo%storage_type)
+ nlinks = INT(ginfo%nlinks)
+ max_corder = INT(ginfo%max_corder)
IF(PRESENT(mounted))THEN
- IF(mounted_c.EQ.0) THEN
- mounted = .FALSE.
- ELSE
+ IF(ginfo%mounted) THEN
mounted = .TRUE.
+ ELSE
+ mounted = .FALSE.
ENDIF
ENDIF
-
+#ifdef H5_DOXYGEN
END SUBROUTINE h5gget_info_f
+#else
+ END SUBROUTINE h5gget_info_f90
+#endif
+
+!>
+!! \ingroup FH5G
+!!
+!! \brief Retrieves information about a group, according to the group’s position within an index.
+!!
+!! \attention \fortran_approved
+!!
+!! \param loc_id Location identifier. The identifier may be that of a file, group, dataset, named datatype, or attribute.
+!! \param group_name Name of group containing group for which information is to be retrieved.
+!! \param idx_type Index type.
+!! \param order Order of the count in the index.
+!! \param n Position in the index of the group for which information is retrieved.
+!! \param ginfo Derived type in which group information is returned.
+!! \param hdferr \fortran_error
+!! \param lapl_id Link access property list.
+!!
+!! See C API: @ref H5Gget_info_by_idx()
+!!
+#ifdef H5_DOXYGEN
+ SUBROUTINE h5gget_info_by_idx_f(&
+#else
+ SUBROUTINE h5gget_info_by_idx_f03(&
+#endif
+ loc_id, group_name, idx_type, order, n, ginfo, hdferr, lapl_id)
+
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(LEN=*), INTENT(IN) :: group_name
+ INTEGER, INTENT(IN) :: idx_type
+ INTEGER, INTENT(IN) :: order
+ INTEGER(HSIZE_T), INTENT(IN) :: n
+ TYPE(H5G_info_t), INTENT(OUT), TARGET :: ginfo
+ INTEGER, INTENT(OUT) :: hdferr
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: lapl_id
+
+ INTEGER(HID_T) :: lapl_id_default
+ CHARACTER(LEN=LEN_TRIM(group_name)+1,KIND=C_CHAR) :: c_group_name
+ TYPE(C_PTR) :: ptr
+
+ c_group_name = TRIM(group_name)//C_NULL_CHAR
+
+ lapl_id_default = H5P_DEFAULT_F
+ IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
+
+ ptr = C_LOC(ginfo)
+
+ hdferr = H5Gget_info_by_idx(loc_id, c_group_name, &
+ INT(idx_type,C_INT), INT(order, C_INT), n, ptr, lapl_id_default )
+
+#ifdef H5_DOXYGEN
+ END SUBROUTINE h5gget_info_by_idx_f
+#else
+ END SUBROUTINE h5gget_info_by_idx_f03
+#endif
+
+!>
+!! \ingroup FH5G
+!!
+!! \brief Asynchronously retrieves information about a group, according to the group’s position within an index.
+!!
+!! \param loc_id Location identifier. The identifier may be that of a file, group, dataset, named datatype, or attribute.
+!! \param group_name Name of group containing group for which information is to be retrieved.
+!! \param idx_type Index type.
+!! \param order Order of the count in the index.
+!! \param n Position in the index of the group for which information is retrieved.
+!! \param ginfo Derived type in which group information is returned.
+!! \param es_id \es_id
+!! \param hdferr \fortran_error
+!! \param lapl_id Link access property list.
+!! \param file \fortran_file
+!! \param func \fortran_func
+!! \param line \fortran_line
+!!
+!! See C API: @ref H5Gget_info_by_idx_async()
+!!
+ SUBROUTINE h5gget_info_by_idx_async_f(loc_id, group_name, idx_type, order, n, ginfo, es_id, hdferr, &
+ lapl_id, file, func, line)
+
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(LEN=*), INTENT(IN) :: group_name
+ INTEGER, INTENT(IN) :: idx_type
+ INTEGER, INTENT(IN) :: order
+ INTEGER(HSIZE_T), INTENT(IN) :: n
+ TYPE(H5G_info_t), INTENT(OUT), TARGET :: ginfo
+ INTEGER(HID_T), INTENT(IN) :: es_id
+ INTEGER, INTENT(OUT) :: hdferr
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: lapl_id
+ TYPE(C_PTR), OPTIONAL :: file
+ TYPE(C_PTR), OPTIONAL :: func
+ INTEGER , INTENT(IN), OPTIONAL :: line
+
+ INTEGER(HID_T) :: lapl_id_default
+ CHARACTER(LEN=LEN_TRIM(group_name)+1,KIND=C_CHAR) :: c_group_name
+ TYPE(C_PTR) :: ptr
+ TYPE(C_PTR) :: file_default = C_NULL_PTR
+ TYPE(C_PTR) :: func_default = C_NULL_PTR
+ INTEGER(KIND=C_INT) :: line_default = 0
+
+ c_group_name = TRIM(group_name)//C_NULL_CHAR
+
+ lapl_id_default = H5P_DEFAULT_F
+ IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
+ IF(PRESENT(file)) file_default = file
+ IF(PRESENT(func)) func_default = func
+ IF(PRESENT(line)) line_default = INT(line, C_INT)
+
+ ptr = C_LOC(ginfo)
+
+ hdferr = H5Gget_info_by_idx_async(file_default, func_default, line_default, loc_id, c_group_name, &
+ INT(idx_type,C_INT), INT(order, C_INT), n, ptr, lapl_id_default, es_id )
+
+ END SUBROUTINE h5gget_info_by_idx_async_f
+
!>
!! \ingroup FH5G
!!
!! \brief Retrieves information about a group, according to the group’s position within an index.
!!
+!! \attention \fortran_obsolete. Both nlinks and max_corder can overflow.
+!!
!! \param loc_id File or group identifier.
!! \param group_name Name of group containing group for which information is to be retrieved.
-!! \param index_type Index type.
+!! \param idx_type Index type.
!! \param order Order of the count in the index.
!! \param n Position in the index of the group for which information is retrieved.
!! \param storage_type Type of storage for links in group:
@@ -730,71 +1306,164 @@ CONTAINS
!!
!! See C API: @ref H5Gget_info_by_idx()
!!
- SUBROUTINE h5gget_info_by_idx_f(loc_id, group_name, index_type, order, n, &
+#ifdef H5_DOXYGEN
+ SUBROUTINE h5gget_info_by_idx_f(&
+#else
+ SUBROUTINE h5gget_info_by_idx_f90(&
+#endif
+ loc_id, group_name, idx_type, order, n, &
storage_type, nlinks, max_corder, hdferr, lapl_id, mounted)
+
IMPLICIT NONE
+
INTEGER(HID_T), INTENT(IN) :: loc_id
CHARACTER(LEN=*), INTENT(IN) :: group_name
- INTEGER, INTENT(IN) :: index_type
+ INTEGER, INTENT(IN) :: idx_type
INTEGER, INTENT(IN) :: order
INTEGER(HSIZE_T), INTENT(IN) :: n
-
INTEGER, INTENT(OUT) :: storage_type
INTEGER, INTENT(OUT) :: nlinks
INTEGER, INTENT(OUT) :: max_corder
INTEGER, INTENT(OUT) :: hdferr
- INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: lapl_id
LOGICAL, INTENT(OUT), OPTIONAL :: mounted
- INTEGER :: mounted_c
- INTEGER(HID_T) :: lapl_id_default
- INTEGER(SIZE_T) :: group_name_len ! length of group name
- INTERFACE
- INTEGER FUNCTION h5gget_info_by_idx_c(loc_id, group_name, group_name_len, index_type, order, n, lapl_id_default, &
- storage_type, nlinks, max_corder, mounted_c) BIND(C,NAME='h5gget_info_by_idx_c')
- IMPORT :: C_CHAR
- IMPORT :: HID_T, SIZE_T, HSIZE_T
- INTEGER(HID_T), INTENT(IN) :: loc_id
- CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: group_name
- INTEGER, INTENT(IN) :: index_type
- INTEGER, INTENT(IN) :: order
- INTEGER(HSIZE_T), INTENT(IN) :: n
- INTEGER(HID_T) :: lapl_id_default
- INTEGER, INTENT(OUT) :: storage_type
- INTEGER, INTENT(OUT) :: nlinks
- INTEGER, INTENT(OUT) :: max_corder
-
- INTEGER(SIZE_T) :: group_name_len
- INTEGER :: mounted_c
-
- END FUNCTION h5gget_info_by_idx_c
- END INTERFACE
+ INTEGER(HID_T) :: lapl_id_default
+ CHARACTER(LEN=LEN_TRIM(group_name)+1,KIND=C_CHAR) :: c_group_name
+ TYPE(H5G_info_t), TARGET :: ginfo
+ TYPE(C_PTR) :: ptr
- group_name_len = LEN(group_name)
+ c_group_name = TRIM(group_name)//C_NULL_CHAR
+ ptr = C_LOC(ginfo)
lapl_id_default = H5P_DEFAULT_F
IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
- hdferr = h5gget_info_by_idx_c(loc_id, group_name, group_name_len, &
- index_type, order, n, lapl_id_default, &
- storage_type, nlinks, max_corder, mounted_c)
+
+ hdferr = H5Gget_info_by_idx(loc_id, c_group_name, &
+ INT(idx_type,C_INT), INT(order, C_INT), n, ptr, lapl_id_default )
+
+ storage_type = INT(ginfo%storage_type)
+ nlinks = INT(ginfo%nlinks)
+ max_corder = INT(ginfo%max_corder)
IF(PRESENT(mounted))THEN
- IF(mounted_c.EQ.0) THEN
- mounted = .FALSE.
- ELSE
+ IF(ginfo%mounted) THEN
mounted = .TRUE.
+ ELSE
+ mounted = .FALSE.
ENDIF
ENDIF
-
+#ifdef H5_DOXYGEN
END SUBROUTINE h5gget_info_by_idx_f
+#else
+ END SUBROUTINE h5gget_info_by_idx_f90
+#endif
!>
!! \ingroup FH5G
!!
-!! \brief Retrieves information about a group.
+!! \brief Retrieves information about a group by its name.
+!!
+!! \attention \fortran_approved
+!!
+!! \param loc_id File or group identifier.
+!! \param name Name of group containing group for which information is to be retrieved.
+!! \param ginfo Derived type in which group information is returned.
+!! \param hdferr \fortran_error
+!! \param lapl_id Link access property list.
+!!
+!! See C API: @ref H5Gget_info_by_name()
+!!
+#ifdef H5_DOXYGEN
+ SUBROUTINE h5gget_info_by_name_f( &
+#else
+ SUBROUTINE h5gget_info_by_name_f03( &
+#endif
+ loc_id, name, ginfo, hdferr, lapl_id)
+
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(LEN=*), INTENT(IN) :: name
+ TYPE(H5G_info_t), INTENT(OUT), TARGET :: ginfo
+ INTEGER, INTENT(OUT) :: hdferr
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: lapl_id
+
+ INTEGER(HID_T) :: lapl_id_default
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
+ TYPE(C_PTR) :: ptr
+
+ c_name = TRIM(name)//C_NULL_CHAR
+ ptr = C_LOC(ginfo)
+
+ lapl_id_default = H5P_DEFAULT_F
+ IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
+
+ hdferr = INT(h5gget_info_by_name(loc_id, c_name, ptr, lapl_id_default))
+
+#ifdef H5_DOXYGEN
+ END SUBROUTINE h5gget_info_by_name_f
+#else
+ END SUBROUTINE h5gget_info_by_name_f03
+#endif
+
+!>
+!! \ingroup FH5G
+!!
+!! \brief Asynchronously retrieves information about a group by its name.
+!!
+!! \param loc_id File or group identifier.
+!! \param name Name of group containing group for which information is to be retrieved.
+!! \param ginfo Derived type in which group information is returned.
+!! \param es_id \es_id
+!! \param hdferr \fortran_error
+!! \param lapl_id Link access property list.
+!!
+!! See C API: @ref H5Gget_info_by_name_async()
+!!
+ SUBROUTINE h5gget_info_by_name_async_f(loc_id, name, ginfo, es_id, hdferr, &
+ lapl_id, file, func, line)
+
+ IMPLICIT NONE
+ INTEGER(HID_T), INTENT(IN) :: loc_id
+ CHARACTER(LEN=*), INTENT(IN) :: name
+ TYPE(H5G_info_t), INTENT(OUT), TARGET :: ginfo
+ INTEGER(HID_T), INTENT(IN) :: es_id
+ INTEGER, INTENT(OUT) :: hdferr
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: lapl_id
+ TYPE(C_PTR), OPTIONAL :: file
+ TYPE(C_PTR), OPTIONAL :: func
+ INTEGER , INTENT(IN), OPTIONAL :: line
+
+ INTEGER(HID_T) :: lapl_id_default
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
+ TYPE(C_PTR) :: ptr
+ TYPE(C_PTR) :: file_default = C_NULL_PTR
+ TYPE(C_PTR) :: func_default = C_NULL_PTR
+ INTEGER(KIND=C_INT) :: line_default = 0
+
+ c_name = TRIM(name)//C_NULL_CHAR
+ ptr = C_LOC(ginfo)
+
+ lapl_id_default = H5P_DEFAULT_F
+ IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
+ IF(PRESENT(file)) file_default = file
+ IF(PRESENT(func)) func_default = func
+ IF(PRESENT(line)) line_default = INT(line, C_INT)
+
+ hdferr = INT(h5gget_info_by_name_async(file_default, func_default, line_default, &
+ loc_id, c_name, ptr, lapl_id_default, es_id))
+
+ END SUBROUTINE h5gget_info_by_name_async_f
+
+!>
+!! \ingroup FH5G
+!!
+!! \brief Retrieves information about a group by its name.
+!!
+!! \attention \fortran_obsolete. Both nlinks and max_corder can overflow.
!!
!! \param loc_id File or group identifier.
-!! \param group_name Name of group containing group for which information is to be retrieved.
+!! \param name Name of group containing group for which information is to be retrieved.
!! \param storage_type Type of storage for links in group:
!! \li H5G_STORAGE_TYPE_COMPACT_F: Compact storage
!! \li H5G_STORAGE_TYPE_DENSE_F: Indexed storage
@@ -807,56 +1476,53 @@ CONTAINS
!!
!! See C API: @ref H5Gget_info_by_name()
!!
- SUBROUTINE h5gget_info_by_name_f(loc_id, group_name, &
- storage_type, nlinks, max_corder, hdferr, lapl_id, mounted)
+#ifdef H5_DOXYGEN
+ SUBROUTINE h5gget_info_by_name_f( &
+#else
+ SUBROUTINE h5gget_info_by_name_f90( &
+#endif
+ loc_id, name, storage_type, nlinks, max_corder, hdferr, lapl_id, mounted)
+
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN) :: loc_id
- CHARACTER(LEN=*), INTENT(IN) :: group_name
+ CHARACTER(LEN=*), INTENT(IN) :: name
INTEGER, INTENT(OUT) :: storage_type
INTEGER, INTENT(OUT) :: nlinks
INTEGER, INTENT(OUT) :: max_corder
INTEGER, INTENT(OUT) :: hdferr
- INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id
+ INTEGER(HID_T), INTENT(IN), OPTIONAL :: lapl_id
LOGICAL, INTENT(OUT), OPTIONAL :: mounted
- INTEGER :: mounted_c
- INTEGER(HID_T) :: lapl_id_default
- INTEGER(SIZE_T) :: group_name_len ! length of group name
-
- INTERFACE
- INTEGER FUNCTION h5gget_info_by_name_c(loc_id, group_name, group_name_len, lapl_id_default, &
- storage_type, nlinks, max_corder, mounted_c) BIND(C,NAME='h5gget_info_by_name_c')
- IMPORT :: C_CHAR
- IMPORT :: HID_T, SIZE_T
- INTEGER(HID_T), INTENT(IN) :: loc_id
- CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(IN) :: group_name
- INTEGER(HID_T), INTENT(IN) :: lapl_id_default
- INTEGER, INTENT(OUT) :: storage_type
- INTEGER, INTENT(OUT) :: nlinks
- INTEGER, INTENT(OUT) :: max_corder
-
- INTEGER(SIZE_T) :: group_name_len
- INTEGER :: mounted_c
- END FUNCTION h5gget_info_by_name_c
- END INTERFACE
+ INTEGER(HID_T) :: lapl_id_default
+ CHARACTER(LEN=LEN_TRIM(name)+1,KIND=C_CHAR) :: c_name
+ TYPE(H5G_info_t), TARGET :: ginfo
+ TYPE(C_PTR) :: ptr
- group_name_len = LEN(group_name)
+ c_name = TRIM(name)//C_NULL_CHAR
+ ptr = C_LOC(ginfo)
lapl_id_default = H5P_DEFAULT_F
IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
- hdferr = h5gget_info_by_name_c(loc_id, group_name, group_name_len, lapl_id_default, &
- storage_type, nlinks, max_corder, mounted_c)
+ hdferr = INT(H5Gget_info_by_name(loc_id, c_name, ptr, lapl_id_default))
+
+ storage_type = INT(ginfo%storage_type)
+ nlinks = INT(ginfo%nlinks)
+ max_corder = INT(ginfo%max_corder)
IF(PRESENT(mounted))THEN
- IF(mounted_c.EQ.0) THEN
- mounted = .FALSE.
- ELSE
+ IF(ginfo%mounted) THEN
mounted = .TRUE.
+ ELSE
+ mounted = .FALSE.
ENDIF
ENDIF
+#ifdef H5_DOXYGEN
END SUBROUTINE h5gget_info_by_name_f
+#else
+ END SUBROUTINE h5gget_info_by_name_f90
+#endif
END MODULE H5G