|
@@ -146,13 +146,29 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TDeque.IncreaseCapacity;inline;
|
|
|
-var i,OldEnd:SizeUInt;
|
|
|
+const
|
|
|
+ // if size is small, multiply by 2;
|
|
|
+ // if size bigger but <256M, inc by 1/8*size;
|
|
|
+ // otherwise inc by 1/16*size
|
|
|
+ cSizeSmall = 1*1024*1024;
|
|
|
+ cSizeBig = 256*1024*1024;
|
|
|
+var
|
|
|
+ i,OldEnd,
|
|
|
+ DataSize:SizeUInt;
|
|
|
begin
|
|
|
OldEnd:=FCapacity;
|
|
|
- if(FCapacity=0) then
|
|
|
- FCapacity:=1
|
|
|
+ DataSize:=FCapacity*SizeOf(T);
|
|
|
+ if FCapacity=0 then
|
|
|
+ FCapacity:=4
|
|
|
+ else
|
|
|
+ if DataSize<cSizeSmall then
|
|
|
+ FCapacity:=FCapacity*2
|
|
|
else
|
|
|
- FCapacity:=FCapacity*2;
|
|
|
+ if DataSize<cSizeBig then
|
|
|
+ FCapacity:=FCapacity+FCapacity div 8
|
|
|
+ else
|
|
|
+ FCapacity:=FCapacity+FCapacity div 16;
|
|
|
+
|
|
|
SetLength(FData, FCapacity);
|
|
|
if (FStart>0) then
|
|
|
for i:=0 to FStart-1 do
|