# revisions: 47122

git-svn-id: branches/fixes_3_2@47262 -
This commit is contained in:
marco 2020-10-31 18:53:06 +00:00
parent 55401227f9
commit f3b048007c
3 changed files with 37 additions and 15 deletions

1
.gitattributes vendored
View File

@ -17701,6 +17701,7 @@ tests/webtbs/tw37228.pp svneol=native#text/plain
tests/webtbs/tw37322.pp svneol=native#text/pascal
tests/webtbs/tw37323.pp svneol=native#text/pascal
tests/webtbs/tw37355.pp svneol=native#text/pascal
tests/webtbs/tw37382.pp svneol=native#text/pascal
tests/webtbs/tw37397.pp svneol=native#text/plain
tests/webtbs/tw37415.pp svneol=native#text/plain
tests/webtbs/tw3742.pp svneol=native#text/plain

View File

@ -19,10 +19,10 @@ interface
type
generic TDeque<T>=class
private
type
type
PT=^T;
TArr=array of T;
var
var
FData:TArr;
FDataSize:SizeUInt;
FCapacity:SizeUInt;
@ -77,7 +77,7 @@ end;
procedure TDeque.PushBack(value:T);inline;
begin
if(FDataSize=FCapacity) then
if(FDataSize=FCapacity) then
IncreaseCapacity;
FData[(FStart+FDataSize)mod FCapacity]:=value;
inc(FDataSize);
@ -85,11 +85,11 @@ end;
procedure TDeque.PopFront();inline;
begin
if(FDataSize>0) then
if(FDataSize>0) then
begin
inc(FStart);
dec(FDataSize);
if(FStart=FCapacity) then
if(FStart=FCapacity) then
FStart:=0;
end;
end;
@ -167,7 +167,7 @@ begin
FCapacity:=FCapacity+FCapacity div 16;
SetLength(FData, FCapacity);
if (FStart>0) then
if (FStart>0) then
for i:=0 to FStart-1 do
FData[OldEnd+i]:=FData[i];
end;
@ -175,11 +175,11 @@ end;
procedure TDeque.Reserve(cap:SizeUInt);inline;
var i,OldEnd:SizeUInt;
begin
if(cap<FCapacity) then
if(cap<FCapacity) then
exit
else if(cap<=2*FCapacity) then
else if(cap<=2*FCapacity) then
IncreaseCapacity
else
else
begin
OldEnd:=FCapacity;
FCapacity:=cap;
@ -200,7 +200,7 @@ procedure TDeque.Insert(Position:SizeUInt; Value: T);inline;
var i:SizeUInt;
begin
pushBack(Value);
for i:=Size-1 downto Position+1 do
for i:=Size-1 downto Position+1 do
begin
Items[i]:=Items[i-1];
end;
@ -210,12 +210,13 @@ end;
procedure TDeque.Erase(Position:SizeUInt);inline;
var i:SizeUInt;
begin
if Position <= Size then
if Position <= Size then
begin
for i:=Position to Size-2 do
begin
Items[i]:=Items[i+1];
end;
if Size > 1 then
for i:=Position to Size-2 do
begin
Items[i]:=Items[i+1];
end;
popBack();
end;
end;

20
tests/webtbs/tw37382.pp Normal file
View File

@ -0,0 +1,20 @@
{$mode objfpc}
{$h+}
uses
GDeque;
type
TIntQueue = specialize TDeque<Integer>;
var
Q: TIntQueue;
begin
Q := TIntQueue.Create;
Q.Insert(0, 12345);
writeln('Size=',Q.Size);
Q.Erase(0);
writeln('Size=',Q.Size);
Q.Free;
end.