diff options
Diffstat (limited to 'HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90')
-rw-r--r-- | HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90 | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90 b/HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90 new file mode 100644 index 0000000..ca43463 --- /dev/null +++ b/HDF5Examples/FORTRAN/H5G/h5ex_g_iterate.F90 @@ -0,0 +1,115 @@ +!************************************************************ +! +! This example shows how to iterate over group members using +! H5Literate. +! +!************************************************************ +MODULE g_iterate + + USE HDF5 + USE ISO_C_BINDING + IMPLICIT NONE + +CONTAINS + +!************************************************************ +! +! Operator function. Prints the name and type of the object +! being examined. +! +! ************************************************************ + + INTEGER FUNCTION op_func(loc_id, name, info, operator_data) bind(C) + + USE HDF5 + USE ISO_C_BINDING + IMPLICIT NONE + + INTEGER(HID_T), VALUE :: loc_id + CHARACTER(LEN=1), DIMENSION(1:10) :: name ! must have LEN=1 for bind(C) strings + TYPE(C_PTR) :: info + TYPE(C_PTR) :: operator_data + + INTEGER :: status, i, len + + TYPE(H5O_info_t), TARGET :: infobuf + TYPE(C_PTR) :: ptr + CHARACTER(LEN=10) :: name_string + + ! + ! Get type of the object and display its name and type. + ! The name of the object is passed to this FUNCTION by + ! the Library. + ! + + DO i = 1, 10 + name_string(i:i) = name(i)(1:1) + ENDDO + + CALL H5Oget_info_by_name_f(loc_id, name_string, infobuf, status) + + ! Include the string up to the C NULL CHARACTER + len = 0 + DO + IF(name_string(len+1:len+1).EQ.C_NULL_CHAR.OR.len.GE.10) EXIT + len = len + 1 + ENDDO + + IF(infobuf%type.EQ.H5O_TYPE_GROUP_F)THEN + WRITE(*,*) " Group: ", name_string(1:len) + ELSE IF(infobuf%type.EQ.H5O_TYPE_DATASET_F)THEN + WRITE(*,*) " Dataset: ", name_string(1:len) + ELSE IF(infobuf%type.EQ.H5O_TYPE_NAMED_DATATYPE_F)THEN + WRITE(*,*) " Datatype: ", name_string(1:len) + ELSE + WRITE(*,*) " Unknown: ", name_string(1:len) + ENDIF + + op_func = 0 ! return successful + + END FUNCTION op_func + +END MODULE g_iterate + + +PROGRAM main + + USE HDF5 + USE ISO_C_BINDING + USE g_iterate + + IMPLICIT NONE + + CHARACTER(LEN=17), PARAMETER :: filename = "h5ex_g_iterate.h5" + INTEGER(HID_T) :: file ! Handle + INTEGER :: status + TYPE(C_FUNPTR) :: funptr + TYPE(C_PTR) :: ptr + INTEGER(hsize_t) :: idx + INTEGER :: ret_value + ! + ! Initialize FORTRAN interface. + ! + CALL h5open_f(status) + ! + ! Open file. + ! + CALL H5Fopen_f(filename, H5F_ACC_RDONLY_F, file, status) + ! + ! Begin iteration. + ! + WRITE(*,'(A)') "Objects in root group:" + + idx = 0 + funptr = C_FUNLOC(op_func) ! call back function + ptr = C_NULL_PTR + + CALL H5Literate_f(file, H5_INDEX_NAME_F, H5_ITER_NATIVE_F, idx, funptr, ptr, ret_value, status) + + ! + ! Close and release resources. + ! + CALL H5Fclose_f(file, status) + +END PROGRAM main + |