AGB  ·  Datenschutz  ·  Impressum  







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

Implementierung TList<>

Ein Thema von freimatz · begonnen am 22. Mär 2022 · letzter Beitrag vom 23. Mär 2022
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Implementierung TList<>

  Alt 22. Mär 2022, 10:37
Ich bin eh irritiert über die Fragestellung.
Dir liegen doch die Quelltexte und der Debugger vor.
Was genau hast du im ersten Beitrag erwartet?
Das es jemand nochmal in Prosaform beschreibt?
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Implementierung TList<>

  Alt 22. Mär 2022, 11:30
Ehrlich: ja. (Wobei Prosa muss es ja nicht sein, es sind ja nur zwei Optionen )
Auf die Idee den Debugger zu nehmen und in der RTL rumzusuchen kam ich zuerst gar nicht.
Andererseits - auch dachte ich das weiss vielleicht gerade jemand.

Was Spring4D ist es nach wie vor so, das ich da nicht so recht weiter komme. Einerseits ist Delphi mal wieder störisch und andererseits verstehe ich den Code nicht so recht.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Implementierung TList<>

  Alt 22. Mär 2022, 13:44
Also ohne es selbst zu nutzen, aber es ist doch relativ einfach zu durchschauen?
Du machst schon so lange Delphi und schreibst ab und an, was für eine sophisticated Firma ihr habt?!


https://bitbucket.org/sglienke/sprin...tions.Base.pas

Die Spring4D-TList<T> leitet von TListBase<T> ab:

Delphi-Quellcode:
function TListBase<T>.Add(const item: T): Integer;
begin
  Result := Count;
  Insert(Result, item);
end;
Das Add ruft also wie gebräuchlich die Insert-Methode auf:

https://bitbucket.org/sglienke/sprin...ions.Lists.pas

(Kommentare mit Zahlen von mir)
Delphi-Quellcode:
procedure TList<T>.Insert(index: Integer; const item: T);
begin
{$IFDEF SPRING_ENABLE_GUARD}
  Guard.CheckRange((index >= 0) and (index <= fCount), 'index'); // 1
{$ENDIF}

  EnsureCapacity(fCount + 1); // 2

  IncUnchecked(fVersion);
  if index <> fCount then // 3
  begin
    TArrayManager.Move(fItems, index, index + 1, fCount - index);
    TArrayManager.Finalize(fItems, index, 1);
  end;
  fItems[index] := item; // 4
  Inc(fCount); // 5

  Changed(item, caAdded); // 6
end;
1. Gucken ob der Index stimmt.
2. Ggf. das interne Array fItems: TArray<T>; vergrößern wenn der Platz nicht reicht
3. Wenn Index ungleich Count ist das Array umkopieren.
4. Neues Item auf Position im Array speichern.
5. Count erhöhen
6. Ggf. angemeldete Eventhandler rufen für "Hab Element hinzugefügt!"-Fall.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Implementierung TList<>

  Alt 22. Mär 2022, 14:08
Danke. Ich meine inzwischen auch die zweite Frage beantworten zu können.

Also ohne es selbst zu nutzen, aber es ist doch relativ einfach zu durchschauen?
Du machst schon so lange Delphi und schreibst ab und an, was für eine sophisticated Firma ihr habt?!
Für mich ist das leider nicht recht einfach durchzuschauen. Ja ich mache schon lange Delphi (und davor Turbo-Pascal). Code zu verstehen den anderen gemacht haben, habe ich grössere Mühe. Das liegt sicher an mir. (Und bei Prosa sind die Schwierigkeiten meist noch grösser.)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.039 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Implementierung TList<>

  Alt 22. Mär 2022, 23:26
Gut, dass du den Code aus Spring 1.2 gepostet hast und nicht aus develop (2.0), sonst hättest noch irgendwen verschreckt
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.490 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Implementierung TList<>

  Alt 23. Mär 2022, 14:34
Jetzt hast Du mich neugierig gemacht und ich habe den Code angesehen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:27 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 by Thomas Breitkreuz