AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObject als Übergabeparameter

Ein Thema von hanselmansel · begonnen am 27. Nov 2005 · letzter Beitrag vom 27. Nov 2005
 
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: TObject als Übergabeparameter

  Alt 27. Nov 2005, 18:23
Ich stelle hier eine DoubleLinked-List die (bei mir ) funktioniert...:
Delphi-Quellcode:
type
 TListNode = class(TObject)
   private
     FNext:TListNode;
     FPrev:TListNode;
   public
     procedure AfterConstruction();override;
     procedure BeforeDestruction();override;
   published
     property Next:TListNode read FNext;
     property Prev:TListNode read FPrev;
 end;

 TDoubleLinkedList = class(TObject)
   private
     FHead:TListNode;
     FTail:TListNode;
     FSize:Integer;
   protected
   public
     procedure AfterConstruction();override;
     procedure BeforeDestruction();override;
     procedure Append( Node:TObject );
     procedure InsertBefore( Node, Before:TObject );
     procedure Remove( var Node:TObject; AndDelete:Boolean = False );
     function NextNode( Node:TObject ):TObject;
     function PrevNode( Node:TObject ):TObject;
     procedure Clear();
   published
     property Size:integer read FSize;
     property Head:TListNode read FHead;
     property Tail:TListNode read FTail;
 end;

implementation

uses
  SysUtils;

{ TListNode }

procedure TListNode.AfterConstruction();
begin
  inherited;
  FNext := nil;
  FPrev := nil;
end;

procedure TListNode.BeforeDestruction();
begin
  inherited;
end;

{ TDoubleLinkedList }

procedure TDoubleLinkedList.AfterConstruction();
begin
  inherited;
  FHead := nil;
  FTail := nil;
  FSize := 0;
end;

procedure TDoubleLinkedList.Clear();
  var Node:TListNode;
begin
  while FHead <> nil do
  begin
    Node := FHead;
    FHead := FHead.FNext;
    Node.Free;
  end;
end;

procedure TDoubleLinkedList.BeforeDestruction();
begin
  Clear();
end;

procedure TDoubleLinkedList.Append( Node:TObject );
begin
  if FHead = nil then
  begin
    FHead := TListNode(Node);
    FTail := TListNode(Node);
  end else
  begin
    TListNode(Node).FPrev := FTail;
    FTail.FNext := TListNode(Node);
    FTail := TListNode(Node);
  end;
  Inc(FSize);
end;

procedure TDoubleLinkedList.InsertBefore( Node, Before:TObject );
begin
  if FHead = nil then
  begin
    FHead := TListNode(Node);
    FTail := TListNode(Node);
  end else
  begin
    if Before = FHead then
    begin
      TListNode(Node).FNext := FHead;
      FHead.FPrev := TListNode(Node);
      FHead := TListNode(Node);
    end else
    begin
      TListNode(Node).FNext := TListNode(Before);
      TListNode(Node).FPrev := TListNode(Before).FPrev;
      TListNode(Node).FPrev.FNext := TListNode(Node);
      TListNode(Before).FPrev := TListNode(Node);
    end;
  end;
  Inc(FSize);
end;

procedure TDoubleLinkedList.Remove( var Node:TObject; AndDelete:Boolean );
begin
  if Node = nil then
  begin
    Exit;
  end;

  if Node = FHead then
  begin
    FHead := FHead.FNext;
    if FHead = nil then
      FTail := nil
    else
      FHead.FPrev := nil;
  end
  else if Node = FTail then
  begin
    FTail := FTail.FPrev;
    if FTail = nil then
      FHead := nil
    else
      FTail.FNext := nil;
  end else
  begin
    TListNode(Node).FPrev.FNext := TListNode(Node).FNext;
    TListNode(Node).FNext.FPrev := TListNode(Node).FPrev;
  end;
  Dec(FSize);
  TListNode(Node).FNext := nil;
  TListNode(Node).FPrev := nil;
// if AndDelete then
// begin
// TListNode(Node).Free();
// Node := nil;
// end;
end;

function TDoubleLinkedList.NextNode( Node:TObject ):TObject;
begin
 if Node = nil then
   Result := nil
 else
   Result := TListNode(Node).FNext;
end;

function TDoubleLinkedList.PrevNode( Node:TObject ):TObject;
begin
 if Node = nil then
   Result := nil
 else
   Result := TListNode(Node).FPrev;
end;
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz