amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Nodes in Strukturen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

08.09.2002, 10:55 Uhr

StefanHaegele
Posts: 281
Nutzer
Hallo,

ich habe eine Frage zu Strukturen, welche über Nodes in einer Liste gesammelt werden. Ist es notwendig, dass die Nodes-Struktur am Anfang der Struktur ist ( wie bei allen AmigaOS-Strukturen ) oder kann die Nodes-Struktur auch am Ende oder an einer beliebigen Position innerhalb der Struktur sein ?

Meiner Meinung nach ja, aber ich bin mir nicht so sicher. Funktionieren tuts auf jeden Fall. Aber evtl. gibt es ja "Nebenwirkungen" wenn die Nodes-Struktur nicht an erster Stelle steht.

Danke
Stefan

[ - Antworten - Zitieren - Direktlink - ]

08.09.2002, 11:28 Uhr

Kronos
Posts: 1168
Nutzer
Wenn du die Node am Anfang stehen hast kannst du einfach deine Struktur an
Exec-Funktionen wie AddHead() übergeben (mittels typecast), wenn sie in der
Mitte stehen musst du jeweils erst die Addresse der Node ermitteln.

Wenn du jetzt deine Liste "abklapperts" oder mittels FindName() eine bestimmte
Structur suchts, erhälts du immer erst einen Pointer auf Node, und um an die Startaddresse deiner Struktur zu kommen musst du erst noch einen Offset
abziehen. Bei Node am Anfang reicht wieder ein einfacher Typecast.

Ist einfach die deutlich saubere Methode.

MfG
Kronos
--

Only the good die young all the evil seem to live forever

[ - Antworten - Zitieren - Direktlink - ]

08.09.2002, 11:30 Uhr

thomas
Posts: 7717
Nutzer

Bei AmigaOS-Strukturen ist die Node immer am Anfang, weil dann der Pointer auf die Struktur direkt an die List-Funktionen (wie AddHead, AddTail etc.) übergeben werden kann. Wenn die Node in der Mitte ist, muß erst mit dem Offset herumgerechnet werden. Da sich diese Funktionen aber nur für die Node interessieren, gibt es keine Nebenwirkungen. Wenn du nicht mit den List-Funktionen arbeiten möchtest, brauchst du gar keine Node.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

09.09.2002, 12:33 Uhr

Michi
Posts: 17
Nutzer
Hallo Stefan,

wie bereits oben erwähnt, macht es für Library-Funktionen wie AddHead oder FindName sehr wohl Sinn, die Nodes an den Beginn einer Funktion zu platzieren.

Du kannst das aber auch allgemeiner betrachten: Willst Du eine eigene Funktion schreiben, die mit Listen und Nodes arbeitet und Du übergibst den Pointer auf verschiedenste verkettete Strukturen, dann bist Du angewiesen, dass Deine Node IMMER an demselben Ort steht. Denn sobald Deine unterschiedlichen Strukturen verschiedene Bytegrössen aufweisen, hast Du Probleme mit Deiner Variante.

FindName zB. macht genau davon Gebrauch: Es ist eine Funktion die mit Nodes arbeitet. Du übergibst den Zeiger auf Deine Struktur. FindName selbst hat nun keine Ahnung welche Daten Deine eigene Struktur aufweist, wie gross sie ist usw. Das einzige was FindName weiss, ist: 'Meine Nodestruktur befindet sich am Anfang der Struktur.'

Auch wenn Du von solchen Systemfunktionen keinen Gebrauch machst, empfehle ich der Übersicht halber, diese Regelung einzuhalten.

Gruss Michi

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Nodes in Strukturen [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.