diff options
author | Scot Breitenfeld <brtnfld@hdfgroup.org> | 2023-09-07 22:25:07 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-07 22:25:07 (GMT) |
commit | 08e115b7d8f95551be8bede824847997d95d0cf1 (patch) | |
tree | a377c6607419278eaafc8cf3043608f93afe1ad7 /fortran/src/H5Lff.F90 | |
parent | 8253ab9ebf6a082dc07eb931f27b169d6a45d577 (diff) | |
download | hdf5-08e115b7d8f95551be8bede824847997d95d0cf1.zip hdf5-08e115b7d8f95551be8bede824847997d95d0cf1.tar.gz hdf5-08e115b7d8f95551be8bede824847997d95d0cf1.tar.bz2 |
Added new Fortran API wrappers (#3511)
* Added new wrappers for
h5get_free_list_sizes_f
H5Sselect_intersect_block_f
H5Sselect_shape_same_f
h5pget_no_selection_io_cause_f
h5pget_mpio_no_collective_cause_f
H5Lvisit_by_name_f
H5Lvisit_f
H5Fget_info_f
h5dwrite_chunk_f
h5dread_chunk_f
* added h5pget_file_space_page_size_f, h5pset_file_space_page_size_f, h5pget_file_space_strategy_f, h5pset_file_space_strategy_f, h5info tests
* added fortran tests
* Update tH5F.F90
Diffstat (limited to 'fortran/src/H5Lff.F90')
-rw-r--r-- | fortran/src/H5Lff.F90 | 106 |
1 files changed, 103 insertions, 3 deletions
diff --git a/fortran/src/H5Lff.F90 b/fortran/src/H5Lff.F90 index c474754..f61af02 100644 --- a/fortran/src/H5Lff.F90 +++ b/fortran/src/H5Lff.F90 @@ -748,10 +748,10 @@ CONTAINS link_exists_c = H5Lexists(loc_id, c_name, lapl_id_default) link_exists = .FALSE. - IF(link_exists_c.GT.0) link_exists = .TRUE. + IF(link_exists_c.GT.0_C_INT) link_exists = .TRUE. hdferr = 0 - IF(link_exists_c.LT.0) hdferr = -1 + IF(link_exists_c.LT.0_C_INT) hdferr = -1 END SUBROUTINE h5lexists_f @@ -1462,7 +1462,7 @@ CONTAINS !! SUBROUTINE h5literate_by_name_f(loc_id, group_name, index_type, order, & idx, op, op_data, return_value, hdferr, lapl_id) - USE, INTRINSIC :: ISO_C_BINDING, ONLY : C_PTR, C_FUNPTR + IMPLICIT NONE INTEGER(HID_T) , INTENT(IN) :: loc_id CHARACTER(LEN=*), INTENT(IN) :: group_name @@ -1509,4 +1509,104 @@ CONTAINS END SUBROUTINE h5literate_by_name_f +!> +!! \ingroup FH5L +!! +!! \brief Recursively visits all links starting from a specified group. +!! +!! \param grp_id Group identifier +!! \param idx_type Index type +!! \param order Iteration order +!! \param op Callback function +!! \param op_data User-defined callback function context +!! \param hdferr \fortran_error +!! +!! See C API: @ref H5Lvisit2() +!! + SUBROUTINE H5Lvisit_f(grp_id, idx_type, order, op, op_data, hdferr) + + IMPLICIT NONE + + INTEGER(hid_t), INTENT(IN) :: grp_id + INTEGER , INTENT(IN) :: idx_type + INTEGER , INTENT(IN) :: order + TYPE(C_FUNPTR) :: op + TYPE(C_PTR) :: op_data + INTEGER , INTENT(OUT) :: hdferr + + INTERFACE + INTEGER(C_INT) FUNCTION H5Lvisit(grp_id, idx_type, order, op, op_data) BIND(C, NAME='H5Lvisit2') + IMPORT :: c_char, c_int, c_ptr, c_funptr + IMPORT :: HID_T, SIZE_T, HSIZE_T + IMPLICIT NONE + INTEGER(hid_t), VALUE :: grp_id + INTEGER , VALUE :: idx_type + INTEGER , VALUE :: order + TYPE(C_FUNPTR), VALUE :: op + TYPE(C_PTR) , VALUE :: op_data + END FUNCTION H5Lvisit + END INTERFACE + + hdferr = INT(H5Lvisit(grp_id, INT(idx_type, C_INT), INT(order, C_INT), op, op_data)) + + END SUBROUTINE H5Lvisit_f + +!> +!! \ingroup FH5L +!! +!! \brief Recursively visits all links starting from a specified group. +!! +!! \param loc_id Location identifier +!! \param group_name Group name +!! \param idx_type Index type +!! \param order Iteration order +!! \param op Callback function +!! \param op_data User-defined callback function context +!! \param hdferr \fortran_error +!! \param lapl_id Link access property list +!! +!! +!! See C API: @ref H5Lvisit_by_name2() +!! + SUBROUTINE H5Lvisit_by_name_f(loc_id, group_name, idx_type, order, op, op_data, 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 + TYPE(C_FUNPTR) :: op + TYPE(C_PTR) :: op_data + 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_name + + INTERFACE + INTEGER(C_INT) FUNCTION H5Lvisit_by_name(loc_id, group_name, idx_type, order, op, op_data, lapl_id_default) & + BIND(C, NAME='H5Lvisit_by_name2') + IMPORT :: C_CHAR, C_INT, C_PTR, C_FUNPTR + IMPORT :: HID_T, SIZE_T, HSIZE_T + IMPLICIT NONE + INTEGER(hid_t), VALUE :: loc_id + CHARACTER(KIND=C_CHAR), DIMENSION(*) :: group_name + INTEGER , VALUE :: idx_type + INTEGER , VALUE :: order + TYPE(C_FUNPTR), VALUE :: op + TYPE(C_PTR) , VALUE :: op_data + INTEGER(HID_T), VALUE :: lapl_id_default + END FUNCTION H5Lvisit_by_name + END INTERFACE + + c_name = TRIM(group_name)//C_NULL_CHAR + + lapl_id_default = H5P_DEFAULT_F + IF(PRESENT(lapl_id)) lapl_id_default = lapl_id + + hdferr = INT(H5Lvisit_by_name(loc_id, c_name, INT(idx_type, C_INT), INT(order, C_INT), op, op_data, lapl_id_default)) + + END SUBROUTINE H5Lvisit_by_name_f + END MODULE H5L |