Zitat von
bluesbear:
...Exchange ist eine superelegante Lösung! Da müssen keine Speicherbereiche kopiert oder sonstwas gemacht werden, sondern nur ein paar Pointer vertauscht. Was schreibst denn Du da für einen... okok, ich werd wieder paranoid.
Jo.
Siehe hier :
Delphi-Quellcode:
procedure TStringList.Exchange(Index1, Index2: Integer);
begin
if (Index1 < 0) or (Index1 >= FCount) then Error(@SListIndexError, Index1);
if (Index2 < 0) or (Index2 >= FCount) then Error(@SListIndexError, Index2);
Changing;
ExchangeItems(Index1, Index2);
Changed;
end;
procedure TStringList.ExchangeItems(Index1, Index2: Integer);
var
Temp: Integer;
Item1, Item2: PStringItem;
begin
Item1 := @FList^[Index1];
Item2 := @FList^[Index2];
Temp := Integer(Item1^.FString);
Integer(Item1^.FString) := Integer(Item2^.FString);
Integer(Item2^.FString) := Temp;
Temp := Integer(Item1^.FObject);
Integer(Item1^.FObject) := Integer(Item2^.FObject);
Integer(Item2^.FObject) := Temp;
end;
So sieht das intern aus. Und elegant ist
IMHO lesbarer Quelltext. Wer meine 7 relevanten Zeilen nicht versteht, der tut mir leid.
Ergebnis : siehe Anhang.