diff --git a/components/codetools/codetoolsstructs.pas b/components/codetools/codetoolsstructs.pas index c93283ba85..be4152b2b1 100644 --- a/components/codetools/codetoolsstructs.pas +++ b/components/codetools/codetoolsstructs.pas @@ -104,6 +104,21 @@ type end; PStringToStringTreeItem = ^TStringToStringTreeItem; + TStringToStringTree = class; + + { TStringToStringTreeEnumerator } + + TStringToStringTreeEnumerator = class + private + FTree: TStringToStringTree; + FCurrent: TAVLTreeNode; + function GetCurrent: PStringToStringTreeItem; + public + constructor Create(Tree: TStringToStringTree); + function MoveNext: boolean; + property Current: PStringToStringTreeItem read GetCurrent; + end; + { TStringToStringTree } TStringToStringTree = class @@ -138,6 +153,7 @@ type property CompareKeyItemFunc: TListSortCompare read FCompareKeyItemFunc; procedure SetCompareFuncs( const NewCompareItemsFunc, NewCompareKeyItemFunc: TListSortCompare); + function GetEnumerator: TStringToStringTreeEnumerator; end; { TFilenameToStringTree } @@ -328,6 +344,27 @@ begin Result:=CompareStr(AnsiString(Data1),AnsiString(Data2)); end; +{ TStringToStringTreeEnumerator } + +function TStringToStringTreeEnumerator.GetCurrent: PStringToStringTreeItem; +begin + Result:=PStringToStringTreeItem(FCurrent.Data); +end; + +constructor TStringToStringTreeEnumerator.Create(Tree: TStringToStringTree); +begin + FTree:=Tree; +end; + +function TStringToStringTreeEnumerator.MoveNext: boolean; +begin + if FCurrent=nil then + FCurrent:=FTree.Tree.FindLowest + else + FCurrent:=FTree.Tree.FindSuccessor(FCurrent); + Result:=FCurrent<>nil; +end; + { TStringTreeEnumerator } function TStringTreeEnumerator.GetCurrent: string; @@ -741,6 +778,11 @@ begin Tree.OnCompare:=NewCompareItemsFunc; end; +function TStringToStringTree.GetEnumerator: TStringToStringTreeEnumerator; +begin + Result:=TStringToStringTreeEnumerator.Create(Self); +end; + { TFilenameToStringTree } constructor TFilenameToStringTree.Create(CaseInsensitive: boolean);