Ich hab manche Routinen die Geschwindigkeitsoptimiert sind und verwende da deshalb (gelegentlich) eigene Stringlisten (FItems: array of string). Jetzt wollte ich mal fragen ob die Moves und FillChars so richtig sind und ob der Compiler was mit SizeOf(string) anfangen kann?
Delphi-Quellcode:
procedure TMyStringList.Insert(const Index: integer; const Value: string);
var
N: integer;
begin
SetCount(FCount + 1);
if Index < FCount - 1 then
begin
N:= (FCount - 1 - Index) * SizeOf(string);
Move(FItems[Index], FItems[Index + 1], N);
FillChar(FItems[Index], SizeOf(string), 0);
end;
FItems[Index] := Value;
end;
procedure TMyStringList.Delete(const Index: integer);
var
N: integer;
begin
if Index < FCount - 1 then
begin
N:= (FCount - 1 - Index) * SizeOf(string);
Move(FItems[Index + 1], FItems[Index], N);
FillChar(FItems[FCount - 1], SizeOf(string), 0);
end;
SetCount(FCount - 1);
end;