* Some fixes in stringbuilder

This commit is contained in:
michael 2020-12-11 16:41:51 +00:00
parent 8b600f7e10
commit f6b40883f0

View File

@ -1120,7 +1120,6 @@ Type
Procedure SetLength(AValue: Integer); Procedure SetLength(AValue: Integer);
protected protected
FData: String; FData: String;
FLength: Integer;
FMaxCapacity: Integer; FMaxCapacity: Integer;
// Raise error on range check. // Raise error on range check.
Procedure CheckRange(Idx,Count,MaxLen : Integer);inline; Procedure CheckRange(Idx,Count,MaxLen : Integer);inline;
@ -8098,7 +8097,6 @@ constructor TStringBuilder.Create(aCapacity, aMaxCapacity: Integer);
begin begin
FMaxCapacity:=aMaxCapacity; FMaxCapacity:=aMaxCapacity;
Capacity:=aCapacity; Capacity:=aCapacity;
FLength:=0;
end; end;
constructor TStringBuilder.Create(aCapacity: Integer); constructor TStringBuilder.Create(aCapacity: Integer);
@ -8116,7 +8114,7 @@ end;
function TStringBuilder.GetLength: Integer; function TStringBuilder.GetLength: Integer;
begin begin
Result:=FLength; Result:=System.Length(FData);
end; end;
function TStringBuilder.GetCapacity: Integer; function TStringBuilder.GetCapacity: Integer;
@ -8143,9 +8141,7 @@ procedure TStringBuilder.SetLength(AValue: Integer);
begin begin
CheckNegative(AValue,'AValue'); CheckNegative(AValue,'AValue');
CheckRange(AValue,0,MaxCapacity); CheckRange(AValue,0,MaxCapacity);
While AValue>Capacity do SetLength(FData,aValue);
Grow;
Flength:=AValue;
end; end;
{ Check functions } { Check functions }
@ -8582,9 +8578,7 @@ begin
CheckRange(StartIndex,0,Length); CheckRange(StartIndex,0,Length);
MoveIndex:=StartIndex+RemLength; MoveIndex:=StartIndex+RemLength;
CheckRange(MoveIndex,0,Length); CheckRange(MoveIndex,0,Length);
if (Length-Moveindex)>0 then Delete(FData,StartIndex+1,RemLength);
Delete(FData,MoveIndex+1,RemLength);
Length:=Length-RemLength;
Shrink; Shrink;
Result:=Self; Result:=Self;
end; end;
@ -8623,7 +8617,7 @@ begin
Raise ERangeError.CreateFmt(SListCapacityError,[AValue]); Raise ERangeError.CreateFmt(SListCapacityError,[AValue]);
if (AValue<Length) then if (AValue<Length) then
Raise ERangeError.CreateFmt(SListCapacityError,[AValue]); Raise ERangeError.CreateFmt(SListCapacityError,[AValue]);
System.SetLength(FData,AValue); // No-op
end; end;
@ -8638,6 +8632,7 @@ begin
CheckNegative(aStartIndex,'aStartIndex'); CheckNegative(aStartIndex,'aStartIndex');
CheckNegative(aLength,'aLength'); CheckNegative(aLength,'aLength');
CheckRange(aStartIndex,aLength,Length); CheckRange(aStartIndex,aLength,Length);
Writeln('FData : ',FData);
Result:=Copy(FData,1+aStartIndex,aStartIndex+aLength); Result:=Copy(FData,1+aStartIndex,aStartIndex+aLength);
end; end;