mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-11 12:25:59 +02:00
* Introduce TFPSList checkindex (bug ID 30886)
git-svn-id: trunk@34872 -
This commit is contained in:
parent
5af24e94ae
commit
aa6a8acb72
@ -61,6 +61,7 @@ type
|
|||||||
procedure SetLast(const Value: Pointer);
|
procedure SetLast(const Value: Pointer);
|
||||||
function GetFirst: Pointer;
|
function GetFirst: Pointer;
|
||||||
procedure SetFirst(const Value: Pointer);
|
procedure SetFirst(const Value: Pointer);
|
||||||
|
Procedure CheckIndex(AIndex : Integer); inline;
|
||||||
public
|
public
|
||||||
constructor Create(AItemSize: Integer = sizeof(Pointer));
|
constructor Create(AItemSize: Integer = sizeof(Pointer));
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -466,16 +467,14 @@ end;
|
|||||||
|
|
||||||
function TFPSList.Get(Index: Integer): Pointer;
|
function TFPSList.Get(Index: Integer): Pointer;
|
||||||
begin
|
begin
|
||||||
if (Index < 0) or (Index >= FCount) then
|
CheckIndex(Index);
|
||||||
RaiseIndexError(Index);
|
|
||||||
Result := InternalItems[Index];
|
Result := InternalItems[Index];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFPSList.Put(Index: Integer; Item: Pointer);
|
procedure TFPSList.Put(Index: Integer; Item: Pointer);
|
||||||
var p : Pointer;
|
var p : Pointer;
|
||||||
begin
|
begin
|
||||||
if (Index < 0) or (Index >= FCount) then
|
CheckIndex(Index);
|
||||||
RaiseIndexError(Index);
|
|
||||||
p:=InternalItems[Index];
|
p:=InternalItems[Index];
|
||||||
if assigned(p) then
|
if assigned(p) then
|
||||||
DeRef(p);
|
DeRef(p);
|
||||||
@ -533,6 +532,14 @@ begin
|
|||||||
Inc(FCount);
|
Inc(FCount);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TFPSList.CheckIndex(AIndex : Integer);
|
||||||
|
|
||||||
|
begin
|
||||||
|
if (AIndex < 0) or (AIndex >= FCount) then
|
||||||
|
Error(SListIndexError, AIndex);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TFPSList.Clear;
|
procedure TFPSList.Clear;
|
||||||
begin
|
begin
|
||||||
if Assigned(FList) then
|
if Assigned(FList) then
|
||||||
@ -546,8 +553,7 @@ procedure TFPSList.Delete(Index: Integer);
|
|||||||
var
|
var
|
||||||
ListItem: Pointer;
|
ListItem: Pointer;
|
||||||
begin
|
begin
|
||||||
if (Index < 0) or (Index >= FCount) then
|
CheckIndex(Index);
|
||||||
Error(SListIndexError, Index);
|
|
||||||
Dec(FCount);
|
Dec(FCount);
|
||||||
ListItem := InternalItems[Index];
|
ListItem := InternalItems[Index];
|
||||||
Deref(ListItem);
|
Deref(ListItem);
|
||||||
@ -589,10 +595,8 @@ end;
|
|||||||
|
|
||||||
procedure TFPSList.Exchange(Index1, Index2: Integer);
|
procedure TFPSList.Exchange(Index1, Index2: Integer);
|
||||||
begin
|
begin
|
||||||
if ((Index1 >= FCount) or (Index1 < 0)) then
|
CheckIndex(Index1);
|
||||||
Error(SListIndexError, Index1);
|
CheckIndex(Index2);
|
||||||
if ((Index2 >= FCount) or (Index2 < 0)) then
|
|
||||||
Error(SListIndexError, Index2);
|
|
||||||
InternalExchange(Index1, Index2);
|
InternalExchange(Index1, Index2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -681,10 +685,8 @@ var
|
|||||||
CurItem, NewItem, TmpItem, Src, Dest: Pointer;
|
CurItem, NewItem, TmpItem, Src, Dest: Pointer;
|
||||||
MoveCount: Integer;
|
MoveCount: Integer;
|
||||||
begin
|
begin
|
||||||
if (CurIndex < 0) or (CurIndex >= Count) then
|
CheckIndex(CurIndex);
|
||||||
Error(SListIndexError, CurIndex);
|
CheckIndex(NewIndex);
|
||||||
if (NewIndex < 0) or (NewIndex >= Count) then
|
|
||||||
Error(SListIndexError, NewIndex);
|
|
||||||
if CurIndex = NewIndex then
|
if CurIndex = NewIndex then
|
||||||
exit;
|
exit;
|
||||||
CurItem := InternalItems[CurIndex];
|
CurItem := InternalItems[CurIndex];
|
||||||
|
Loading…
Reference in New Issue
Block a user