Skip to content

Commit 1f08c60

Browse files
authored
Merge pull request #80 from scivision/io_select
use "select case" for clarity/brevity
2 parents c789d1f + 8ddc823 commit 1f08c60

File tree

2 files changed

+34
-35
lines changed

2 files changed

+34
-35
lines changed

src/stdlib_experimental_io.f90

+25-26
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ integer function number_of_rows_numeric(s)
265265

266266
end function
267267

268-
logical function whitechar(char) ! white character
268+
pure logical function whitechar(char) ! white character
269269
! returns .true. if char is space (32) or tab (9), .false. otherwise
270270
character, intent(in) :: char
271271
if (iachar(char) == 32 .or. iachar(char) == 9) then
@@ -300,51 +300,53 @@ integer function open(filename, mode) result(u)
300300

301301
mode_ = parse_mode(optval(mode, ""))
302302

303-
if (mode_(1:2) == 'r ') then
303+
select case (mode_(1:2))
304+
case('r')
304305
action_='read'
305306
position_='asis'
306307
status_='old'
307-
else if (mode_(1:2) == 'w ') then
308+
case('w')
308309
action_='write'
309310
position_='asis'
310311
status_='replace'
311-
else if (mode_(1:2) == 'a ') then
312+
case('a')
312313
action_='write'
313314
position_='append'
314315
status_='old'
315-
else if (mode_(1:2) == 'x ') then
316+
case('x')
316317
action_='write'
317318
position_='asis'
318319
status_='new'
319-
else if (mode_(1:2) == 'r+') then
320+
case('r+')
320321
action_='readwrite'
321322
position_='asis'
322323
status_='old'
323-
else if (mode_(1:2) == 'w+') then
324+
case('w+')
324325
action_='readwrite'
325326
position_='asis'
326327
status_='replace'
327-
else if (mode_(1:2) == 'a+') then
328+
case('a+')
328329
action_='readwrite'
329330
position_='append'
330331
status_='old'
331-
else if (mode_(1:2) == 'x+') then
332+
case('x+')
332333
action_='readwrite'
333334
position_='asis'
334335
status_='new'
335-
else
336+
case default
336337
call error_stop("Unsupported mode: "//mode_(1:2))
337-
end if
338+
end select
338339

339-
if (mode_(3:3) == 't') then
340+
select case (mode_(3:3))
341+
case('t')
340342
access_='sequential'
341343
form_='formatted'
342-
else if (mode_(3:3) == 'b' .or. mode_(3:3) == 's') then
344+
case('b', 's')
343345
access_='stream'
344346
form_='unformatted'
345-
else
347+
case default
346348
call error_stop("Unsupported mode: "//mode_(3:3))
347-
endif
349+
end select
348350

349351
open(newunit=u, file=filename, &
350352
action = action_, position = position_, status = status_, &
@@ -365,21 +367,18 @@ integer function open(filename, mode) result(u)
365367
a=trim(adjustl(mode))
366368

367369
do i=1,len(a)
368-
if (a(i:i) == 'r' &
369-
.or. a(i:i) == 'w' &
370-
.or. a(i:i) == 'a' &
371-
.or. a(i:i) == 'x' &
372-
) then
370+
select case (a(i:i))
371+
case('r', 'w', 'a', 'x')
373372
mode_(1:1) = a(i:i)
374-
else if (a(i:i) == '+') then
373+
case('+')
375374
mode_(2:2) = a(i:i)
376-
else if (a(i:i) == 't' .or. a(i:i) == 'b') then
375+
case('t', 'b')
377376
mode_(3:3) = a(i:i)
378-
else if (a(i:i) == ' ') then
379-
cycle
380-
else
377+
case(' ')
378+
cycle
379+
case default
381380
call error_stop("Wrong character: "//a(i:i))
382-
endif
381+
end select
383382
end do
384383

385384
end function

src/stdlib_experimental_optval.f90

+9-9
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module stdlib_experimental_optval
3434
contains
3535

3636

37-
function optval_sp(x, default) result(y)
37+
pure function optval_sp(x, default) result(y)
3838
real(sp), intent(in), optional :: x
3939
real(sp), intent(in) :: default
4040
real(sp) :: y
@@ -47,7 +47,7 @@ function optval_sp(x, default) result(y)
4747
end function optval_sp
4848

4949

50-
function optval_dp(x, default) result(y)
50+
pure function optval_dp(x, default) result(y)
5151
real(dp), intent(in), optional :: x
5252
real(dp), intent(in) :: default
5353
real(dp) :: y
@@ -60,7 +60,7 @@ function optval_dp(x, default) result(y)
6060
end function optval_dp
6161

6262

63-
function optval_qp(x, default) result(y)
63+
pure function optval_qp(x, default) result(y)
6464
real(qp), intent(in), optional :: x
6565
real(qp), intent(in) :: default
6666
real(qp) :: y
@@ -73,7 +73,7 @@ function optval_qp(x, default) result(y)
7373
end function optval_qp
7474

7575

76-
function optval_int8(x, default) result(y)
76+
pure function optval_int8(x, default) result(y)
7777
integer(int8), intent(in), optional :: x
7878
integer(int8), intent(in) :: default
7979
integer(int8) :: y
@@ -86,7 +86,7 @@ function optval_int8(x, default) result(y)
8686
end function optval_int8
8787

8888

89-
function optval_int16(x, default) result(y)
89+
pure function optval_int16(x, default) result(y)
9090
integer(int16), intent(in), optional :: x
9191
integer(int16), intent(in) :: default
9292
integer(int16) :: y
@@ -99,7 +99,7 @@ function optval_int16(x, default) result(y)
9999
end function optval_int16
100100

101101

102-
function optval_int32(x, default) result(y)
102+
pure function optval_int32(x, default) result(y)
103103
integer(int32), intent(in), optional :: x
104104
integer(int32), intent(in) :: default
105105
integer(int32) :: y
@@ -112,7 +112,7 @@ function optval_int32(x, default) result(y)
112112
end function optval_int32
113113

114114

115-
function optval_int64(x, default) result(y)
115+
pure function optval_int64(x, default) result(y)
116116
integer(int64), intent(in), optional :: x
117117
integer(int64), intent(in) :: default
118118
integer(int64) :: y
@@ -125,7 +125,7 @@ function optval_int64(x, default) result(y)
125125
end function optval_int64
126126

127127

128-
function optval_logical(x, default) result(y)
128+
pure function optval_logical(x, default) result(y)
129129
logical, intent(in), optional :: x
130130
logical, intent(in) :: default
131131
logical :: y
@@ -138,7 +138,7 @@ function optval_logical(x, default) result(y)
138138
end function optval_logical
139139

140140

141-
function optval_character(x, default) result(y)
141+
pure function optval_character(x, default) result(y)
142142
character(len=*), intent(in), optional :: x
143143
character(len=*), intent(in) :: default
144144
character(len=:), allocatable :: y

0 commit comments

Comments
 (0)