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