Стартовый пул
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
unit nsEnumerators;
|
||||
|
||||
{$MACRO on}
|
||||
|
||||
{$IFDEF Windows}
|
||||
{$DEFINE extdecl:=stdcall}
|
||||
{$ELSE Windows}
|
||||
{$DEFINE extdecl:=cdecl}
|
||||
{$ENDIF}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
nsXPCOM, nsTypes, Classes;
|
||||
|
||||
function NewSimpleEnumeratorFromTInterfaceList(AList: TInterfaceList;
|
||||
AOwn: Boolean = True): nsISimpleEnumerator;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
nsXPCOM_std19, nsError;
|
||||
|
||||
type
|
||||
TSimpleEnumeratorWithInterfaceList = class(TInterfacedObject,
|
||||
nsISimpleEnumerator_std19)
|
||||
FList: TInterfaceList;
|
||||
FOwn: Boolean;
|
||||
FIndex: Integer;
|
||||
destructor Destroy; override;
|
||||
function HasMoreElements(out _retval: PRBool): nsresult; extdecl;
|
||||
function GetNext(out _retval: nsISupports_std19): nsresult; extdecl;
|
||||
end;
|
||||
|
||||
function NewSimpleEnumeratorFromTInterfaceList(AList: TInterfaceList;
|
||||
AOwn: Boolean = True): nsISimpleEnumerator;
|
||||
var
|
||||
enum: TSimpleEnumeratorWithInterfaceList;
|
||||
begin
|
||||
enum := TSimpleEnumeratorWithInterfaceList.Create;
|
||||
enum.FList := AList;
|
||||
enum.FOwn := AOwn;
|
||||
Result := enum as nsISimpleEnumerator;
|
||||
end;
|
||||
|
||||
destructor TSimpleEnumeratorWithInterfaceList.Destroy;
|
||||
begin
|
||||
if FOwn then
|
||||
FList.Free;
|
||||
|
||||
inherited;
|
||||
end;
|
||||
|
||||
function TSimpleEnumeratorWithInterfaceList.HasMoreElements(out _retval
|
||||
: PRBool): nsresult;
|
||||
begin
|
||||
_retval := (FIndex < FList.Count);
|
||||
Result := NS_OK;
|
||||
end;
|
||||
|
||||
function TSimpleEnumeratorWithInterfaceList.GetNext(out _retval
|
||||
: nsISupports_std19): nsresult;
|
||||
begin
|
||||
if (FIndex < FList.Count) then
|
||||
begin
|
||||
Result := FList.Items[FIndex].QueryInterface(nsISupports_std19, _retval);
|
||||
Inc(FIndex);
|
||||
end else
|
||||
Result := NS_ERROR_FAILURE;
|
||||
end;
|
||||
|
||||
end.
|
Reference in New Issue
Block a user