Verwaltung von verketteten Fortran-Strukturen (Cray-compatibel)
Mit diesen Routinen kann man einfach oder zweifach verkettete
Ring-Strukturen (1- bzw. 2-Strukturen) aufbauen und wieder abbauen.
Bei 1-Strukturen muß der Zeiger (integer*4) auf die nächste
1-Struktur das erste Strukturelement sein;
bei 2-Strukturen müssen der Zeiger auf die vorangegangene
2-Struktur das erste, der Zeiger auf die nächste 2-Struktur das
zweite Strukturelement sein:
1-Struktur:
structure /a/
integer*4 next
(weitere Felddefinitionen)
endstructure
record /a/ a
pointer (a_,a)
2-Struktur:
structure /a/
integer*4 back,next
(weitere Felddefinitionen)
endstructure
record /a/ a
pointer (a_,a)
Bei
i=inew2a_(ianf,l)
ist ianf der Zeiger auf die aktuelle 2-Struktur; es wird eine neue
2-Struktur der Länge l erzeugt und angekettet. Der Funktionswert ist
der Zeiger auf die neue 2-Struktur.
Der Fall ianf=0 bedeutet das Erzeugen einer ersten 2-Struktur.
Bei
i=inew2b_(ianf,l)
wird analog zu inew2a_ verfahren, jedoch wird die erzeugte
2-Struktur vorgekettet.
Bei
i=inew1a_(ianf,l)
ist ianf der Zeiger auf die aktuelle 1-Struktur; es wird ein neue
1-Struktur der Länge l erzeugt und angekettet. Der Funktionswert ist
der Zeiger auf die neue 1-Struktur.
Der Fall ianf=0 bedeutet das Erzeugen einer ersten 1-Struktur.
Bei
i=inew1b_(ianf,l)
wird analog zu inew1a_ verfahren; die erzeugte 1-Struktur wird
lediglich vorgekettet.
Bei
i=ifree1a_(ianf)
wird die 1-Struktur, auf die ianf zeigt, freigegeben; der
Funktionswert ist der Zeiger auf die nächste 1-Struktur bzw.
gleich 0, falls keine existiert.
Bei
i=ifree1b_(ianf)
wird die 1-Struktur, auf die ianf zeigt, freigegeben; der
Funktionswert ist der Zeiger auf die vorangegangene 1-Struktur
bzw. gleich 0, falls keine existiert.
Bei
i=ifree2a_(ianf)
wird die 2-Struktur, auf die ianf zeigt, freigegeben; der
Funktionswert ist der Zeiger auf die nächste 2-Struktur bzw.
gleich 0, falls keine existiert.
Bei
i=ifree2b_(ianf)
wird die 2-Struktur, auf die ianf zeigt, freigegeben; der
Funktionswert ist der Zeiger auf die vorangegangene 2-Struktur
bzw. gleich 0, falls keine existiert.
Ein Beispiel.
Die folgende Aufgabe sei gestellt:
Die Struktur B enthalte eine ganze, eine reelle (doppelt genaue)
Zahl und sei vorwärts zu verketten (n Strukturen).
Die ganzen und reellen Zahlen sind fortlaufend - mit 1 beginnend -
zu belegen, danach in gleicher Folge zu drucken; die verketteten
Strukturen sind wieder freizugeben.
Das folgende Programm löst diese Aufgabe.
program main
parameter (n=3)
structure /a/
integer*4 next,i
real*8 x
endstructure
record /a/ c
pointer (c_,c)
c_=0
do k=1,n
c_=inew1a_(c_,16)
c.i=k
c.x=k
enddo
c_=c.next
do while (c_.ne.0)
print *, c.i,c.x
c_=ifree1a_(c_)
enddo
end
Versions-Datum: Di., 21. Nov. 2000, 15:00:07