Article View: fras.text.programmieren
Article #49Re: Frage zu Messages & Nodes
From: Andreas Winkelmann
Date: Sat, 30 Sep 1995 12:46
Date: Sat, 30 Sep 1995 12:46
86 lines
2839 bytes
2839 bytes
Hallo Steffen.
> Ich habe eine eigene Message-Struktur:
>
> struct DemoMessage
> {
> struct Message Message;
>
> STRPTR Name;
> };
>
> Nun möchte ich die Message in eine Exec-Liste eintragen.
> Das muß ich doch so machen:
>
> AddTail(List,(struct Node *)DemoMessage->Message); <- Richtig????
Es funktioniert. Vorausgesetzt, dass DemoMessage ein Pointer
auf eine DemoMessage-Struktur ist.
In diesem Fall, hilft Dir aber die Tatsache, dass die Struktur
Message an erster Stelle der Struktur DemoMessage steht. Es
reicht also :
AddTail(List,(struct Node *)DemoMessage);
> Zweites Problem: Ich bekomme eine Nachricht zurück und möchte
> diese nun aus der Liste nehmen und den reservierten Speicher
> wieder freigeben. Leider habe ich Probleme, die Adresse der
> empfangenen Message in der Liste zu finden. Ursprünglich wollte
> ich es wie in den RKRM p.496 beschrieben ist, lösen:
> struct X *WorkNode;
> struct X* NextNode;
>
>
> WorkNode = (struct X *)List->ln_Head;
>
> while(NextNode = (struct X *)WorkNode->...->nn.Node.ln_Succ)
> {
>
> WorkNode = NextNode;
> }
>
> Was für ein Typ muß X sein? DemoMessage, Message oder gar Node?
> Ich habe so etwas schon einmal mit eigenen Node-Strukturen
> gemacht, aber da war es etwas einfacher,da die Node-Struktur am
> Anfang meiner Struktur stand. Diesmal blicke ich da nicht so
> richtig durch.... :-(((
Das kommt darauf an, was Du hast. Folgendes Beispiel ist sicher
am unproblematischsten :
struct Node *WorkNode, *NextNode;
WorkNode = List->lh_Head;
while(NextNode = WorkNode->ln_Succ)
{
WorkNode = NextNode;
}
Allerdings klappt das wohl nicht immer. Wann kommst Du schon
mit normalen Node-Strukturen aus ?
Wenn Du
struct DemoMessage *WorkNode, *NextNode;
hast, wird es schon ein wenig komplizierter.
WorkNode = ( struct DemoMessage *)List->lh_Head;
while(NextNode = (struct DemoMessage*)((struct Node*)WorkNode)->ln_Succ)
Natürlich geht auch :
while(NextNode = (struct DemoMessage*)WorkNode.Message.mn_Node.ln_Succ)
{
WorkNode = NextNode;
}
-----
Andreas Winkelmann
E-Mail : andi@art-line.art-line.de -- MicroDot V1.11beta12
Technical Details
Message-ID:
<wbVhJMD12aUz1@andi.art-line.art-line.de>Path:
arc1-ca.pugleaf.net!art-line.de!andiReferences:
<waAyIMD356aez2@p-zimmer.ame.osn.de>Show Full Headers
Complete Article Headers
Newsgroups: fras.text.programmieren,z-netz.rechner.amiga.programmieren Message-ID: <wbVhJMD12aUz1@andi.art-line.art-line.de> From: andi@art-line.art-line.de (Andreas Winkelmann) Path: arc1-ca.pugleaf.net!art-line.de!andi Organization: - Keine - Subject: Re: Frage zu Messages & Nodes Date: Sat, 30 Sep 1995 13:46:33 +0100 X-Mailer: MicroDot 1.11beta12 [REGISTERED 000012] References: <waAyIMD356aez2@p-zimmer.ame.osn.de> X-Gateway: ZCONNECT UP royal.owl.de [UNIX/Connect v0.73] MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Z-Post: - Keine -