avl_tree: added enumerator

git-svn-id: trunk@19032 -
This commit is contained in:
Mattias Gaertner 2011-09-08 17:53:31 +00:00
parent 51e61b5df7
commit 14d13bc004

View File

@ -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