@@ -11,7 +11,7 @@ pure module function to_string_r_sp(value, format) result(string)
1111 real (sp), intent (in ) :: value
1212 character (len=* ), intent (in ), optional :: format
1313 character (len= :), allocatable :: string
14-
14+
1515 character (len= buffer_len) :: buffer
1616 integer :: stat
1717
@@ -28,7 +28,7 @@ pure module function to_string_r_dp(value, format) result(string)
2828 real (dp), intent (in ) :: value
2929 character (len=* ), intent (in ), optional :: format
3030 character (len= :), allocatable :: string
31-
31+
3232 character (len= buffer_len) :: buffer
3333 integer :: stat
3434
@@ -64,30 +64,31 @@ end function to_string_c_dp
6464
6565 ! > Represent an integer of kind int8 as character sequence.
6666 pure module function to_string_1_i_int8(value) result(string)
67- integer (int8), intent (in ) :: value
67+ integer , parameter :: ik = int8
68+ integer (ik), intent (in ) :: value
6869 character (len= :), allocatable :: string
6970 integer , parameter :: buffer_len = range (value)+ 2
7071 character (len= buffer_len) :: buffer
7172 integer :: pos
72- integer (int8 ) :: n
73- character (len= 1 ), parameter :: numbers(0 : 9 ) = &
74- [" 0 " , " 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " , " 7 " , " 8 " , " 9 " ]
73+ integer (ik ) :: n
74+ character (len= 1 ), parameter :: numbers(- 9 : 0 ) = &
75+ [" 9 " , " 8 " , " 7 " , " 6 " , " 5 " , " 4 " , " 3 " , " 2 " , " 1 " , " 0 " ]
7576
76- if (value == 0_int8 ) then
77+ if (value == 0_ik ) then
7778 string = numbers(0 )
7879 return
7980 end if
8081
81- n = abs (value)
82+ n = sign (value, - 1_ik )
8283 buffer = " "
83-
8484 pos = buffer_len + 1
85- do while (n > 0_int8 )
85+ do while (n < 0_ik )
8686 pos = pos - 1
87- buffer(pos:pos) = numbers(mod (n, 10_int8 ))
88- n = n/ 10_int8
87+ buffer(pos:pos) = numbers(mod (n, 10_ik ))
88+ n = n/ 10_ik
8989 end do
90- if (value < 0_int8 ) then
90+
91+ if (value < 0_ik ) then
9192 pos = pos - 1
9293 buffer(pos:pos) = ' -'
9394 end if
@@ -99,7 +100,7 @@ pure module function to_string_2_i_int8(value, format) result(string)
99100 integer (int8), intent (in ) :: value
100101 character (len=* ), intent (in ) :: format
101102 character (len= :), allocatable :: string
102-
103+
103104 character (len= buffer_len) :: buffer
104105 integer :: stat
105106
@@ -113,30 +114,31 @@ pure module function to_string_2_i_int8(value, format) result(string)
113114 end function to_string_2_i_int8
114115 ! > Represent an integer of kind int16 as character sequence.
115116 pure module function to_string_1_i_int16(value) result(string)
116- integer (int16), intent (in ) :: value
117+ integer , parameter :: ik = int16
118+ integer (ik), intent (in ) :: value
117119 character (len= :), allocatable :: string
118120 integer , parameter :: buffer_len = range (value)+ 2
119121 character (len= buffer_len) :: buffer
120122 integer :: pos
121- integer (int16 ) :: n
122- character (len= 1 ), parameter :: numbers(0 : 9 ) = &
123- [" 0 " , " 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " , " 7 " , " 8 " , " 9 " ]
123+ integer (ik ) :: n
124+ character (len= 1 ), parameter :: numbers(- 9 : 0 ) = &
125+ [" 9 " , " 8 " , " 7 " , " 6 " , " 5 " , " 4 " , " 3 " , " 2 " , " 1 " , " 0 " ]
124126
125- if (value == 0_int16 ) then
127+ if (value == 0_ik ) then
126128 string = numbers(0 )
127129 return
128130 end if
129131
130- n = abs (value)
132+ n = sign (value, - 1_ik )
131133 buffer = " "
132-
133134 pos = buffer_len + 1
134- do while (n > 0_int16 )
135+ do while (n < 0_ik )
135136 pos = pos - 1
136- buffer(pos:pos) = numbers(mod (n, 10_int16 ))
137- n = n/ 10_int16
137+ buffer(pos:pos) = numbers(mod (n, 10_ik ))
138+ n = n/ 10_ik
138139 end do
139- if (value < 0_int16 ) then
140+
141+ if (value < 0_ik ) then
140142 pos = pos - 1
141143 buffer(pos:pos) = ' -'
142144 end if
@@ -148,7 +150,7 @@ pure module function to_string_2_i_int16(value, format) result(string)
148150 integer (int16), intent (in ) :: value
149151 character (len=* ), intent (in ) :: format
150152 character (len= :), allocatable :: string
151-
153+
152154 character (len= buffer_len) :: buffer
153155 integer :: stat
154156
@@ -162,30 +164,31 @@ pure module function to_string_2_i_int16(value, format) result(string)
162164 end function to_string_2_i_int16
163165 ! > Represent an integer of kind int32 as character sequence.
164166 pure module function to_string_1_i_int32(value) result(string)
165- integer (int32), intent (in ) :: value
167+ integer , parameter :: ik = int32
168+ integer (ik), intent (in ) :: value
166169 character (len= :), allocatable :: string
167170 integer , parameter :: buffer_len = range (value)+ 2
168171 character (len= buffer_len) :: buffer
169172 integer :: pos
170- integer (int32 ) :: n
171- character (len= 1 ), parameter :: numbers(0 : 9 ) = &
172- [" 0 " , " 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " , " 7 " , " 8 " , " 9 " ]
173+ integer (ik ) :: n
174+ character (len= 1 ), parameter :: numbers(- 9 : 0 ) = &
175+ [" 9 " , " 8 " , " 7 " , " 6 " , " 5 " , " 4 " , " 3 " , " 2 " , " 1 " , " 0 " ]
173176
174- if (value == 0_int32 ) then
177+ if (value == 0_ik ) then
175178 string = numbers(0 )
176179 return
177180 end if
178181
179- n = abs (value)
182+ n = sign (value, - 1_ik )
180183 buffer = " "
181-
182184 pos = buffer_len + 1
183- do while (n > 0_int32 )
185+ do while (n < 0_ik )
184186 pos = pos - 1
185- buffer(pos:pos) = numbers(mod (n, 10_int32 ))
186- n = n/ 10_int32
187+ buffer(pos:pos) = numbers(mod (n, 10_ik ))
188+ n = n/ 10_ik
187189 end do
188- if (value < 0_int32 ) then
190+
191+ if (value < 0_ik ) then
189192 pos = pos - 1
190193 buffer(pos:pos) = ' -'
191194 end if
@@ -197,7 +200,7 @@ pure module function to_string_2_i_int32(value, format) result(string)
197200 integer (int32), intent (in ) :: value
198201 character (len=* ), intent (in ) :: format
199202 character (len= :), allocatable :: string
200-
203+
201204 character (len= buffer_len) :: buffer
202205 integer :: stat
203206
@@ -211,30 +214,31 @@ pure module function to_string_2_i_int32(value, format) result(string)
211214 end function to_string_2_i_int32
212215 ! > Represent an integer of kind int64 as character sequence.
213216 pure module function to_string_1_i_int64(value) result(string)
214- integer (int64), intent (in ) :: value
217+ integer , parameter :: ik = int64
218+ integer (ik), intent (in ) :: value
215219 character (len= :), allocatable :: string
216220 integer , parameter :: buffer_len = range (value)+ 2
217221 character (len= buffer_len) :: buffer
218222 integer :: pos
219- integer (int64 ) :: n
220- character (len= 1 ), parameter :: numbers(0 : 9 ) = &
221- [" 0 " , " 1 " , " 2 " , " 3 " , " 4 " , " 5 " , " 6 " , " 7 " , " 8 " , " 9 " ]
223+ integer (ik ) :: n
224+ character (len= 1 ), parameter :: numbers(- 9 : 0 ) = &
225+ [" 9 " , " 8 " , " 7 " , " 6 " , " 5 " , " 4 " , " 3 " , " 2 " , " 1 " , " 0 " ]
222226
223- if (value == 0_int64 ) then
227+ if (value == 0_ik ) then
224228 string = numbers(0 )
225229 return
226230 end if
227231
228- n = abs (value)
232+ n = sign (value, - 1_ik )
229233 buffer = " "
230-
231234 pos = buffer_len + 1
232- do while (n > 0_int64 )
235+ do while (n < 0_ik )
233236 pos = pos - 1
234- buffer(pos:pos) = numbers(mod (n, 10_int64 ))
235- n = n/ 10_int64
237+ buffer(pos:pos) = numbers(mod (n, 10_ik ))
238+ n = n/ 10_ik
236239 end do
237- if (value < 0_int64 ) then
240+
241+ if (value < 0_ik ) then
238242 pos = pos - 1
239243 buffer(pos:pos) = ' -'
240244 end if
@@ -246,7 +250,7 @@ pure module function to_string_2_i_int64(value, format) result(string)
246250 integer (int64), intent (in ) :: value
247251 character (len=* ), intent (in ) :: format
248252 character (len= :), allocatable :: string
249-
253+
250254 character (len= buffer_len) :: buffer
251255 integer :: stat
252256
@@ -272,7 +276,7 @@ pure module function to_string_2_l_lk(value, format) result(string)
272276 logical (lk), intent (in ) :: value
273277 character (len=* ), intent (in ) :: format
274278 character (len= :), allocatable :: string
275-
279+
276280 character (len= buffer_len) :: buffer
277281 integer :: stat
278282
@@ -297,7 +301,7 @@ pure module function to_string_2_l_c_bool(value, format) result(string)
297301 logical (c_bool), intent (in ) :: value
298302 character (len=* ), intent (in ) :: format
299303 character (len= :), allocatable :: string
300-
304+
301305 character (len= buffer_len) :: buffer
302306 integer :: stat
303307
0 commit comments