pure module function to_string_1_i_int32(value) result(string)
Represent an integer of kind int32 as character sequence.
Arguments
| Type |
Intent | Optional | Attributes |
|
Name |
|
|
integer(kind=ik),
|
intent(in) |
|
|
:: |
value |
|
Return Value
character(len=:), allocatable
Variables
| Type |
Visibility | Attributes |
|
Name |
| Initial | |
|
character(len=buffer_len),
|
private |
|
:: |
buffer |
|
|
|
|
integer,
|
private, |
parameter
|
:: |
buffer_len |
= |
range(value)+2 |
|
|
integer,
|
private, |
parameter
|
:: |
ik |
= |
int32 |
|
|
integer(kind=ik),
|
private |
|
:: |
n |
|
|
|
|
character(len=1),
|
private, |
parameter
|
:: |
numbers(-9:0) |
= |
["9", "8", "7", "6", "5", "4", "3", "2", "1", "0"] |
|
|
integer,
|
private |
|
:: |
pos |
|
|
|
Source Code
pure module function to_string_1_i_int32(value) result(string)
integer, parameter :: ik = int32
integer(ik), intent(in) :: value
character(len=:), allocatable :: string
integer, parameter :: buffer_len = range(value) + 2
character(len=buffer_len) :: buffer
integer :: pos
integer(ik) :: n
character(len=1), parameter :: numbers(-9:0) = &
["9", "8", "7", "6", "5", "4", "3", "2", "1", "0"]
if (value == 0_ik) then
string = numbers(0)
return
end if
n = sign(value, -1_ik)
buffer = ""
pos = buffer_len + 1
do while (n < 0_ik)
pos = pos - 1
buffer(pos:pos) = numbers(mod(n, 10_ik))
n = n/10_ik
end do
if (value < 0_ik) then
pos = pos - 1
buffer(pos:pos) = '-'
end if
string = buffer(pos:)
end function to_string_1_i_int32