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.