libsim Versione 7.1.11
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:251
class to use character lists in fortran 2003 WARNING !!!! CHAR LEN IS FIXED TO listcharmaxlen.
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.