Skip to content

Commit d674eb6

Browse files
committed
write: use select type
remove vestigial optional ierr from all except %open trying to handle errors became a great development burden with little to no pratical benefit, so we removed it.
1 parent b8ed67a commit d674eb6

21 files changed

+223
-1044
lines changed

API.md

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ logical, intent(in), optional :: verbose, debug
3131
```
3232

3333
```fortran
34-
call h%close(ierr, close_hdf5_interface)
34+
call h%close(close_hdf5_interface)
3535
!! This must be called on each HDF5 file to flush buffers to disk
3636
!! data loss can occur if program terminates before this procedure
3737
!!
@@ -40,17 +40,14 @@ call h%close(ierr, close_hdf5_interface)
4040
!! close_hdf5_interface is when you know you have exactly one HDF5 file in your
4141
!! application, if true it closes ALL files, even those invoked directly from HDF5.
4242
43-
integer, intent(out), optional :: ierr
4443
logical, intent(in), optional :: close_hdf5_interface
4544
```
4645

4746
To avoid memory leaks or corrupted files, always "finalize" all hDF5 files before STOPping the Fortran program.
4847

4948
```fortran
50-
call h%flush(ierr)
49+
call h%flush()
5150
!! request operating system flush data to disk.
52-
!! The operating system can do this when it desires, which might be a while.
53-
integer, intent(out), optional :: ierr
5451
```
5552

5653
## Disk variable (dataset) inquiry
@@ -64,10 +61,9 @@ character(*), intent(in) :: dataset_name
6461
```
6562

6663
```fortran
67-
call h%shape(dataset_name, dims, ierr)
64+
call h%shape(dataset_name, dims)
6865
character(*), intent(in) :: dataset_name
6966
integer(HSIZE_T), intent(out), allocatable :: dims(:)
70-
integer, intent(out), optional :: ierr
7167
```
7268

7369
```fortran
@@ -128,20 +124,19 @@ character(*), intent(in) :: target, & !< target path to link dataset
128124
## file write operations
129125

130126
```fortran
131-
call h%write(dname,value, ierr, chunk_size, istart, iend, stride, compact)
127+
call h%write(dname,value, chunk_size, istart, iend, stride, compact)
132128
!! write 0d..7d dataset
133129
character(*), intent(in) :: dname
134130
class(*), intent(in) :: value(:) !< array to write
135131
integer, intent(in), optional :: chunk_size(rank(value))
136132
integer, intent(in), optional, dimension(:) :: istart, iend, stride !< array slicing
137133
logical, intent(in), optional :: compact !< faster I/O for sub-64 kB datasets
138-
integer, intent(out), optional :: ierr !< 0 if OK
139134
```
140135

141136
Write dataset attribute (e.g. units or instrument)
142137

143138
```fortran
144-
call h%writeattr(dname, attr, attrval, ierr)
139+
call h%writeattr(dname, attr, attrval)
145140
character(*), intent(in) :: dname, attr !< dataset name, attribute name
146141
class(*), intent(in) :: attrval(:) !< character, real, integer
147142
```
@@ -151,17 +146,16 @@ class(*), intent(in) :: attrval(:) !< character, real, integer
151146
Read data from disk to memory
152147

153148
```fortran
154-
call h%read(dname, value, ierr, istart, iend, stride)
149+
call h%read(dname, value, istart, iend, stride)
155150
character(*), intent(in) :: dname
156151
class(*), intent(out) :: value(:) !< read array to this ALLOCATED variable
157-
integer, intent(out), optional :: ierr !< 0 if OK
158152
integer, intent(in), optional, dimension(:) :: istart, iend, stride !< array slicing
159153
```
160154

161155
Read dataset attribute into memory
162156

163157
```fortran
164-
call h%readattr(dname, attr, attrval, ierr)
158+
call h%readattr(dname, attr, attrval)
165159
character(*), intent(in) :: dname, attr !< dataset name, attribute name
166160
class(*), intent(out) :: attrval(:) !< character, real, integer
167161
```

Examples.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ type(hdf5_file) :: h5f
1212
* string attributes may be applied to any variable at time of writing or later.
1313
* h5f%open(..., `comp_lvl=1`) option enables GZIP compression., where comp_lvl is from 1 to 9. bigger comp_lvl gives more compression but isslower to write.
1414

15-
`integer, intent(out) :: ierr` is an optional parameter. It will be non-zero if error detected.
16-
This value should be checked, particularly for write operations to avoid missing error conditions.
17-
If `ierr` is omitted, then h5fortran will raise `error stop` if an error occurs.
18-
1915
## Create new HDF5 file, with variable "value1"
2016

2117
```fortran
@@ -125,7 +121,7 @@ call h5f%open('test.h5', action='rw')
125121
126122
call h5f%write('/value1', 123.)
127123
128-
call h5f%close(ierr)
124+
call h5f%close()
129125
```
130126

131127
## Add gzip compressed 3-D array "value2" to existing HDF5 file "test.h5"
@@ -137,7 +133,7 @@ call h5f%open('test.h5', comp_lvl=1)
137133
138134
call h5f%write('/value2', val2)
139135
140-
call h5f%close(ierr)
136+
call h5f%close()
141137
```
142138

143139
chunk_size may optionally be set in the `%write()` method for 2-d to 7-d arrays.

codemeta.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"downloadUrl": "https://github.com/scivision/h5fortran/releases",
88
"issueTracker": "https://github.com/scivision/h5fortran/issues",
99
"name": "h5fortran",
10-
"version": "4.3.0",
10+
"version": "4.4.0",
1111
"identifier": "10.5281/zenodo.3757269",
1212
"description": "Lightweight object-oriented HDF5 Fortran interface",
1313
"applicationCategory": "file I/O",

src/attributes.f90

Lines changed: 16 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
call h5ltget_attribute_string_f(self%lid, dname, attr, buf, ier)
2020
attrval = buf
2121

22-
if (present(ierr)) ierr = ier
23-
if (check(ier, self%filename, dname) .and. .not. present(ierr)) error stop
22+
if (check(ier, self%filename, dname)) error stop
2423

2524
end procedure readattr_char
2625

@@ -46,8 +45,7 @@
4645
end select
4746
endif
4847

49-
if (present(ierr)) ierr = ier
50-
if (check(ier, self%filename, dname) .and. .not. present(ierr)) error stop
48+
if (check(ier, self%filename, dname)) error stop
5149

5250
end procedure readattr_num
5351

@@ -61,8 +59,7 @@
6159

6260
call h5ltset_attribute_string_f(self%lid, dname, attr, attrval, ier)
6361

64-
if (present(ierr)) ierr = ier
65-
if (check(ier, self%filename, dname) .and. .not. present(ierr)) error stop
62+
if (check(ier, self%filename, dname)) error stop
6663

6764
end procedure writeattr_char
6865

@@ -87,76 +84,51 @@
8784
ier = 6
8885
end select
8986

90-
if (present(ierr)) ierr = ier
91-
if (check(ier, self%filename, dname) .and. .not. present(ierr)) error stop
87+
if (check(ier, self%filename, dname)) error stop
9288

9389
end procedure writeattr_num
9490

9591

9692
module procedure writeattr_char_lt
9793

9894
type(hdf5_file) :: h
99-
integer :: ier
100-
101-
call h%open(filename, ier, action='r+')
102-
103-
call h%writeattr_char(dname, attr, attrval, ier)
104-
105-
if (ier == 0) call h%close(ier)
10695

107-
if (present(ierr)) ierr = ier
108-
if (check(ier, filename, dname) .and. .not. present(ierr)) error stop
96+
call h%open(filename, action='r+')
97+
call h%writeattr_char(dname, attr, attrval)
98+
call h%close()
10999

110100
end procedure writeattr_char_lt
111101

112102

113103
module procedure writeattr_num_lt
114104

115105
type(hdf5_file) :: h
116-
integer :: ier
117-
118-
call h%open(filename, ier, action='r+')
119-
120-
call h%writeattr_num(dname, attr, attrval, ier)
121-
122-
if (ier == 0) call h%close(ier)
123106

124-
if (present(ierr)) ierr = ier
125-
if (check(ier, filename, dname) .and. .not. present(ierr)) error stop
107+
call h%open(filename, action='r+')
108+
call h%writeattr_num(dname, attr, attrval)
109+
call h%close()
126110

127111
end procedure writeattr_num_lt
128112

129113

130114
module procedure readattr_char_lt
131115

132116
type(hdf5_file) :: h
133-
integer :: ier
134-
135-
call h%open(filename, ier, action='r')
136-
137-
call h%readattr_char(dname, attr, attrval, ier)
138-
139-
if (ier == 0) call h%close(ier)
140117

141-
if (present(ierr)) ierr = ier
142-
if (check(ier, filename, dname) .and. .not. present(ierr)) error stop
118+
call h%open(filename, action='r')
119+
call h%readattr_char(dname, attr, attrval)
120+
call h%close()
143121

144122
end procedure readattr_char_lt
145123

146124

147125
module procedure readattr_num_lt
148126

149127
type(hdf5_file) :: h
150-
integer :: ier
151-
152-
call h%open(filename, ier, action='r')
153-
154-
call h%readattr_num(dname, attr, attrval, ier)
155-
156-
if (ier == 0) call h%close(ier)
157128

158-
if (present(ierr)) ierr = ier
159-
if (check(ier, filename, dname) .and. .not. present(ierr)) error stop
129+
call h%open(filename, action='r')
130+
call h%readattr_num(dname, attr, attrval)
131+
call h%close()
160132

161133
end procedure readattr_num_lt
162134

0 commit comments

Comments
 (0)