fpc/rtl/objpas/classes/intf.inc
florian 11336b091d + TInterfaceList implemented
git-svn-id: trunk@1453 -
2005-10-17 21:39:46 +00:00

224 lines
4.8 KiB
PHP

{
This file is part of the Free Component Library (FCL)
Copyright (c) 2002 by the Free Pascal development team
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
constructor TInterfaceList.Create;
begin
inherited create;
FList:=TThreadList.Create;
end;
destructor TInterfaceList.Destroy;
begin
Clear;
FList.Free;
inherited Destroy;
end;
function TInterfaceList.Get(i : Integer) : IUnknown;
begin
FList.Locklist;
try
if (i<0) or (i>=FList.FList.Count) then
FList.FList.Error(SListIndexError,i);
result:=IUnknown(FList.FList.List^[i]);
finally
FList.UnlockList;
end;
end;
function TInterfaceList.GetCapacity : Integer;
begin
FList.Locklist;
try
result:=FList.FList.Capacity;
finally
FList.UnlockList;
end;
end;
function TInterfaceList.GetCount : Integer;
begin
FList.Locklist;
try
result:=FList.FList.Count;
finally
FList.UnlockList;
end;
end;
procedure TInterfaceList.Put(i : Integer;item : IUnknown);
begin
FList.Locklist;
try
if (i<0) or (i>=FList.FList.Count) then
FList.FList.Error(SListIndexError,i);
IUnknown(FList.FList.List^[i]):=item;
finally
FList.UnlockList;
end;
end;
procedure TInterfaceList.SetCapacity(NewCapacity : Integer);
begin
FList.Locklist;
try
FList.FList.Capacity:=NewCapacity;
finally
FList.UnlockList;
end;
end;
procedure TInterfaceList.SetCount(NewCount : Integer);
begin
FList.Locklist;
try
FList.FList.Count:=NewCount;
finally
FList.UnlockList;
end;
end;
procedure TInterfaceList.Clear;
var
i : SizeInt;
begin
FList.Locklist;
try
for i:=0 to FList.FList.Count-1 do
IUnknown(FList.FList.List^[i]):=nil;
FList.Clear;
finally
FList.UnlockList;
end;
end;
procedure TInterfaceList.Delete(index : Integer);
begin
FList.Locklist;
try
if (index<0) or (index>=FList.FList.Count) then
FList.FList.Error(SListIndexError,index);
IUnknown(FList.FList.List^[index]):=nil;
FList.FList.Delete(index);
finally
FList.UnlockList;
end;
end;
procedure TInterfaceList.Exchange(index1,index2 : Integer);
begin
FList.Locklist;
try
FList.FList.Exchange(index1,index2);
finally
FList.UnlockList;
end;
end;
function TInterfaceList.First : IUnknown;
begin
result:=Get(0);
end;
function TInterfaceList.IndexOf(item : IUnknown) : Integer;
begin
FList.Locklist;
try
result:=FList.FList.IndexOf(Pointer(Item));
finally
FList.UnlockList;
end;
end;
function TInterfaceList.Add(item : IUnknown) : Integer;
begin
FList.Locklist;
try
result:=FList.FList.Add(nil);
IUnknown(FList.FList.List^[result]):=item;
finally
FList.UnlockList;
end;
end;
procedure TInterfaceList.Insert(i : Integer;item : IUnknown);
begin
FList.Locklist;
try
FList.FList.Insert(i,nil);
IUnknown(FList.FList.List^[i]):=item;
finally
FList.UnlockList;
end;
end;
function TInterfaceList.Last : IUnknown;
begin
result:=Get(Count-1);
end;
function TInterfaceList.Remove(item : IUnknown): Integer;
begin
FList.Locklist;
try
result:=FList.FList.IndexOf(item);
if result>=0 then
begin
IUnknown(FList.FList.List^[result]):=nil;
FList.FList.Delete(result);
end;
finally
FList.UnlockList;
end;
end;
procedure TInterfaceList.Lock;
begin
FList.Locklist;
end;
procedure TInterfaceList.Unlock;
begin
FList.UnlockList;
end;
function TInterfaceList.Expand : TInterfaceList;
begin
FList.Locklist;
try
FList.FList.Expand;
result:=self;
finally
FList.UnlockList;
end;
end;