mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-14 15:09:14 +02:00
+ TInterfaceList implemented
git-svn-id: trunk@1453 -
This commit is contained in:
parent
4db863d076
commit
11336b091d
@ -13,101 +13,211 @@
|
||||
|
||||
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;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user