1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
module operator_overloading_04_stdlib_string_type
type :: string_type
! Use the sequence statement below as a hack to prevent extending this type.
! It is not used for storage association.
sequence
character(len=:), allocatable :: raw
end type string_type
interface assignment(=)
module procedure :: assign_string_char
end interface assignment(=)
contains
pure subroutine assign_string_char(lhs, rhs)
type(string_type), intent(inout) :: lhs
character(len=*), intent(in) :: rhs
lhs%raw = rhs
end subroutine assign_string_char
elemental function trim_string(string) result(trimmed_string)
type(string_type), intent(in) :: string
type(string_type) :: trimmed_string
trimmed_string = string%raw
end function trim_string
end module
module operator_overloading_stdlib_string_use
use operator_overloading_04_stdlib_string_type, only: string_type
implicit none
contains
pure function chomp_string(string) result(chomped_string)
! Avoid polluting the module scope and use the assignment only in this scope
use operator_overloading_04_stdlib_string_type, only : assignment(=)
type(string_type), intent(in) :: string
type(string_type) :: chomped_string
integer :: last
end function chomp_string
end module
program stdlib_string
end program
|