AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

List und Generics

Ein Thema von Peter666 · begonnen am 23. Jul 2016 · letzter Beitrag vom 24. Jul 2016
Antwort Antwort
Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

List und Generics

  Alt 23. Jul 2016, 14:01
Hi,

kann mir jemand eventuell helfen? Ich habe hier folgenden Code und der funktioniert auch mit dem neuen Compiler, aber ich würde gerne die TList in Generics.Collections nutzen, anstelle der Variante in Classes. Der Grund ist das ich mit beiliegendem Code auch Objekte verwalten will.

Delphi-Quellcode:
unit SortedList;

interface

uses
  Classes;

type
  TSortedList = class(TList)
  private
    FCompare: TListSortCompare;
  protected
    procedure Notify(Ptr: Pointer; Action: TListNotification); override;
  public
    Duplicates: TDuplicates;

    constructor Create(Compare: TListSortCompare);

    function Add(Item: Pointer): Integer;
    function Find(Key: Pointer; var Index: Integer): Boolean;
    procedure Sort; overload;
    property Compare: TListSortCompare read FCompare write FCompare;
  end;

implementation

constructor TSortedList.Create(Compare: TListSortCompare);
begin
  inherited Create;
  FCompare := Compare;
end;

function TSortedList.Find(Key: Pointer; var Index: Integer): Boolean;
var
  Min, Max, Res: Integer;
begin
  Index := 0;
  result := false;
  if Count = 0 then exit;
  Min := 0;
  Max := Count;
  repeat
    Index := (Min + Max) shr 1;
    Res := FCompare(Key,List[Index]);
    if Res > 0 then //P > Items[Index]
    begin
      Inc(Index);
      Min := Index;
    end
    else begin //P <= Items[Index]
      if Res = 0 then //speed exit
      begin
        result := true;
        break;
      end;
      Max := Index;
    end;
  until Max <= Min;
end;

procedure TSortedList.Sort;
begin
  inherited Sort(FCompare);
end;

function TSortedList.Add(Item: Pointer): Integer;
begin
  if not Find(Item,result) or (Duplicates = dupAccept) then
    Insert(result,Item)
  else
    result := -1;
end;

procedure TSortedList.Notify(Ptr: Pointer; Action: TListNotification);
begin
  if (Action = lnDeleted) and (Ptr <> nil) then
    Dispose(Ptr);
end;

end.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: List und Generics

  Alt 24. Jul 2016, 14:43
Hi Peter666

Wieso verwendest du nicht gleich TObjektList? Wen du TObjectlist für Objekte/Klassen einsetzt und TList weiterhin für Zeiger wie bisher, hast du nach meinem dafürhalten auch einen Übersichtsvorteil.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz