File: custom_operator_08.f90

package info (click to toggle)
lfortran 0.59.0-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 56,736 kB
  • sloc: cpp: 168,052; f90: 74,272; python: 17,537; ansic: 7,705; yacc: 2,345; sh: 1,334; fortran: 895; makefile: 37; javascript: 15
file content (52 lines) | stat: -rw-r--r-- 1,109 bytes parent folder | download | duplicates (3)
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
48
49
50
51
52
module custom_operator_08_a
  implicit none

  public :: string_t
  public :: operator(//)

  type string_t
    character(len=:), allocatable :: string_
  end type

  interface operator(//)
    module procedure string_t_cat_string_t
  end interface

contains

  elemental module function from_characters(string) result(new_string)
    implicit none
    character(len=*), intent(in) :: string
    type(string_t) new_string
    new_string%string_ = string
  end function

  pure module function string_t_cat_string_t(lhs, rhs) result(lhs_cat_rhs)
    implicit none
    class(string_t), intent(in) :: lhs, rhs
    type(string_t) lhs_cat_rhs
    lhs_cat_rhs = string_t(lhs%string_ // rhs%string_)
  end function

end module custom_operator_08_a

module custom_operator_08_b
  use custom_operator_08_a
  implicit none

contains

  subroutine test_concat
    type(string_t) :: str
    str = string_t("a") // string_t("b")
  end subroutine test_concat

end module custom_operator_08_b

program custom_operator_08
    use custom_operator_08_b
    implicit none

    call test_concat()

end program custom_operator_08