AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Klasse TGUIDList: Liste von TGUID

Ein Thema von Phil73 · begonnen am 1. Mär 2007 · letzter Beitrag vom 1. Mär 2007
Antwort Antwort
Phil73

Registriert seit: 1. Feb 2005
7 Beiträge
 
Delphi 7 Professional
 
#1

Klasse TGUIDList: Liste von TGUID

  Alt 1. Mär 2007, 19:22
Hallo,

da ich gerade viel mit GUID arbeiten muß, habe ich eine (sehr) einfache Listenklasse dafür geschrieben. Ist im Grunde nur ein Array von TGUID mit ein paar Helper-Funktionen drumherum. Das Schreiben war auch nicht sonderlich aufwendig, aber vielleicht kann sich mal jemand damit etwas Arbeit sparen, darum poste ich es hier:



Delphi-Quellcode:

unit UTGUIDList;

interface

type

  TGUIDList = class
  private
    FGUIDList: Array of TGUID;
    FCount: Integer;
    function GetItem(Index: Integer): TGUID;
    procedure SetItem(Index: Integer; const Value: TGUID);
    function GetItemString(Index: Integer): string;
    procedure SetItemString(Index: Integer; const Value: string);
  public
    constructor Create; virtual;
    destructor Destroy; override;
    property Item[Index: Integer]: TGUID read GetItem write SetItem; default;
    property ItemString[Index: Integer]: string read GetItemString write SetItemString;
    procedure Clear;
    function Add(aGUID: TGUID): Integer;
    function AddFromString(aGUIDString: string): Integer;
    procedure Delete(Index: Integer); overload;
    function Delete(aGUID: TGUID): boolean; overload;
    function IndexOf(aGUID: TGUID): Integer; overload;
    function IndexOf(aGUIDString: string): Integer; overload;
    function IsInList(aGUID: TGUID): boolean; overload;
    function IsInList(aGUIDString: string): boolean; overload;
    property Count: Integer read FCount;
  end;

implementation

uses
  SysUtils;

{ TGUIDList }

function TGUIDList.Add(aGUID: TGUID): Integer;
begin
  inc(FCount);
  setlength(FGUIDList, FCount);
  FGUIDList[FCount-1] := aGUID;
  result := FCount-1;
end;

function TGUIDList.AddFromString(aGUIDString: string): Integer;
begin
  result := Add(StringToGUID(aGUIDString));
end;

procedure TGUIDList.Clear;
begin
  FCount := 0;
  setlength(FGUIDList, FCount);
end;

constructor TGUIDList.Create;
begin
  inherited;
  Clear;
end;

procedure TGUIDList.Delete(Index: Integer);
var
  i: Integer;
begin
  for i := Index to FCount-2 do begin
    FGUIDList[i] := FGUIDList[i+1];
  end;
  dec(FCount);
  setlength(FGUIDList, FCount);
end;

function TGUIDList.Delete(aGUID: TGUID): boolean;
//true if aGUID was found and deleted
var
  i: Integer;
begin
  result := false;
  i := IndexOf(aGUID);
  if i<0 then exit;
  Delete(i);
  result := true;
end;

destructor TGUIDList.Destroy;
begin
  Clear;
  inherited;
end;

function TGUIDList.GetItem(Index: Integer): TGUID;
begin
  result := FGUIDList[Index];
end;

function TGUIDList.GetItemString(Index: Integer): string;
begin
  result := GUIDToString(FGuidList[Index]);
end;

function TGUIDList.IndexOf(aGUID: TGUID): Integer;
//result := -1 if aGUID was not found
var
  i: integer;
begin
  result := -1;
  for i := 0 to FCount-1 do begin
    if IsEqualGUID(aGUID, FGUIDList[i]) then begin
      result := i;
      break;
    end;
  end;
end;

function TGUIDList.IndexOf(aGUIDString: string): Integer;
//result := -1 if aGUIDString was not found
begin
  result := IndexOf(StringToGUID(aGUIDString));
end;

function TGUIDList.IsInList(aGUID: TGUID): boolean;
begin
  result := IndexOf(aGUID) >= 0;
end;

function TGUIDList.IsInList(aGUIDString: string): boolean;
begin
  result := IsInList(StringToGUID(aGUIDString));
end;

procedure TGUIDList.SetItem(Index: Integer; const Value: TGUID);
begin
  FGUIDList[Index] := Value;
end;

procedure TGUIDList.SetItemString(Index: Integer; const Value: string);
begin
  FGUIDList[Index] := StringToGUID(Value);
end;

end.
Ich hoffe, es sind keine Flüchtigkeitsfehler drin. Feedback ist jederzeit gerne willkommen.
Beste Grüße, Philipp

PS: Ich selbst benutze D7, aber vermutlich funktioniert dieser Code auch bei viel älteren Versionen. Welche Angabe sollte ich denn hier unter "Ab Delphi Version" eintragen?
Angehängte Dateien
Dateityp: pas utguidlist_896.pas (3,2 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Klasse TGUIDList: Liste von TGUID

  Alt 1. Mär 2007, 19:38
Hi,

kann man nicht einfach eine tStringlist dafür benutzen ?

Was ist an deiner Klasse so besonderes ?
Und das dynamische Array ist ja wohl besonders langsam.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Phil73

Registriert seit: 1. Feb 2005
7 Beiträge
 
Delphi 7 Professional
 
#3

Re: Klasse TGUIDList: Liste von TGUID

  Alt 1. Mär 2007, 20:40
Zitat von thkerkmann:
Hi,

kann man nicht einfach eine tStringlist dafür benutzen ?
Schon, aber dann muß man jedesmal TGUID in string umwandeln und zurück. Wenn ich mir die Source zu bspw. StringToGUID in den SysUtils ansehe, scheint mir das doch relativ aufwendig zu sein.
Zitat:
Was ist an deiner Klasse so besonderes ?
Besonders? Nichts. Sowas ist wirklich schnell geschrieben. Ich finde Sie ja auch nur praktisch, und wollte anderen die Tipparbeit ersparen, falls jemand schnell was zum GUID speichern sucht. Aber wenn sie keinen interessiert, könnt ihr den Post auch gerne löschen...
Zitat:
Und das dynamische Array ist ja wohl besonders langsam.

Gruss
Hmm, wieso? Langsamer als eine TStringList?

Grüße,

Philipp
  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 10:18 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