Einzelnen Beitrag anzeigen

Obelisk2k5

Registriert seit: 20. Jun 2010
14 Beiträge
 
Delphi 2 Desktop
 
#1

Listen und wie man sie nutzt

  Alt 23. Jun 2010, 15:28
Nachdem ich hier schonmal gute Hilfe zum Thema Datenverwaltung erhalten habe,
gehe ich gleich zu meinem nächsten Problem über, bei dem ich Hilfestellung bräuchte:

Ich habe ein Programm geschrieben, dass zur Laufzeit Records in einem Array speichert und damit arbeitet.

Nun möchte ich dieses Array durch Listen ersetzen.

Ich habe schon einen Ansatz parat, nur weiß ich nicht, ob das so richtig ist und was geändert werden muss.
Daher schreibe ich den relevanten Programmcode hier auf und stelle programmbezogene Fragen als Kommentare im Code.

Zunächst einmal das Record TDeveloper samt Komponenten,
welches nicht verändert werden sollte.
Es ist in eine andere Unit ausgelagert:

Delphi-Quellcode:
TName = String[20];

TPerson = record
  sureName : TName;
  lastName : TName;
end;

TDeveloperID = Integer;

TDeveloper = record
  developerID : TDeveloperID;
  developerPerson : TPerson;
  developerDescription : TDescription;
end;
Nun der interessante Teil:
Delphi-Quellcode:
type
  TListe = ^TElement;
  TElement = record
               content : TDeveloper;
               Next : TListe;
             end;

// Ist dies so richtig? Habe mich etwas eingelesen, und da wurde ein Record mit einem Next-Teil
// benutzt. Da ich das eigentliche Record nicht verändern will, habe ich es so gelöst.
var
  First : TListe = nil;
  Last : TListe = nil;
  Allocations : integer;
// Wird benutzt, um im Finalizationteil zu prüfen, ob alle Listenelemente wieder freigegeben wurden


function NewElement(person: TPerson; description: TDescription) : boolean;
var
  TempElement,
  RunPointer : TListe;
  I: byte;
  Temp_ID: Integer;
begin
  if developersCount < DEVELOPER_MAX then
  begin
    First := nil;

// ---- Temporäre ID -----------------------------------------------------------

    Temp_ID := DEVELOPER_ID_MIN + DEVELOPER_MIN;

// ---- Wenn es schon andere Developer gibt, wird die Temporäre ID inkrementiert,
// ---- bis sie einen Wert hat, der noch nicht als Developer ID vergeben ist ---

  if developersCount > 0 then
    begin
    for I := DEVELOPER_MIN to DEVELOPER_MAX do
    Runpointer := first;
      While RunPointer <> nil do
        begin
        if Runpointer^.content.developerID = Temp_ID then
          inc(Temp_ID);
          Runpointer := Runpointer^.Next;
        end;
    end;
//--------------------------------------------------------------------------------

    new (TempElement);
    TempElement.content.developerID := Temp_ID;
    TempElement.content.developerPerson := person;
    TempElement.content.developerDescription := description;
    TempElement.Next := nil;
    if first = nil then
    begin
      First := TempElement;
      Last := First;
    end
      else
      begin
        Last^.Next := TempElement;
        Last := Last^.Next;
      end;
    NewElement := true;
  end
    else NewElement := false;
end;

// Noch etwas: In dem Berspiel, das ich gelesen habe, lieferte die Funktion NewElement einen
// Rückgabewert vom Typ TListe und am Ende wurde NewElement := First; gesetzt.
// Nur brauche ich eine Funktion, die bei Erfolg true liefert.
// Wieso wird NewElement auf First gesetzt und wie löse ich das am besten?

Geändert von SirThornberry (23. Jun 2010 um 17:15 Uhr) Grund: Code-Tags durch delphi-tags ersetzt
  Mit Zitat antworten Zitat