1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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
|