to_string_1_i_int64 Module Function

pure module function to_string_1_i_int64(value) result(string)

Represent an integer of kind int64 as character sequence.

Arguments

Type IntentOptional 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 = int64
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_int64(value) result(string)
      integer, parameter :: ik = int64
      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_int64