@@ -227,17 +227,15 @@ pure function s(self) result(string)
227
227
character (len= buffersize) :: buffer
228
228
integer :: ii
229
229
230
- if (allocated (self% num)) then
231
- do ii = 1 , size (self% num)
232
- if (allocated (string)) then
233
- write (buffer, ' (".", i0)' ) self% num(ii)
234
- string = string // trim (buffer)
235
- else
236
- write (buffer, ' (i0)' ) self% num(ii)
237
- string = trim (buffer)
238
- end if
239
- end do
240
- endif
230
+ do ii = 1 , ndigits(self)
231
+ if (allocated (string)) then
232
+ write (buffer, ' (".", i0)' ) self% num(ii)
233
+ string = string // trim (buffer)
234
+ else
235
+ write (buffer, ' (i0)' ) self% num(ii)
236
+ string = trim (buffer)
237
+ end if
238
+ end do
241
239
242
240
if (.not. allocated (string)) then
243
241
string = ' 0'
@@ -298,18 +296,18 @@ elemental function greater(lhs, rhs) result(is_greater)
298
296
! > First version is greater
299
297
logical :: is_greater
300
298
301
- integer :: ii
299
+ integer :: ii, lhs_size, rhs_size
302
300
303
- do ii = 1 , min (size (lhs% num), size (rhs% num ))
301
+ do ii = 1 , min (ndigits (lhs),ndigits (rhs))
304
302
if (lhs% num(ii) /= rhs% num(ii)) then
305
303
is_greater = lhs% num(ii) > rhs% num(ii)
306
304
return
307
305
end if
308
306
end do
309
307
310
- is_greater = size (lhs% num ) > size (rhs% num )
308
+ is_greater = ndigits (lhs) > ndigits (rhs)
311
309
if (is_greater) then
312
- do ii = size (rhs% num ) + 1 , size (lhs% num )
310
+ do ii = ndigits (rhs) + 1 , ndigits (lhs)
313
311
is_greater = lhs% num(ii) > 0
314
312
if (is_greater) return
315
313
end do
@@ -392,5 +390,17 @@ elemental function match(lhs, rhs)
392
390
393
391
end function match
394
392
393
+ ! > Number of digits
394
+ elemental integer function ndigits(self)
395
+ class(version_t), intent (in ) :: self
396
+
397
+ if (allocated (self% num)) then
398
+ ndigits = size (self% num)
399
+ else
400
+ ndigits = 0
401
+ end if
402
+
403
+ end function ndigits
404
+
395
405
396
406
end module fpm_versioning
0 commit comments