libsim  Versione7.2.6
example_list.F03

Sample program to demostrate the list* module. This modules port lists to fortran 2003.

1 program example_list
2 
3 use list_mix
4 use list_integer
5 use list_real
7 use kinds
8 
9 implicit none
10 type(integerlist) :: list_int
11 type(reallist) :: list_real
12 type(characterlist) :: list_char
13 type(mixlist) :: list_mix
14 
15 class(*),pointer :: val
16 integer values(10)
17 integer i,n
18 
19 type mytype
20  integer :: i
21  real :: r
22 end type mytype
23 type(mytype) :: ir=mytype(3,6.)
24 
25 type charmylen
26  character(len=10) :: char10
27 end type charmylen
28 type(charmylen) :: mychar
29 
30 
31  ! real list
32 call list_real%append(3.14)
33 call list_real%append(6.28)
34 print *,"display real list"
35 call list_real%display()
36 
37 !!$! do not work !!!
38 !!$! compiler bug ?
39 !!$ ! char fixed len (10) list
40 call list_char%append("hello world")
41 call list_char%append("bye bye baby")
42 print *,"display char list"
43 call list_char%display()
44 
45 
46  ! test integer list
47 do i=1, 10
48  call list_int%append(i)
49 enddo
50 print *,"display integer list"
51 call list_int%display()
52 print *
53 call list_int%rewind()
54 i = 1
55 do while(list_int%element())
56  values(i) = list_int%current()
57  call list_int%next()
58  i = i + 1
59 end do
60 print *,"display integer vector from list"
61 print *, values
62 
63 !more easy
64 values =list_int%toarray()
65 print *,"display integer vector from list with toarray"
66 print *, values
67 
68 ! reverse
69 call list_int%forward()
70 i = 1
71 do while(list_int%element())
72  values(i) = list_int%current()
73  call list_int%prev()
74  i = i + 1
75 end do
76 print *,"display inverse integer vector from list"
77 print *, values
78 
79 print *,"seek return status =", list_int%seek(3)
80 print *,"list index 3 =", list_int%current()
81 
82  ! test remove
83 print *,"delete(5) return status =", list_int%delete(5)
84 print *,"display integer vector with 5 removed"
85 call list_int%display()
86 ! reverse
87 print *,"display reverse integer vector with 5 removed"
88 call list_int%forward()
89 do while(list_int%element())
90  print*, "index:",list_int%currentindex()," value:",list_int%current()
91  call list_int%prev()
92 end do
93 
94 
95 print *,"delete(1) return status =", list_int%delete(1)
96 print *,"display integer vector with 1 removed"
97 call list_int%display()
98 
99 n=list_int%countelements()
100 print *,"number of list elements=",n
101 
102 print *,"delete(",n,")"
103 print *,"return status =", list_int%delete(n)
104 print *,"display integer vector with last removed"
105 call list_int%display()
106 
107 print *,"delete return status =", list_int%delete()
108 print *,"display integer vector with everithings removed"
109 call list_int%display()
110 
111  ! test mix list
112 do i=1, 10
113  call list_mix%append(i)
114 enddo
115 call list_mix%append(1.23)
116 call list_mix%append(4d0)
117 call list_mix%append(ir)
118  ! this do not work !
119  ! compiler bug ???
120  ! call list_mix%append("test1")
121  ! call list_mix%append("test2")
122 
123  ! but this should work
124 
125 mychar%char10="ciao ciao"
126 call list_mix%append(mychar)
127 
128 print *,"display mix list"
129 call list_mix%display()
130 
131 print *,"print mix list with cast"
132 call list_mix%rewind()
133 do while (list_mix%element())
134 
135  val => list_mix%current()
136  select type (x => val)
137  type is (integer)
138  print *,x
139  type is (real)
140  print *,x
141  type is (doubleprecision)
142  print *,x
143  type is (integer(kind=int_b))
144  print *,x
145  type is (character(*))
146  print *,x
147  type is (mytype)
148  print *,x%i,x%r
149  type is (charmylen)
150  print *,x%char10
151  end select
152 
153  call list_mix%next()
154 
155 end do
156 
157 end program example_list

Generated with Doxygen.