File: class_48.f90

package info (click to toggle)
lfortran 0.58.0-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,512 kB
  • sloc: cpp: 162,179; f90: 68,251; python: 17,476; ansic: 6,278; yacc: 2,334; sh: 1,317; fortran: 892; makefile: 33; javascript: 15
file content (74 lines) | stat: -rw-r--r-- 1,802 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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
program class_48
   implicit none

   type :: SeriesInt
      integer :: scalar_data
      integer, allocatable :: array_data(:)
   end type

   type :: SeriesIntNested
      type(SeriesInt), allocatable :: v
   end type

   interface Series
      procedure Series_scalar, Series_array
   end interface

   interface SeriesNested
      procedure Series_nested_scalar_int
   end interface

   class(SeriesInt), allocatable :: s1, s2
   class(SeriesIntNested), allocatable :: s3

   ! Call Series with integer
   s1 = Series(42)
   print *, "s1%scalar_data:", s1%scalar_data
   print *, "s1%array_data:", s1%array_data
   if (s1%scalar_data /= 42) error stop
   if (.not. all(s1%array_data == [0, 0, 0, 0])) error stop

   print *

   ! Call Series with array
   s2 = Series([1,2,3,4])
   print *, "s2%scalar_data:", s2%scalar_data
   print *, "s2%array_data:", s2%array_data
   if (s2%scalar_data /= 101) error stop
   if (.not. all(s2%array_data == [1, 2, 3, 4])) error stop

   print *

   allocate(s3)

   ! Call SeriesNested with integer and assign to a struct instance member
   s3%v = SeriesNested(42)
   print *, "s3%v%scalar_data:", s3%v%scalar_data
   if (s3%v%scalar_data /= 42) error stop

contains

   function Series_scalar(data) result(self)
      type(SeriesInt) :: self
      integer, intent(in) :: data

      self%scalar_data = data
      allocate(self%array_data(4))  ! initialize to zeroes
   end function

   function Series_nested_scalar_int(data) result(self)
      type(SeriesInt) :: self
      integer, intent(in) :: data

      self%scalar_data = data
   end function

   function Series_array(data) result(self)
      type(SeriesInt) :: self
      integer, intent(in) :: data(:)

      self%array_data = data
      self%scalar_data = 101
   end function

end program class_48