瀏覽代碼

* implemented reverse enumerator

master
Bergmann89 9 年之前
父節點
當前提交
54da341e2a
共有 1 個文件被更改,包括 31 次插入7 次删除
  1. +31
    -7
      uutlGenerics.pas

+ 31
- 7
uutlGenerics.pas 查看文件

@@ -84,13 +84,15 @@ type
public type
TEnumerator = class(TObject)
private
fReverse: Boolean;
fList: TFPList;
fPosition: Integer;
function GetCurrent: T;
public
property Current: T read GetCurrent;
function GetEnumerator: TEnumerator;
function MoveNext: Boolean;
constructor Create(const aList: TFPList);
constructor Create(const aList: TFPList; const aReverse: Boolean = false);
end;

private
@@ -111,9 +113,10 @@ type
procedure DeleteIntern(const aIndex: Integer; const aFreeItem: Boolean = true);

public
property OwnsObjects: Boolean read fOwnsObjects write fOwnsObjects;
property OwnsObjects: Boolean read fOwnsObjects write fOwnsObjects;

function GetEnumerator: TEnumerator;
function GetReverseEnumerator: TEnumerator;
procedure Clear;

constructor Create(const aOwnsObjects: Boolean = true);
@@ -703,19 +706,34 @@ begin
result := PListItem(fList[fPosition])^.data;
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlListBase.TEnumerator.GetEnumerator: TEnumerator;
begin
result := self;
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlListBase.TEnumerator.MoveNext: Boolean;
begin
inc(fPosition);
result := (fPosition < fList.Count)
if fReverse then begin
dec(fPosition);
result := (fPosition >= 0);
end else begin
inc(fPosition);
result := (fPosition < fList.Count)
end;
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
constructor TutlListBase.TEnumerator.Create(const aList: TFPList);
constructor TutlListBase.TEnumerator.Create(const aList: TFPList; const aReverse: Boolean);
begin
inherited Create;
fList := aList;
fPosition := -1;
fReverse := aReverse;
if fReverse then
fPosition := fList.Count
else
fPosition := -1;
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -808,7 +826,13 @@ end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlListBase.GetEnumerator: TEnumerator;
begin
result := TEnumerator.Create(fList);
result := TEnumerator.Create(fList, false);
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function TutlListBase.GetReverseEnumerator: TEnumerator;
begin
result := TEnumerator.Create(fList, true);
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Loading…
取消
儲存