|
@@ -34,6 +34,7 @@ type
|
|
public
|
|
public
|
|
function Size():SizeUInt;inline;
|
|
function Size():SizeUInt;inline;
|
|
constructor Create();
|
|
constructor Create();
|
|
|
|
+ Procedure Clear;
|
|
procedure PushBack(value:T);inline;
|
|
procedure PushBack(value:T);inline;
|
|
procedure PushFront(value:T);inline;
|
|
procedure PushFront(value:T);inline;
|
|
procedure PopBack();inline;
|
|
procedure PopBack();inline;
|
|
@@ -58,6 +59,12 @@ begin
|
|
FStart:=0;
|
|
FStart:=0;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TDeque.Clear;
|
|
|
|
+begin
|
|
|
|
+ FDataSize:=0;
|
|
|
|
+ FStart:=0;
|
|
|
|
+end;
|
|
|
|
+
|
|
function TDeque.Size():SizeUInt;inline;
|
|
function TDeque.Size():SizeUInt;inline;
|
|
begin
|
|
begin
|
|
Size:=FDataSize;
|
|
Size:=FDataSize;
|
|
@@ -65,10 +72,7 @@ end;
|
|
|
|
|
|
function TDeque.IsEmpty():boolean;inline;
|
|
function TDeque.IsEmpty():boolean;inline;
|
|
begin
|
|
begin
|
|
- if Size()=0 then
|
|
|
|
- IsEmpty:=true
|
|
|
|
- else
|
|
|
|
- IsEmpty:=false;
|
|
|
|
|
|
+ IsEmpty:=Size()=0;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TDeque.PushBack(value:T);inline;
|
|
procedure TDeque.PushBack(value:T);inline;
|
|
@@ -139,13 +143,29 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TDeque.IncreaseCapacity;inline;
|
|
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
|
|
begin
|
|
OldEnd:=FCapacity;
|
|
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
|
|
else
|
|
- FCapacity:=FCapacity*2;
|
|
|
|
|
|
+ if DataSize<cSizeBig then
|
|
|
|
+ FCapacity:=FCapacity+FCapacity div 8
|
|
|
|
+ else
|
|
|
|
+ FCapacity:=FCapacity+FCapacity div 16;
|
|
|
|
+
|
|
SetLength(FData, FCapacity);
|
|
SetLength(FData, FCapacity);
|
|
if (FStart>0) then
|
|
if (FStart>0) then
|
|
for i:=0 to FStart-1 do
|
|
for i:=0 to FStart-1 do
|