libsim Versione 7.2.6
example_list.F03

Sample program to demostrate the list* module.

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

1program example_list
2
3use list_mix
5use list_real
7use kinds
8
9implicit none
10type(integerlist) :: list_int
11type(reallist) :: list_real
12type(characterlist) :: list_char
13type(mixlist) :: list_mix
14
15class(*),pointer :: val
16integer values(10)
17integer i,n
18
19type mytype
20 integer :: i
21 real :: r
22end type mytype
23type(mytype) :: ir=mytype(3,6.)
24
25type charmylen
26 character(len=10) :: char10
27end type charmylen
28type(charmylen) :: mychar
29
30
31 ! real list
32call list_real%append(3.14)
33call list_real%append(6.28)
34print *,"display real list"
35call list_real%display()
36
37!!$! do not work !!!
38!!$! compiler bug ?
39!!$ ! char fixed len (10) list
40call list_char%append("hello world")
41call list_char%append("bye bye baby")
42print *,"display char list"
43call list_char%display()
44
45
46 ! test integer list
47do i=1, 10
48 call list_int%append(i)
49enddo
50print *,"display integer list"
51call list_int%display()
52print *
53call list_int%rewind()
54i = 1
55do while(list_int%element())
56 values(i) = list_int%current()
57 call list_int%next()
58 i = i + 1
59end do
60print *,"display integer vector from list"
61print *, values
62
63!more easy
64values =list_int%toarray()
65print *,"display integer vector from list with toarray"
66print *, values
67
68! reverse
69call list_int%forward()
70i = 1
71do while(list_int%element())
72 values(i) = list_int%current()
73 call list_int%prev()
74 i = i + 1
75end do
76print *,"display inverse integer vector from list"
77print *, values
78
79print *,"seek return status =", list_int%seek(3)
80print *,"list index 3 =", list_int%current()
81
82 ! test remove
83print *,"delete(5) return status =", list_int%delete(5)
84print *,"display integer vector with 5 removed"
85call list_int%display()
86! reverse
87print *,"display reverse integer vector with 5 removed"
88call list_int%forward()
89do while(list_int%element())
90 print*, "index:",list_int%currentindex()," value:",list_int%current()
91 call list_int%prev()
92end do
93
94
95print *,"delete(1) return status =", list_int%delete(1)
96print *,"display integer vector with 1 removed"
97call list_int%display()
98
99n=list_int%countelements()
100print *,"number of list elements=",n
101
102print *,"delete(",n,")"
103print *,"return status =", list_int%delete(n)
104print *,"display integer vector with last removed"
105call list_int%display()
106
107print *,"delete return status =", list_int%delete()
108print *,"display integer vector with everithings removed"
109call list_int%display()
110
111 ! test mix list
112do i=1, 10
113 call list_mix%append(i)
114enddo
115call list_mix%append(1.23)
116call list_mix%append(4d0)
117call 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
125mychar%char10="ciao ciao"
126call list_mix%append(mychar)
127
128print *,"display mix list"
129call list_mix%display()
130
131print *,"print mix list with cast"
132call list_mix%rewind()
133do 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
155end do
156
157end program example_list
Definition of constants to be used for declaring variables of a desired type.
Definition kinds.F90:245
class to use character lists in fortran 2003 WARNING !
class to use lists in fortran 2003.
class to use lists in fortran 2003.
Definition list_mix.F03:58
class to use lists in fortran 2003.
Definition list_real.F03:58

Generated with Doxygen.