mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-18 10:59:44 +02:00
avl_tree: added enumerator
git-svn-id: trunk@19032 -
This commit is contained in:
parent
51e61b5df7
commit
14d13bc004
@ -48,6 +48,20 @@ type
|
||||
function NewNode: TAVLTreeNode; virtual; abstract;
|
||||
end;
|
||||
|
||||
TAVLTree = class;
|
||||
|
||||
{ TAVLTreeNodeEnumerator }
|
||||
|
||||
TAVLTreeNodeEnumerator = class
|
||||
private
|
||||
FTree: TAVLTree;
|
||||
FCurrent: TAVLTreeNode;
|
||||
public
|
||||
constructor Create(Tree: TAVLTree);
|
||||
function MoveNext: Boolean;
|
||||
property Current: TAVLTreeNode read FCurrent;
|
||||
end;
|
||||
|
||||
TAVLTree = class
|
||||
private
|
||||
FOnCompare: TListSortCompare;
|
||||
@ -98,6 +112,7 @@ type
|
||||
constructor Create(OnCompareMethod: TListSortCompare);
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
function GetEnumerator: TAVLTreeNodeEnumerator;
|
||||
end;
|
||||
|
||||
TAVLTreeNodeMemManager = class(TBaseAVLTreeNodeManager)
|
||||
@ -136,6 +151,22 @@ begin
|
||||
else Result:=0;
|
||||
end;
|
||||
|
||||
{ TAVLTreeNodeEnumerator }
|
||||
|
||||
constructor TAVLTreeNodeEnumerator.Create(Tree: TAVLTree);
|
||||
begin
|
||||
FTree:=Tree;
|
||||
end;
|
||||
|
||||
function TAVLTreeNodeEnumerator.MoveNext: Boolean;
|
||||
begin
|
||||
if FCurrent=nil then
|
||||
FCurrent:=FTree.FindLowest
|
||||
else
|
||||
FCurrent:=FTree.FindSuccessor(FCurrent);
|
||||
Result:=FCurrent<>nil;
|
||||
end;
|
||||
|
||||
{ TAVLTree }
|
||||
|
||||
function TAVLTree.Add(Data: Pointer): TAVLTreeNode;
|
||||
@ -649,6 +680,11 @@ begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
function TAVLTree.GetEnumerator: TAVLTreeNodeEnumerator;
|
||||
begin
|
||||
Result:=TAVLTreeNodeEnumerator.Create(Self);
|
||||
end;
|
||||
|
||||
function TAVLTree.Find(Data: Pointer): TAVLTreeNode;
|
||||
var Comp: integer;
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user