Skip to content

Commit 82f8c8d

Browse files
authored
Merge pull request #528 from Carltoffel/replace-ifelse-with-optval
Reduce redundancy caused by optional arguments
2 parents 5614737 + a928996 commit 82f8c8d

11 files changed

+65
-144
lines changed

src/stdlib_bitsets.fypp

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module stdlib_bitsets
1313
int16, &
1414
int32, &
1515
int64
16+
use stdlib_optval, only : optval
1617

1718
use, intrinsic :: &
1819
iso_fortran_env, only: &

src/stdlib_bitsets_64.fypp

+13-32
Original file line numberDiff line numberDiff line change
@@ -812,23 +812,13 @@ contains
812812
end if
813813
end do
814814

815-
if ( present(advance) ) then
816-
read( unit, &
817-
advance=advance, &
818-
FMT='(A1)', &
819-
err=997, &
820-
end=998, &
821-
iostat=ierr, &
822-
iomsg=message ) char
823-
else
824-
read( unit, &
825-
advance='YES', &
826-
FMT='(A1)', &
827-
err=997, &
828-
end=998, &
829-
iostat=ierr, &
830-
iomsg=message ) char
831-
end if
815+
read( unit, &
816+
advance=optval(advance, 'YES'), &
817+
FMT='(A1)', &
818+
err=997, &
819+
end=998, &
820+
iostat=ierr, &
821+
iomsg=message ) char
832822
if ( char == '0' ) then
833823
call self % clear( bits-bit )
834824
else if ( char == '1' ) then
@@ -1080,21 +1070,12 @@ contains
10801070
end if
10811071

10821072

1083-
if ( present( advance ) ) then
1084-
write( unit, &
1085-
FMT='(A)', &
1086-
advance=advance, &
1087-
iostat=ierr, &
1088-
iomsg=message ) &
1089-
string
1090-
else
1091-
write( unit, &
1092-
FMT='(A)', &
1093-
advance='YES', &
1094-
iostat=ierr, &
1095-
iomsg=message ) &
1096-
string
1097-
end if
1073+
write( unit, &
1074+
FMT='(A)', &
1075+
advance=optval(advance, 'YES'), &
1076+
iostat=ierr, &
1077+
iomsg=message ) &
1078+
string
10981079
if (ierr /= 0) then
10991080
call error_handler( 'Failure on a WRITE statement for UNIT.', &
11001081
write_failure, status, module_name, procedure )

src/stdlib_bitsets_large.fypp

+13-32
Original file line numberDiff line numberDiff line change
@@ -997,23 +997,13 @@ contains
997997
end if
998998
end do
999999

1000-
if ( present(advance) ) then
1001-
read( unit, &
1002-
advance=advance, &
1003-
FMT='(A1)', &
1004-
err=997, &
1005-
end=998, &
1006-
iostat=ierr, &
1007-
iomsg=message ) char
1008-
else
1009-
read( unit, &
1010-
advance='YES', &
1011-
FMT='(A1)', &
1012-
err=997, &
1013-
end=998, &
1014-
iostat=ierr, &
1015-
iomsg=message ) char
1016-
end if
1000+
read( unit, &
1001+
advance=optval(advance, 'YES'), &
1002+
FMT='(A1)', &
1003+
err=997, &
1004+
end=998, &
1005+
iostat=ierr, &
1006+
iomsg=message ) char
10171007

10181008
if ( char == '0' ) then
10191009
call self % clear( bits-bit )
@@ -1302,21 +1292,12 @@ contains
13021292
end if
13031293

13041294

1305-
if ( present( advance ) ) then
1306-
write( unit, &
1307-
FMT='(A)', &
1308-
advance=advance, &
1309-
iostat=ierr, &
1310-
iomsg=message ) &
1311-
string
1312-
else
1313-
write( unit, &
1314-
FMT='(A)', &
1315-
advance='YES', &
1316-
iostat=ierr, &
1317-
iomsg=message ) &
1318-
string
1319-
end if
1295+
write( unit, &
1296+
FMT='(A)', &
1297+
advance=optval(advance, 'YES'), &
1298+
iostat=ierr, &
1299+
iomsg=message ) &
1300+
string
13201301
if (ierr /= 0) then
13211302
call error_handler( 'Failure on a WRITE statement for UNIT.', &
13221303
write_failure, status, module_name, procedure )

src/stdlib_logger.f90

+2-5
Original file line numberDiff line numberDiff line change
@@ -1147,11 +1147,8 @@ subroutine log_message( self, message, module, procedure, prefix )
11471147
character(:), allocatable :: d_and_t, m_and_p, pref
11481148
character(:), allocatable :: buffer
11491149

1150-
if ( present(prefix) ) then
1151-
pref = prefix // ': '
1152-
else
1153-
pref = ''
1154-
end if
1150+
pref = optval(prefix, '')
1151+
if ( len(pref) > 0 ) pref = pref // ': '
11551152

11561153
if ( self % time_stamp ) then
11571154
d_and_t = time_stamp() // ': '

src/stdlib_sorting.fypp

+2
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ module stdlib_sorting
123123
dp, &
124124
qp
125125

126+
use stdlib_optval, only: optval
127+
126128
use stdlib_string_type, only: string_type, assignment(=), operator(>), &
127129
operator(>=), operator(<), operator(<=)
128130

src/stdlib_sorting_ord_sort.fypp

+1-6
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,7 @@ contains
7575
${t3}$, intent(out), optional :: work(0:)
7676
logical, intent(in), optional :: reverse
7777

78-
logical :: reverse_
79-
80-
reverse_ = .false.
81-
if(present(reverse)) reverse_ = reverse
82-
83-
if (reverse_) then
78+
if (optval(reverse, .false.)) then
8479
call ${name1}$_decrease_ord_sort(array, work)
8580
else
8681
call ${name1}$_increase_ord_sort(array, work)

src/stdlib_sorting_sort.fypp

+1-6
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,7 @@ contains
7878
${t1}$, intent(inout) :: array(0:)
7979
logical, intent(in), optional :: reverse
8080

81-
logical :: reverse_
82-
83-
reverse_ = .false.
84-
if(present(reverse)) reverse_ = reverse
85-
86-
if(reverse_)then
81+
if(optval(reverse, .false.))then
8782
call ${name1}$_decrease_sort(array)
8883
else
8984
call ${name1}$_increase_sort(array)

src/stdlib_sorting_sort_index.fypp

+4-8
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,8 @@ contains
107107
index(i) = i+1
108108
end do
109109

110-
if ( present(reverse) ) then
111-
if ( reverse ) then
112-
call reverse_segment( array, index )
113-
end if
110+
if ( optval(reverse, .false.) ) then
111+
call reverse_segment( array, index )
114112
end if
115113

116114
! If necessary allocate buffers to serve as scratch memory.
@@ -148,10 +146,8 @@ contains
148146
end if
149147
end if
150148

151-
if ( present(reverse) ) then
152-
if ( reverse ) then
153-
call reverse_segment( array, index )
154-
end if
149+
if ( optval(reverse, .false.) ) then
150+
call reverse_segment( array, index )
155151
end if
156152

157153
contains

src/stdlib_stats_distribution_PRNG.fypp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#:include "common.fypp"
22
module stdlib_stats_distribution_PRNG
33
use stdlib_kinds, only: int8, int16, int32, int64
4+
use stdlib_optval, only: optval
45
use stdlib_error, only: error_stop
56
implicit none
67
private
@@ -118,8 +119,7 @@ module stdlib_stats_distribution_PRNG
118119
! Values are converted from C unsigned integer of 0x9e3779b97f4a7c15,
119120
! 0xbf58476d1ce4e5b9, 0x94d049bb133111eb
120121

121-
if(present(s)) si = s
122-
res = si
122+
res = optval(s, si)
123123
si = res + int01
124124
res = ieor(res, shiftr(res, 30)) * int02
125125
res = ieor(res, shiftr(res, 27)) * int03

src/stdlib_stats_moment_all.fypp

+16-8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ contains
2222
${t1}$ :: res
2323

2424
real(${k1}$) :: n
25+
${t1}$ :: center_
2526

2627
if (.not.optval(mask, .true.)) then
2728
res = ieee_value(1._${k1}$, ieee_quiet_nan)
@@ -31,10 +32,11 @@ contains
3132
n = real(size(x, kind = int64), ${k1}$)
3233

3334
if (present(center)) then
34-
res = sum((x - center)**order) / n
35+
center_ = center
3536
else
36-
res = sum((x - mean(x))**order) / n
37+
center_ = mean(x)
3738
end if
39+
res = sum((x - center_)**order) / n
3840

3941
end function ${RName}$
4042
#:endfor
@@ -52,6 +54,7 @@ contains
5254
real(dp) :: res
5355

5456
real(dp) :: n
57+
real(dp) :: center_
5558

5659
if (.not.optval(mask, .true.)) then
5760
res = ieee_value(1._dp, ieee_quiet_nan)
@@ -61,10 +64,11 @@ contains
6164
n = real(size(x, kind = int64), dp)
6265

6366
if (present(center)) then
64-
res = sum((real(x, dp) - center)**order) / n
67+
center_ = center
6568
else
66-
res = sum((real(x, dp) - mean(x))**order) / n
69+
center_ = mean(x)
6770
end if
71+
res = sum((real(x, dp) - center_)**order) / n
6872

6973
end function ${RName}$
7074
#:endfor
@@ -82,14 +86,16 @@ contains
8286
${t1}$ :: res
8387

8488
real(${k1}$) :: n
89+
${t1}$ :: center_
8590

8691
n = real(count(mask, kind = int64), ${k1}$)
8792

8893
if (present(center)) then
89-
res = sum((x - center)**order, mask) / n
94+
center_ = center
9095
else
91-
res = sum((x - mean(x, mask))**order, mask) / n
96+
center_ = mean(x, mask)
9297
end if
98+
res = sum((x - center_)**order, mask) / n
9399

94100
end function ${RName}$
95101
#:endfor
@@ -107,14 +113,16 @@ contains
107113
real(dp) :: res
108114

109115
real(dp) :: n
116+
real(dp) :: center_
110117

111118
n = real(count(mask, kind = int64), dp)
112119

113120
if (present(center)) then
114-
res = sum((real(x, dp) - center)**order, mask) / n
121+
center_ = center
115122
else
116-
res = sum((real(x, dp) - mean(x,mask))**order, mask) / n
123+
center_ = mean(x, mask)
117124
end if
125+
res = sum((real(x, dp) - center_)**order, mask) / n
118126

119127
end function ${RName}$
120128
#:endfor

0 commit comments

Comments
 (0)