diff --git a/.gitattributes b/.gitattributes index 2b91b410c6..a2d73fe4ab 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3007,6 +3007,7 @@ components/lazutils/laz2_xmlread.pas svneol=native#text/pascal components/lazutils/laz2_xmlutils.pas svneol=native#text/pascal components/lazutils/laz2_xmlwrite.pas svneol=native#text/pascal components/lazutils/laz2_xpath.pas svneol=native#text/plain +components/lazutils/laz_avl_tree.pp svneol=native#text/pascal components/lazutils/laz_dom.pas svneol=native#text/pascal components/lazutils/laz_xmlcfg.pas svneol=native#text/pascal components/lazutils/laz_xmlread.pas svneol=native#text/pascal diff --git a/components/codetools/basiccodetools.pas b/components/codetools/basiccodetools.pas index fe3533cb58..b163b4493e 100644 --- a/components/codetools/basiccodetools.pas +++ b/components/codetools/basiccodetools.pas @@ -39,8 +39,11 @@ unit BasicCodeTools; interface uses - Classes, SysUtils, AVL_Tree, SourceLog, KeywordFuncLists, FileProcs, - LazFileUtils, LazUTF8, strutils; + Classes, SysUtils, strutils, Laz_AVL_Tree, + // LazUtils + LazFileUtils, LazUTF8, + // Codetools + SourceLog, KeywordFuncLists, FileProcs; //---------------------------------------------------------------------------- { These functions are used by the codetools } diff --git a/components/codetools/cachecodetools.pas b/components/codetools/cachecodetools.pas index 92337df288..5bda5c5fec 100644 --- a/components/codetools/cachecodetools.pas +++ b/components/codetools/cachecodetools.pas @@ -30,9 +30,10 @@ unit CacheCodeTools; interface uses - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, + // Codetools FileProcs, CodeCache, KeywordFuncLists, CustomCodeTool, - BasicCodeTools, FindDeclarationTool, AVL_Tree; + BasicCodeTools, FindDeclarationTool; type diff --git a/components/codetools/ccodeparsertool.pas b/components/codetools/ccodeparsertool.pas index 9d09d214a4..03ec271fdf 100644 --- a/components/codetools/ccodeparsertool.pas +++ b/components/codetools/ccodeparsertool.pas @@ -111,12 +111,12 @@ uses MemCheck, {$ENDIF} // RTL + FCL - Classes, SysUtils, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, // CodeTools - FileProcs, CodeToolsStructs, BasicCodeTools, KeywordFuncLists, LinkScanner, - CodeCache, CodeTree, NonPascalCodeTools, + FileProcs, BasicCodeTools, KeywordFuncLists, CodeCache, CodeTree, + NonPascalCodeTools, CodeToolsStructs, // LazUtils - LazFileUtils; + LazFileUtils, AvgLvlTree; type TCCodeNodeDesc = word; @@ -352,7 +352,7 @@ type LinkCount: integer; Links: PCHFileLink; LinksCapacity: integer; - Macros: TStringToStringTree; + Macros: TIdentStringToStringTree; constructor Create; destructor Destroy; override; procedure Clear; @@ -493,7 +493,7 @@ end; constructor TCHeaderFileMerger.Create; begin - Macros:=TStringToStringTree.Create(true); + Macros:=TIdentStringToStringTree.Create(true); end; destructor TCHeaderFileMerger.Destroy; @@ -558,7 +558,7 @@ var p: LongInt; MacroValue: string; MacroNode: TAVLTreeNode; - MacroItem: PStringToStringTreeItem; + MacroItem: PStringToStringItem; Src: String; BracketLvl: Integer; begin @@ -592,7 +592,7 @@ var MacroNode:=Macros.FindNodeWithIdentifierAsPrefix(StartP); if MacroNode<>nil then begin // macro found - MacroItem:=PStringToStringTreeItem(MacroNode.Data); + MacroItem:=PStringToStringItem(MacroNode.Data); MacroValue:=MacroItem^.Value; //debugln(['Append MacroName=',MacroItem^.Name,' Src=',GetIdentifier(@Src[AtomStart]),' Value=',dbgstr(MacroValue)]); // write source in front of macro diff --git a/components/codetools/changedeclarationtool.pas b/components/codetools/changedeclarationtool.pas index c542515916..3d85fa2727 100644 --- a/components/codetools/changedeclarationtool.pas +++ b/components/codetools/changedeclarationtool.pas @@ -31,8 +31,9 @@ unit ChangeDeclarationTool; interface uses - Classes, SysUtils, AVL_Tree, contnrs, CodeAtom, CodeCache, - FileProcs, CodeTree, ExtractProcTool, FindDeclarationTool, + Classes, SysUtils, Laz_AVL_Tree, contnrs, + // Codetools + CodeAtom, CodeCache, FileProcs, CodeTree, ExtractProcTool, FindDeclarationTool, BasicCodeTools, KeywordFuncLists, LinkScanner, SourceChanger; type diff --git a/components/codetools/codeatom.pas b/components/codetools/codeatom.pas index bd5cc7a9fc..f60973b76b 100644 --- a/components/codetools/codeatom.pas +++ b/components/codetools/codeatom.pas @@ -39,7 +39,9 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, FileProcs, AVL_Tree, KeywordFuncLists; + SysUtils, + // Codetools + FileProcs, KeywordFuncLists; type TCommonAtomFlag = ( diff --git a/components/codetools/codebeautifier.pas b/components/codetools/codebeautifier.pas index 59d47aec00..ff403ad6f6 100644 --- a/components/codetools/codebeautifier.pas +++ b/components/codetools/codebeautifier.pas @@ -109,8 +109,10 @@ interface {$ENDIF} uses - Classes, SysUtils, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, + // Codetools FileProcs, KeywordFuncLists, CodeCache, BasicCodeTools, + // LazUtils LazUtilities; type diff --git a/components/codetools/codecache.pas b/components/codetools/codecache.pas index 42b1a49ead..580f56919b 100644 --- a/components/codetools/codecache.pas +++ b/components/codetools/codecache.pas @@ -37,8 +37,11 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, SourceLog, LinkScanner, FileProcs, LazFileUtils, LazFileCache, - DirectoryCacher, Avl_Tree, Laz2_XMLCfg, LazDbgLog; + Classes, SysUtils, Laz_Avl_Tree, + // Codetools + SourceLog, LinkScanner, FileProcs, DirectoryCacher, + // LazUtils + LazFileUtils, LazFileCache, Laz2_XMLCfg, LazDbgLog; const IncludeLinksFileVersion = 2; @@ -1169,21 +1172,9 @@ end; procedure TCodeCache.ConsistencyCheck; // 0 = ok var ANode: TAVLTreeNode; - {$IF FPC_FULLVERSION<30101} - CurResult: LongInt; - {$ENDIF} begin - {$IF FPC_FULLVERSION<30101} - CurResult:=FItems.ConsistencyCheck; - if CurResult<>0 then - RaiseCatchableException(IntToStr(CurResult)); - CurResult:=FIncludeLinks.ConsistencyCheck; - if CurResult<>0 then - RaiseCatchableException(IntToStr(CurResult)); - {$ELSE} FItems.ConsistencyCheck; FIncludeLinks.ConsistencyCheck; - {$ENDIF} ANode:=FItems.FindLowest; while ANode<>nil do begin if ANode.Data=nil then diff --git a/components/codetools/codecompletiontool.pas b/components/codetools/codecompletiontool.pas index a830a56aae..a0f8729086 100644 --- a/components/codetools/codecompletiontool.pas +++ b/components/codetools/codecompletiontool.pas @@ -85,7 +85,7 @@ uses MemCheck, {$ENDIF} // RTL + FCL - Classes, SysUtils, contnrs, AVL_Tree, + Classes, SysUtils, contnrs, Laz_AVL_Tree, // CodeTools FileProcs, CodeToolsStrConsts, StdCodeTools, CodeTree, CodeAtom, CodeCache, CustomCodeTool, PascalParserTool, MethodJumpTool, @@ -95,7 +95,7 @@ uses CodeCompletionTemplater, {$ENDIF} // LazUtils - LazFileUtils, LazDbgLog; + LazFileUtils, LazDbgLog, AvgLvlTree; type TNewClassPart = (ncpPrivateProcs, ncpPrivateVars, diff --git a/components/codetools/codegraph.pas b/components/codetools/codegraph.pas index 557d8d462f..834735dff7 100644 --- a/components/codetools/codegraph.pas +++ b/components/codetools/codegraph.pas @@ -30,7 +30,9 @@ unit CodeGraph; interface uses - Classes, SysUtils, CodeTree, FileProcs, AVL_Tree; + Classes, SysUtils, Laz_AVL_Tree, + // Codetools + CodeTree, FileProcs; type @@ -921,15 +923,8 @@ begin e(''); if Edges=nil then e(''); - {$IF FPC_FULLVERSION<30101} - if Nodes.ConsistencyCheck<>0 then - e(''); - if Edges.ConsistencyCheck<>0 then - e(''); - {$ELSE} Nodes.ConsistencyCheck; Edges.ConsistencyCheck; - {$ENDIF} if AVLTreeHasDoubles(Nodes)<>nil then e(''); if AVLTreeHasDoubles(Edges)<>nil then @@ -939,12 +934,7 @@ begin while AVLNode<>nil do begin GraphNode:=TCodeGraphNode(AVLNode.Data); if GraphNode.InTree<>nil then begin - {$IF FPC_FULLVERSION<30101} - if GraphNode.InTree.ConsistencyCheck<>0 then - e(''); - {$ELSE} GraphNode.InTree.ConsistencyCheck; - {$ENDIF} if AVLTreeHasDoubles(GraphNode.InTree)<>nil then e(''); EdgeAVLNode:=GraphNode.InTree.FindLowest; @@ -958,12 +948,7 @@ begin end; end; if GraphNode.OutTree<>nil then begin - {$IF FPC_FULLVERSION<30101} - if GraphNode.InTree.ConsistencyCheck<>0 then - e(''); - {$ELSE} GraphNode.InTree.ConsistencyCheck; - {$ENDIF} if AVLTreeHasDoubles(GraphNode.OutTree)<>nil then e(''); EdgeAVLNode:=GraphNode.OutTree.FindLowest; diff --git a/components/codetools/codeindex.pas b/components/codetools/codeindex.pas index 7f1c39a038..7ee15c6fdb 100644 --- a/components/codetools/codeindex.pas +++ b/components/codetools/codeindex.pas @@ -30,8 +30,11 @@ unit CodeIndex; interface uses - SysUtils, AVL_Tree, CodeTree, CodeCache, - LazFileUtils, StdCodeTools, CodeToolsStructs; + SysUtils, Laz_AVL_Tree, + // LazUtils + LazFileUtils, + // Codetools + CodeTree, CodeCache, StdCodeTools, CodeToolsStructs; type TCodeBrowserUnit = class; diff --git a/components/codetools/codetemplatestool.pas b/components/codetools/codetemplatestool.pas index 4e5e224588..c555836589 100644 --- a/components/codetools/codetemplatestool.pas +++ b/components/codetools/codetemplatestool.pas @@ -36,9 +36,10 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, FileProcs, CodeTree, CodeAtom, CodeCache, KeywordFuncLists, - LinkScanner, AVL_Tree, SourceChanger, - CustomCodeTool, PascalParserTool, CodeToolsStructs, StdCodeTools; + Classes, SysUtils, + // Codetools + FileProcs, CodeTree, CodeCache, KeywordFuncLists, LinkScanner, BasicCodeTools, + SourceChanger, PascalParserTool, StdCodeTools; type TCodeTemplateSyntax = ( diff --git a/components/codetools/codetoolmanager.pas b/components/codetools/codetoolmanager.pas index 0a7d8a63dd..6131d3c97f 100644 --- a/components/codetools/codetoolmanager.pas +++ b/components/codetools/codetoolmanager.pas @@ -40,15 +40,18 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, contnrs, TypInfo, types, FileProcs, LazFileUtils, - BasicCodeTools, CodeToolsStrConsts, LazFileCache, LazMethodList, + Classes, SysUtils, contnrs, TypInfo, types, Laz_AVL_Tree, + // LazUtils + LazFileUtils, LazFileCache, LazMethodList, LazDbgLog, AvgLvlTree, + // Codetools + FileProcs, BasicCodeTools, CodeToolsStrConsts, EventCodeTool, CodeTree, CodeAtom, SourceChanger, DefineTemplates, CodeCache, ExprEval, LinkScanner, KeywordFuncLists, FindOverloads, CodeBeautifier, - FindDeclarationCache, DirectoryCacher, AVL_Tree, + FindDeclarationCache, DirectoryCacher, PPUCodeTools, LFMTrees, DirectivesTree, CodeCompletionTemplater, PascalParserTool, CodeToolsConfig, CustomCodeTool, FindDeclarationTool, IdentCompletionTool, StdCodeTools, ResourceCodeTool, CodeToolsStructs, - CTUnitGraph, ExtractProcTool, LazDbgLog, CodeCompletionTool; + CTUnitGraph, ExtractProcTool; type TCodeToolManager = class; @@ -6303,7 +6306,7 @@ var UnitSetCache: TFPCUnitSetCache; aConfigCache: TFPCTargetConfigCache; Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; begin UnitSetCache:=FPCDefinesCache.FindUnitSetWithID(UnitSet,Changed,false); if UnitSetCache=nil then begin @@ -6318,7 +6321,7 @@ begin if (aConfigCache=nil) or (aConfigCache.Units=nil) then exit; Node:=aConfigCache.Units.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Iterate(Item^.Value); Node:=aConfigCache.Units.Tree.FindSuccessor(Node); end; @@ -6353,10 +6356,6 @@ begin end; procedure TCodeToolManager.ConsistencyCheck; -{$IF FPC_FULLVERSION<30101} -var - CurResult: LongInt; -{$ENDIF} begin if FCurCodeTool<>nil then begin FCurCodeTool.ConsistencyCheck; @@ -6366,17 +6365,8 @@ begin SourceCache.ConsistencyCheck; GlobalValues.ConsistencyCheck; SourceChangeCache.ConsistencyCheck; - {$IF FPC_FULLVERSION<30101} - CurResult:=FPascalTools.ConsistencyCheck; - if CurResult<>0 then - RaiseCatchableException(IntToStr(CurResult)); - CurResult:=FDirectivesTools.ConsistencyCheck; - if CurResult<>0 then - RaiseCatchableException(IntToStr(CurResult)); - {$ELSE} FPascalTools.ConsistencyCheck; FDirectivesTools.ConsistencyCheck; - {$ENDIF} end; procedure TCodeToolManager.WriteDebugReport(WriteTool, diff --git a/components/codetools/codetoolscfgscript.pas b/components/codetools/codetoolscfgscript.pas index 74efce2fbd..e8cafa2924 100644 --- a/components/codetools/codetoolscfgscript.pas +++ b/components/codetools/codetoolscfgscript.pas @@ -53,8 +53,9 @@ unit CodeToolsCfgScript; interface uses - Classes, SysUtils, BasicCodeTools, AVL_Tree, KeywordFuncLists, FileProcs, - typinfo, CodeToolsStrConsts; + Classes, SysUtils, typinfo, Laz_AVL_Tree, + // Codetools + BasicCodeTools, KeywordFuncLists, FileProcs, CodeToolsStrConsts; type TCTCSValueType = ( diff --git a/components/codetools/codetoolsfpcmsgs.pas b/components/codetools/codetoolsfpcmsgs.pas index 57eccbd0f3..d429aca952 100644 --- a/components/codetools/codetoolsfpcmsgs.pas +++ b/components/codetools/codetoolsfpcmsgs.pas @@ -42,7 +42,11 @@ unit CodeToolsFPCMsgs; interface uses - Classes, SysUtils, FileProcs, LazUTF8Classes, AVL_Tree; + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + LazUTF8Classes, + // Codetools + FileProcs; type TfmiSpecialItem = ( diff --git a/components/codetools/codetoolsstructs.pas b/components/codetools/codetoolsstructs.pas index 413f9fbb15..641edd8b4a 100644 --- a/components/codetools/codetoolsstructs.pas +++ b/components/codetools/codetoolsstructs.pas @@ -32,9 +32,12 @@ unit CodeToolsStructs; interface uses - Classes, SysUtils, FileProcs, LazFileUtils, LazUtilities, LazDbgLog, - AVL_Tree, BasicCodeTools; - + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + LazUtilities, LazDbgLog, AvgLvlTree, + // Codetools + BasicCodeTools; + type TResourcestringInsertPolicy = ( rsipNone, // do not add/insert @@ -110,150 +113,13 @@ type property Items[Key: Pointer]: Pointer read GetItems write SetItems; default; end; - TStringMap = class; + { TIdentStringToStringTree } - TStringMapItem = record - Name: string; - end; - PStringMapItem = ^TStringMapItem; - - { TStringMapEnumerator } - - TStringMapEnumerator = class - protected - FTree: TAVLTree; - FCurrent: TAVLTreeNode; - public - constructor Create(Tree: TAVLTree); - function MoveNext: boolean; - // "Current" is implemented by the descendant classes - end; - - { TStringMap } - - TStringMap = class + TIdentStringToStringTree = class(TStringToStringTree) private - FCompareKeyItemFunc: TListSortCompare; - FTree: TAVLTree;// tree of PStringMapItem - FCaseSensitive: boolean; - function GetCompareItemsFunc: TListSortCompare; protected - procedure DisposeItem(p: PStringMapItem); virtual; - function ItemsAreEqual(p1, p2: PStringMapItem): boolean; virtual; - function CreateCopy(Src: PStringMapItem): PStringMapItem; virtual; public - constructor Create(TheCaseSensitive: boolean); - destructor Destroy; override; - procedure Clear; virtual; - function Contains(const s: string): boolean; - function ContainsIdentifier(P: PChar): boolean; function FindNodeWithIdentifierAsPrefix(P: PChar): TAVLTreeNode; - procedure GetNames(List: TStrings); - procedure Remove(const Name: string); virtual; - property CaseSensitive: boolean read FCaseSensitive; - property Tree: TAVLTree read FTree; // tree of PStringMapItem - function GetNodeData(AVLNode: TAVLTreeNode): PStringMapItem; inline; - function Count: integer; - function FindNode(const s: string): TAVLTreeNode; - function Equals(OtherTree: TStringMap): boolean; reintroduce; - procedure Assign(Source: TStringMap); virtual; - procedure WriteDebugReport; virtual; - function CalcMemSize: PtrUint; virtual; - property CompareItemsFunc: TListSortCompare read GetCompareItemsFunc; - property CompareKeyItemFunc: TListSortCompare read FCompareKeyItemFunc; - procedure SetCompareFuncs( - const NewCompareItemsFunc, NewCompareKeyItemFunc: TListSortCompare); - end; - - TStringToStringTreeItem = record - Name: string; - Value: string; - end; - PStringToStringTreeItem = ^TStringToStringTreeItem; - - TStringToStringTree = class; - - { TStringToStringTreeEnumerator } - - TStringToStringTreeEnumerator = class(TStringMapEnumerator) - private - function GetCurrent: PStringToStringTreeItem; - public - property Current: PStringToStringTreeItem read GetCurrent; - end; - - { TStringToStringTree } - - TStringToStringTree = class(TStringMap) - private - function GetStrings(const s: string): string; - procedure SetStrings(const s: string; const AValue: string); - protected - procedure DisposeItem(p: PStringMapItem); override; - function ItemsAreEqual(p1, p2: PStringMapItem): boolean; override; - function CreateCopy(Src: PStringMapItem): PStringMapItem; override; - public - function GetString(const Name: string; out Value: string): boolean; - procedure Add(const Name, Value: string); virtual; - procedure AddNames(List: TStrings); - property Strings[const s: string]: string read GetStrings write SetStrings; default; - function GetNodeData(AVLNode: TAVLTreeNode): PStringToStringTreeItem; inline; - function AsText: string; - procedure WriteDebugReport; override; - function CalcMemSize: PtrUint; override; - function GetEnumerator: TStringToStringTreeEnumerator; - end; - - TStringToPointerTree = class; - - TStringToPointerTreeItem = record - Name: string; - Value: Pointer; - end; - PStringToPointerTreeItem = ^TStringToPointerTreeItem; - - { TStringToPointerTreeEnumerator } - - TStringToPointerTreeEnumerator = class(TStringMapEnumerator) - private - function GetCurrent: PStringToPointerTreeItem; - public - property Current: PStringToPointerTreeItem read GetCurrent; - end; - - { TStringToPointerTree - Tree contains PStringToPointerTreeItem } - - TStringToPointerTree = class(TStringMap) - private - FFreeValues: boolean; - function GetItems(const s: string): Pointer; - procedure SetItems(const s: string; AValue: Pointer); - protected - procedure DisposeItem(p: PStringMapItem); override; - function ItemsAreEqual(p1, p2: PStringMapItem): boolean; override; - function CreateCopy(Src: PStringMapItem): PStringMapItem; override; - public - function GetItem(const Name: string; out Value: Pointer): boolean; - procedure Add(const Name: string; const Value: Pointer); virtual; - property Items[const s: string]: Pointer read GetItems write SetItems; default; - function GetNodeData(AVLNode: TAVLTreeNode): PStringToPointerTreeItem; inline; - procedure Assign(Source: TStringMap); override; - function GetEnumerator: TStringToPointerTreeEnumerator; - property FreeValues: boolean read FFreeValues write FFreeValues; - end; - - { TFilenameToStringTree } - - TFilenameToStringTree = class(TStringToStringTree) - public - constructor Create(CaseInsensitive: boolean); // false = system default - end; - - { TFilenameToPointerTree } - - TFilenameToPointerTree = class(TStringToPointerTree) - public - constructor Create(CaseInsensitive: boolean); // false = system default end; TStringTree = class; @@ -308,30 +174,27 @@ function ComparePointerToPointerItems(Data1, Data2: Pointer): integer; function ComparePointerAndP2PItem(Key, Data: Pointer): integer; // case sensitive -function CompareStringToStringItems(Data1, Data2: Pointer): integer; -function CompareStringAndStringToStringTreeItem(Key, Data: Pointer): integer; -function CompareIdentifierAndStringToStringTreeItem(Identifier, Data: Pointer): integer; +//function CompareStringToStringItems(Data1, Data2: Pointer): integer; +//function CompareStringAndStringToStringTreeItem(Key, Data: Pointer): integer; +//function CompareIdentifierAndStringToStringTreeItem(Identifier, Data: Pointer): integer; function CompareIdentifierPrefixAndStringToStringTreeItem(Identifier, Data: Pointer): integer; // case insensitive -function CompareStringToStringItemsI(Data1, Data2: Pointer): integer; -function CompareStringAndStringToStringTreeItemI(Key, Data: Pointer): integer; -function CompareIdentifierAndStringToStringTreeItemI(Identifier, Data: Pointer): integer; +//function CompareStringToStringItemsI(Data1, Data2: Pointer): integer; +//function CompareStringAndStringToStringTreeItemI(Key, Data: Pointer): integer; +//function CompareIdentifierAndStringToStringTreeItemI(Identifier, Data: Pointer): integer; function CompareIdentifierPrefixAndStringToStringTreeItemI(Identifier, Data: Pointer): integer; -function CompareFilenameToStringItems(Data1, Data2: Pointer): integer; -function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer): integer; +//function CompareFilenameToStringItems(Data1, Data2: Pointer): integer; +//function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer): integer; -function CompareFilenameToStringItemsI(Data1, Data2: Pointer): integer; -function CompareFilenameAndFilenameToStringTreeItemI(Key, Data: Pointer): integer; +//function CompareFilenameToStringItemsI(Data1, Data2: Pointer): integer; +//function CompareFilenameAndFilenameToStringTreeItemI(Key, Data: Pointer): integer; function CompareAnsiStringPtrs(Data1, Data2: Pointer): integer; -{$IF FPC_FULLVERSION<20601} - {$DEFINE EnableAVLFindPointerFix} -{$ENDIF} -function AVLFindPointer(Tree: TAVLTree; Data: Pointer): TAVLTreeNode; {$IFNDEF EnableAVLFindPointerFix}inline;{$ENDIF} -procedure AVLRemovePointer(Tree: TAVLTree; Data: Pointer); {$IFNDEF EnableAVLFindPointerFix}inline;{$ENDIF} +function AVLFindPointer(Tree: TAVLTree; Data: Pointer): TAVLTreeNode; inline; +procedure AVLRemovePointer(Tree: TAVLTree; Data: Pointer); inline; implementation @@ -349,7 +212,7 @@ var begin Result:=ComparePointers(Key,P2PItem^.Key); end; - +{ function CompareStringToStringItems(Data1, Data2: Pointer): integer; begin Result:=CompareStr(PStringToStringTreeItem(Data1)^.Name, @@ -393,16 +256,15 @@ begin Result:=-1; end; end; - -function CompareIdentifierPrefixAndStringToStringTreeItem(Identifier, - Data: Pointer): integer; +} +function CompareIdentifierPrefixAndStringToStringTreeItem(Identifier, Data: Pointer): integer; var Id: PChar absolute Identifier; - Item: PStringToStringTreeItem absolute Data; + Item: PStringToStringItem absolute Data; begin Result:=-CompareIdentifiersCaseSensitive(Id,PChar(Item^.Name)); end; - +{ function CompareStringAndStringToStringTreeItemI(Key, Data: Pointer): integer; begin Result:=CompareText(String(Key),PStringToStringTreeItem(Data)^.Name); @@ -428,18 +290,16 @@ begin Result:=-1; end; end; - -function CompareIdentifierPrefixAndStringToStringTreeItemI(Identifier, - Data: Pointer): integer; +} +function CompareIdentifierPrefixAndStringToStringTreeItemI(Identifier, Data: Pointer): integer; var Id: PChar absolute Identifier; - Item: PStringToStringTreeItem absolute Data; + Item: PStringToStringItem absolute Data; begin Result:=-CompareIdentifiers(Id,PChar(Item^.Name)); end; - -function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer - ): integer; +{ +function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer): integer; begin Result:=CompareFilenames(String(Key),PStringToStringTreeItem(Data)^.Name); end; @@ -450,13 +310,12 @@ begin PStringToStringTreeItem(Data2)^.Name); end; -function CompareFilenameAndFilenameToStringTreeItemI(Key, Data: Pointer - ): integer; +function CompareFilenameAndFilenameToStringTreeItemI(Key, Data: Pointer): integer; begin Result:=CompareFilenamesIgnoreCase(String(Key), PStringToStringTreeItem(Data)^.Name); end; - +} function CompareAnsiStringPtrs(Data1, Data2: Pointer): integer; begin Result:=CompareStr(AnsiString(Data1),AnsiString(Data2)); @@ -464,32 +323,12 @@ end; function AVLFindPointer(Tree: TAVLTree; Data: Pointer): TAVLTreeNode; begin - {$IFDEF EnableAVLFindPointerFix} - Result:=Tree.FindLeftMost(Data); - while (Result<>nil) do begin - if Result.Data=Data then break; - Result:=Tree.FindSuccessor(Result); - if Result=nil then exit; - if Tree.OnCompare(Data,Result.Data)<>0 then exit(nil); - end; - {$ELSE} Result:=Tree.FindPointer(Data); - {$ENDIF} end; procedure AVLRemovePointer(Tree: TAVLTree; Data: Pointer); -{$IFDEF EnableAVLFindPointerFix} -var - Node: TAVLTreeNode; -{$ENDIF} begin - {$IFDEF EnableAVLFindPointerFix} - Node:=AVLFindPointer(Tree,Data); - if Node<>nil then - Tree.Delete(Node); - {$ELSE} Tree.RemovePointer(Data); - {$ENDIF} end; { TPointerToPointerTree } @@ -568,8 +407,7 @@ begin end; end; -function TPointerToPointerTree.GetNodeData(AVLNode: TAVLTreeNode - ): PPointerToPointerItem; +function TPointerToPointerTree.GetNodeData(AVLNode: TAVLTreeNode): PPointerToPointerItem; begin Result:=PPointerToPointerItem(AVLNode.Data); end; @@ -616,349 +454,14 @@ begin Result:=TAVLTreeNode.Create; end; -{ TFilenameToPointerTree } +{ TIdentStringToStringTree } -constructor TFilenameToPointerTree.Create(CaseInsensitive: boolean); -begin - inherited Create(true); - if CaseInsensitive then - SetCompareFuncs(@CompareFilenameToStringItemsI, - @CompareFilenameAndFilenameToStringTreeItemI) - else - SetCompareFuncs(@CompareFilenameToStringItems, - @CompareFilenameAndFilenameToStringTreeItem); -end; - -{ TStringToPointerTree } - -function TStringToPointerTree.GetItems(const s: string): Pointer; -var - Node: TAVLTreeNode; -begin - Node:=FindNode(s); - if Node<>nil then - Result:=PStringToPointerTreeItem(Node.Data)^.Value - else - Result:=nil; -end; - -procedure TStringToPointerTree.SetItems(const s: string; AValue: Pointer); -var - Node: TAVLTreeNode; - NewItem: PStringToPointerTreeItem; -begin - Node:=FindNode(s); - if Node<>nil then begin - NewItem:=PStringToPointerTreeItem(Node.Data); - if FreeValues then - TObject(NewItem^.Value).Free; - NewItem^.Value:=AValue; - end else begin - New(NewItem); - NewItem^.Name:=s; - NewItem^.Value:=AValue; - FTree.Add(NewItem); - end; -end; - -procedure TStringToPointerTree.DisposeItem(p: PStringMapItem); -var - Item: PStringToPointerTreeItem absolute p; -begin - if FreeValues then - TObject(Item^.Value).Free; - Dispose(Item); -end; - -function TStringToPointerTree.ItemsAreEqual(p1, p2: PStringMapItem): boolean; -var - Item1: PStringToPointerTreeItem absolute p1; - Item2: PStringToPointerTreeItem absolute p2; -begin - Result:=(Item1^.Name=Item2^.Name) - and (Item1^.Value=Item2^.Value); -end; - -function TStringToPointerTree.CreateCopy(Src: PStringMapItem): PStringMapItem; -var - SrcItem: PStringToPointerTreeItem absolute Src; - NewItem: PStringToPointerTreeItem; -begin - New(NewItem); - NewItem^.Name:=SrcItem^.Name; - NewItem^.Value:=SrcItem^.Value; - Result:=PStringMapItem(NewItem); -end; - -function TStringToPointerTree.GetItem(const Name: string; out Value: Pointer - ): boolean; -var - Node: TAVLTreeNode; -begin - Node:=FindNode(Name); - if Node<>nil then begin - Value:=PStringToPointerTreeItem(Node.Data)^.Value; - Result:=true; - end else begin - Result:=false; - end; -end; - -procedure TStringToPointerTree.Add(const Name: string; const Value: Pointer); -begin - Items[Name]:=Value; -end; - -function TStringToPointerTree.GetNodeData(AVLNode: TAVLTreeNode - ): PStringToPointerTreeItem; -begin - Result:=PStringToPointerTreeItem(AVLNode.Data); -end; - -procedure TStringToPointerTree.Assign(Source: TStringMap); -var - Node: TAVLTreeNode; - Item: PStringToPointerTreeItem; -begin - if (Source=nil) or (Source.ClassType<>ClassType) then - raise Exception.Create('invalid class'); - Clear; - Node:=Source.Tree.FindLowest; - while Node<>nil do begin - Item:=PStringToPointerTreeItem(Node.Data); - Items[Item^.Name]:=Item^.Value; - Node:=Source.Tree.FindSuccessor(Node); - end; -end; - -function TStringToPointerTree.GetEnumerator: TStringToPointerTreeEnumerator; -begin - Result:=TStringToPointerTreeEnumerator.Create(FTree); -end; - -{ TStringMapEnumerator } - -constructor TStringMapEnumerator.Create(Tree: TAVLTree); -begin - FTree:=Tree; -end; - -function TStringMapEnumerator.MoveNext: boolean; -begin - if FCurrent=nil then - FCurrent:=FTree.FindLowest - else - FCurrent:=FTree.FindSuccessor(FCurrent); - Result:=FCurrent<>nil; -end; - -{ TStringToPointerTreeEnumerator } - -function TStringToPointerTreeEnumerator.GetCurrent: PStringToPointerTreeItem; -begin - Result:=PStringToPointerTreeItem(FCurrent.Data); -end; - -{ TStringMap } - -function TStringMap.GetCompareItemsFunc: TListSortCompare; -begin - Result:=Tree.OnCompare; -end; - -function TStringMap.FindNode(const s: string): TAVLTreeNode; -begin - Result:=FTree.FindKey(Pointer(s),FCompareKeyItemFunc); -end; - -procedure TStringMap.DisposeItem(p: PStringMapItem); -begin - Dispose(p); -end; - -function TStringMap.ItemsAreEqual(p1, p2: PStringMapItem): boolean; -begin - Result:=p1^.Name=p2^.Name; -end; - -function TStringMap.CreateCopy(Src: PStringMapItem): PStringMapItem; -begin - New(Result); - Result^.Name:=Src^.Name; -end; - -constructor TStringMap.Create(TheCaseSensitive: boolean); -begin - FCaseSensitive:=TheCaseSensitive; - if CaseSensitive then begin - FCompareKeyItemFunc:=@CompareStringAndStringToStringTreeItem; - FTree:=TMTAVLTree.Create(@CompareStringToStringItems); - end else begin - FCompareKeyItemFunc:=@CompareStringAndStringToStringTreeItemI; - FTree:=TMTAVLTree.Create(@CompareStringToStringItemsI); - end; -end; - -destructor TStringMap.Destroy; -begin - Clear; - FTree.Free; - FTree:=nil; - inherited Destroy; -end; - -procedure TStringMap.Clear; -var - Node: TAVLTreeNode; -begin - Node:=FTree.FindLowest; - while Node<>nil do begin - DisposeItem(PStringMapItem(Node.Data)); - Node:=FTree.FindSuccessor(Node); - end; - FTree.Clear; -end; - -function TStringMap.Contains(const s: string): boolean; -begin - Result:=FindNode(s)<>nil; -end; - -function TStringMap.ContainsIdentifier(P: PChar): boolean; +function TIdentStringToStringTree.FindNodeWithIdentifierAsPrefix(P: PChar): TAVLTreeNode; begin if CaseSensitive then - Result:=FTree.FindKey(p,@CompareIdentifierAndStringToStringTreeItem)<>nil + Result:=Tree.FindKey(p,@CompareIdentifierPrefixAndStringToStringTreeItem) else - Result:=FTree.FindKey(p,@CompareIdentifierAndStringToStringTreeItemI)<>nil; -end; - -function TStringMap.FindNodeWithIdentifierAsPrefix(P: PChar): TAVLTreeNode; -begin - if CaseSensitive then - Result:=FTree.FindKey(p,@CompareIdentifierPrefixAndStringToStringTreeItem) - else - Result:=FTree.FindKey(p,@CompareIdentifierPrefixAndStringToStringTreeItemI); -end; - -procedure TStringMap.GetNames(List: TStrings); -var - Node: TAVLTreeNode; - Item: PStringMapItem; -begin - Node:=Tree.FindLowest; - while Node<>nil do begin - Item:=PStringMapItem(Node.Data); - List.Add(Item^.Name); - Node:=Tree.FindSuccessor(Node); - end; -end; - -procedure TStringMap.Remove(const Name: string); -var - Node: TAVLTreeNode; - Item: PStringMapItem; -begin - Node:=FindNode(Name); - if Node<>nil then begin - Item:=PStringMapItem(Node.Data); - FTree.Delete(Node); - DisposeItem(Item); - end; -end; - -function TStringMap.GetNodeData(AVLNode: TAVLTreeNode): PStringMapItem; -begin - Result:=PStringMapItem(AVLNode.Data); -end; - -function TStringMap.Count: integer; -begin - Result:=Tree.Count; -end; - -function TStringMap.Equals(OtherTree: TStringMap): boolean; -var - Node: TAVLTreeNode; - OtherNode: TAVLTreeNode; - OtherItem: PStringMapItem; - Item: PStringMapItem; -begin - Result:=false; - if (OtherTree=nil) or (OtherTree.ClassType<>ClassType) then exit; - if Tree.Count<>OtherTree.Tree.Count then exit; - Node:=Tree.FindLowest; - OtherNode:=OtherTree.Tree.FindLowest; - while Node<>nil do begin - if OtherNode=nil then exit; - Item:=PStringMapItem(Node.Data); - OtherItem:=PStringMapItem(OtherNode.Data); - if not ItemsAreEqual(Item,OtherItem) then exit; - OtherNode:=OtherTree.Tree.FindSuccessor(OtherNode); - Node:=Tree.FindSuccessor(Node); - end; - if OtherNode<>nil then exit; - Result:=true; -end; - -procedure TStringMap.Assign(Source: TStringMap); -var - SrcNode: TAVLTreeNode; - SrcItem: PStringMapItem; -begin - if (Source=nil) or (Source.ClassType<>ClassType) then - raise Exception.Create('invalid class'); - Clear; - SrcNode:=Source.Tree.FindLowest; - while SrcNode<>nil do begin - SrcItem:=PStringMapItem(SrcNode.Data); - Tree.Add(CreateCopy(SrcItem)); - SrcNode:=Source.Tree.FindSuccessor(SrcNode); - end; -end; - -procedure TStringMap.WriteDebugReport; -var - Node: TAVLTreeNode; - Item: PStringMapItem; -begin - DebugLn(['TStringMap.WriteDebugReport ',Tree.Count]); - Node:=Tree.FindLowest; - while Node<>nil do begin - Item:=PStringMapItem(Node.Data); - DebugLn([Item^.Name]); - Node:=Tree.FindSuccessor(Node); - end; -end; - -function TStringMap.CalcMemSize: PtrUint; -var - Node: TAVLTreeNode; - Item: PStringMapItem; -begin - Result:=PtrUInt(InstanceSize) - +PtrUInt(FTree.InstanceSize) - +PtrUint(FTree.Count)*SizeOf(TAVLTreeNode); - Node:=FTree.FindLowest; - while Node<>nil do begin - Item:=PStringMapItem(Node.Data); - inc(Result,MemSizeString(Item^.Name) - +SizeOf(TStringMapItem)); - Node:=FTree.FindSuccessor(Node); - end; -end; - -procedure TStringMap.SetCompareFuncs(const NewCompareItemsFunc, - NewCompareKeyItemFunc: TListSortCompare); -begin - FCompareKeyItemFunc:=NewCompareKeyItemFunc; - Tree.OnCompare:=NewCompareItemsFunc; -end; - -{ TStringToStringTreeEnumerator } - -function TStringToStringTreeEnumerator.GetCurrent: PStringToStringTreeItem; -begin - Result:=PStringToStringTreeItem(FCurrent.Data); + Result:=Tree.FindKey(p,@CompareIdentifierPrefixAndStringToStringTreeItemI); end; { TStringTreeEnumerator } @@ -982,164 +485,6 @@ begin Result:=FCurrent<>nil; end; -{ TStringToStringTree } - -function TStringToStringTree.GetStrings(const s: string): string; -var - Node: TAVLTreeNode; -begin - Node:=FindNode(s); - if Node<>nil then - Result:=PStringToStringTreeItem(Node.Data)^.Value - else - Result:=''; -end; - -procedure TStringToStringTree.SetStrings(const s: string; const AValue: string); -var - Node: TAVLTreeNode; - NewItem: PStringToStringTreeItem; -begin - Node:=FindNode(s); - if Node<>nil then begin - PStringToStringTreeItem(Node.Data)^.Value:=AValue; - end else begin - New(NewItem); - NewItem^.Name:=s; - NewItem^.Value:=AValue; - FTree.Add(NewItem); - end; -end; - -procedure TStringToStringTree.DisposeItem(p: PStringMapItem); -var - Item: PStringToStringTreeItem absolute p; -begin - Dispose(Item); -end; - -function TStringToStringTree.ItemsAreEqual(p1, p2: PStringMapItem): boolean; -var - Item1: PStringToStringTreeItem absolute p1; - Item2: PStringToStringTreeItem absolute p2; -begin - Result:=(Item1^.Name=Item2^.Name) - and (Item1^.Value=Item2^.Value); -end; - -function TStringToStringTree.CreateCopy(Src: PStringMapItem): PStringMapItem; -var - SrcItem: PStringToStringTreeItem absolute Src; - NewItem: PStringToStringTreeItem; -begin - New(NewItem); - NewItem^.Name:=SrcItem^.Name; - NewItem^.Value:=SrcItem^.Value; - Result:=PStringMapItem(NewItem); -end; - -function TStringToStringTree.GetString(const Name: string; out Value: string - ): boolean; -var - Node: TAVLTreeNode; -begin - Node:=FindNode(Name); - if Node<>nil then begin - Value:=PStringToStringTreeItem(Node.Data)^.Value; - Result:=true; - end else begin - Result:=false; - end; -end; - -procedure TStringToStringTree.Add(const Name, Value: string); -begin - Strings[Name]:=Value; -end; - -procedure TStringToStringTree.AddNames(List: TStrings); -var - i: Integer; - aName: String; -begin - if List=nil then exit; - for i:=0 to List.Count-1 do begin - aName:=List[i]; - if not Contains(aName) then - Strings[aName]:=''; - end; -end; - -function TStringToStringTree.GetNodeData(AVLNode: TAVLTreeNode - ): PStringToStringTreeItem; -begin - Result:=PStringToStringTreeItem(AVLNode.Data); -end; - -function TStringToStringTree.AsText: string; -var - Node: TAVLTreeNode; - Item: PStringToStringTreeItem; -begin - Result:=''; - Node:=Tree.FindLowest; - while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); - Result:=Result+Item^.Name+'='+Item^.Value+LineEnding; - Node:=Tree.FindSuccessor(Node); - end; -end; - -procedure TStringToStringTree.WriteDebugReport; -var - Node: TAVLTreeNode; - Item: PStringToStringTreeItem; -begin - DebugLn(['TStringToStringTree.WriteDebugReport ',Tree.Count]); - Node:=Tree.FindLowest; - while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); - DebugLn([Item^.Name,'=',Item^.Value]); - Node:=Tree.FindSuccessor(Node); - end; -end; - -function TStringToStringTree.CalcMemSize: PtrUint; -var - Node: TAVLTreeNode; - Item: PStringToStringTreeItem; -begin - Result:=PtrUInt(InstanceSize) - +PtrUInt(FTree.InstanceSize) - +PtrUint(FTree.Count)*SizeOf(TAVLTreeNode); - Node:=FTree.FindLowest; - while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); - inc(Result,MemSizeString(Item^.Name) - +MemSizeString(Item^.Value) - +SizeOf(TStringToStringTreeItem)); - Node:=FTree.FindSuccessor(Node); - end; -end; - -function TStringToStringTree.GetEnumerator: TStringToStringTreeEnumerator; -begin - Result:=TStringToStringTreeEnumerator.Create(FTree); -end; - -{ TFilenameToStringTree } - -constructor TFilenameToStringTree.Create(CaseInsensitive: boolean); -begin - inherited Create(true); - if CaseInsensitive then - SetCompareFuncs(@CompareFilenameToStringItemsI, - @CompareFilenameAndFilenameToStringTreeItemI) - else - SetCompareFuncs(@CompareFilenameToStringItems, - @CompareFilenameAndFilenameToStringTreeItem); -end; - { TStringTree } constructor TStringTree.Create; diff --git a/components/codetools/codetree.pas b/components/codetools/codetree.pas index 062a0b6613..1b23156d2b 100644 --- a/components/codetools/codetree.pas +++ b/components/codetools/codetree.pas @@ -42,8 +42,11 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, FileProcs, CodeToolsStructs, BasicCodeTools, - AVL_Tree, LazDbgLog; + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + LazDbgLog, + // Codetools + FileProcs, CodeToolsStructs, BasicCodeTools; //----------------------------------------------------------------------------- diff --git a/components/codetools/ctunitgraph.pas b/components/codetools/ctunitgraph.pas index e29b8f153a..0da30535cd 100644 --- a/components/codetools/ctunitgraph.pas +++ b/components/codetools/ctunitgraph.pas @@ -30,9 +30,12 @@ unit CTUnitGraph; interface uses - Classes, SysUtils, AVL_Tree, FileProcs, LazFileUtils, LazUtilities, - FindDeclarationTool, CodeBeautifier, CodeCache, StdCodeTools, DirectoryCacher, - LinkScanner, CustomCodeTool, CodeTree, CodeToolsStructs; + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + LazFileUtils, LazUtilities, + // Codetools + FileProcs, FindDeclarationTool, CodeBeautifier, CodeCache, StdCodeTools, + DirectoryCacher, LinkScanner, CustomCodeTool, CodeTree, CodeToolsStructs; type @@ -267,15 +270,8 @@ var AVLNode: TAVLTreeNode; AnUnit: TUGUnit; begin - {$IF FPC_FULLVERSION<30101} - if FFiles.ConsistencyCheck<>0 then - raise Exception.Create('FFiles.ConsistencyCheck'); - if FQueuedFiles.ConsistencyCheck<>0 then - raise Exception.Create('FStartFiles.ConsistencyCheck'); - {$ELSE} FFiles.ConsistencyCheck; FQueuedFiles.ConsistencyCheck; - {$ENDIF} AVLNode:=FQueuedFiles.FindLowest; while AVLNode<>nil do begin diff --git a/components/codetools/ctunitgroupgraph.pas b/components/codetools/ctunitgroupgraph.pas index ee72ed8c9e..6abf3ddfd3 100644 --- a/components/codetools/ctunitgroupgraph.pas +++ b/components/codetools/ctunitgroupgraph.pas @@ -30,7 +30,7 @@ unit CTUnitGroupGraph; interface uses - Classes, SysUtils, AVL_Tree, CTUnitGraph; + Classes, SysUtils, Laz_AVL_Tree, CTUnitGraph; type TUGGroup = class; diff --git a/components/codetools/customcodetool.pas b/components/codetools/customcodetool.pas index 8974296698..61a6827911 100644 --- a/components/codetools/customcodetool.pas +++ b/components/codetools/customcodetool.pas @@ -43,9 +43,12 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, FileProcs, CodeToolsStrConsts, CodeTree, CodeAtom, + Classes, SysUtils, Laz_AVL_Tree, + // Codetools + FileProcs, CodeToolsStrConsts, CodeTree, CodeAtom, KeywordFuncLists, BasicCodeTools, LinkScanner, CodeCache, - LazFileUtils, LazUtilities, AVL_Tree, LazDbgLog; + // LazUtils + LazFileUtils, LazUtilities, LazDbgLog; type TCodeToolPhase = ( diff --git a/components/codetools/definetemplates.pas b/components/codetools/definetemplates.pas index 38a2268620..a25c64bb83 100644 --- a/components/codetools/definetemplates.pas +++ b/components/codetools/definetemplates.pas @@ -54,13 +54,13 @@ interface uses // RTL + FCL - Classes, SysUtils, AVL_Tree, contnrs, process, + Classes, SysUtils, contnrs, process, Laz_AVL_Tree, // CodeTools CodeToolsStrConsts, ExprEval, DirectoryCacher, BasicCodeTools, CodeToolsStructs, KeywordFuncLists, LinkScanner, FileProcs, // LazUtils LazUtilities, LazUTF8, LazUTF8Classes, LazFileUtils, UTF8Process, - LazFileCache, LazDbgLog, Laz2_XMLCfg; + LazFileCache, LazDbgLog, AvgLvlTree, Laz2_XMLCfg; const ExternalMacroStart = ExprEval.ExternalMacroStart; @@ -1811,7 +1811,7 @@ var Ext: String; File_Name, PkgName, FPMFilename, FPMSourcePath, Line, SrcFilename: String; AVLNode: TAVLTreeNode; - S2SItem: PStringToStringTreeItem; + S2SItem: PStringToStringItem; FPMToUnitTree: TStringToPointerTree;// pkgname to TStringToStringTree (unitname to source filename) sl: TStringListUTF8; PkgUnitToFilename: TStringToStringTree; @@ -1888,7 +1888,7 @@ begin try AVLNode:=Units.Tree.FindLowest; while AVLNode<>nil do begin - S2SItem:=PStringToStringTreeItem(AVLNode.Data); + S2SItem:=PStringToStringItem(AVLNode.Data); File_Name:=S2SItem^.Name; Filename:=S2SItem^.Value; // trimmed and expanded filename //if Pos('lazmkunit',Filename)>0 then @@ -2189,11 +2189,10 @@ begin end; end; -function CreateFPCTemplate(Config: TFPCTargetConfigCache; Owner: TObject - ): TDefineTemplate; +function CreateFPCTemplate(Config: TFPCTargetConfigCache; Owner: TObject): TDefineTemplate; var Node: TAVLTreeNode; - StrItem: PStringToStringTreeItem; + StrItem: PStringToStringItem; NewDefTempl: TDefineTemplate; TargetOS: String; SrcOS: String; @@ -2242,7 +2241,7 @@ begin if Config.Defines<>nil then begin Node:=Config.Defines.Tree.FindLowest; while Node<>nil do begin - StrItem:=PStringToStringTreeItem(Node.Data); + StrItem:=PStringToStringItem(Node.Data); NewDefTempl:=TDefineTemplate.Create('Define '+StrItem^.Name, 'Macro',StrItem^.Name,StrItem^.Value,da_DefineRecurse); Result.AddChild(NewDefTempl); @@ -2253,7 +2252,7 @@ begin if Config.Undefines<>nil then begin Node:=Config.Undefines.Tree.FindLowest; while Node<>nil do begin - StrItem:=PStringToStringTreeItem(Node.Data); + StrItem:=PStringToStringItem(Node.Data); NewDefTempl:=TDefineTemplate.Create('Undefine '+StrItem^.Name, 'Macro',StrItem^.Name,'',da_UndefineRecurse); Result.AddChild(NewDefTempl); @@ -2265,16 +2264,14 @@ begin Result.SetDefineOwner(Owner,true); end; -function CreateFPCTemplate(Config: TFPCUnitSetCache; Owner: TObject - ): TDefineTemplate; overload; +function CreateFPCTemplate(Config: TFPCUnitSetCache; Owner: TObject): TDefineTemplate; overload; begin Result:=CreateFPCTemplate(Config.GetConfigCache(false),Owner); Result.AddChild(TDefineTemplate.Create('UnitSet','UnitSet identifier', UnitSetMacroName,Config.GetUnitSetID,da_DefineRecurse)); end; -function CreateFPCSourceTemplate(FPCSrcDir: string; Owner: TObject - ): TDefineTemplate; +function CreateFPCSourceTemplate(FPCSrcDir: string; Owner: TObject): TDefineTemplate; const RTLPkgDirs: array[1..4] of string = ('rtl-console','rtl-extra','rtl-objpas','rtl-unicode'); var @@ -2690,7 +2687,7 @@ procedure CheckPPUSources(PPUFiles, UnitToSource, var Duplicates, Missing: TStringToStringTree); var Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; Unit_Name: String; Filename: String; SrcFilename: string; @@ -2708,7 +2705,7 @@ begin raise Exception.Create('CheckPPUSources Missing is case sensitive'); Node:=PPUFiles.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Unit_Name:=Item^.Name; Filename:=Item^.Value; if CompareFileExt(Filename,'.ppu',false)=0 then begin @@ -5646,20 +5643,10 @@ begin end; procedure TDefineTree.ConsistencyCheck; -{$IF FPC_FULLVERSION<30101} -var - CurResult: LongInt; -{$ENDIF} begin if FFirstDefineTemplate<>nil then FFirstDefineTemplate.ConsistencyCheck; - {$IF FPC_FULLVERSION<30101} - CurResult:=FCache.ConsistencyCheck; - if CurResult<>0 then - RaiseCatchableException(IntToStr(CurResult)); - {$ELSE} FCache.ConsistencyCheck; - {$ENDIF} end; procedure TDefineTree.CalcMemSize(Stats: TCTMemStats); @@ -8548,7 +8535,7 @@ procedure TFPCTargetConfigCache.SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string); var Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; Cnt: Integer; SubPath: String; s: String; @@ -8597,7 +8584,7 @@ var // Create a string list of filenames Node:=ASource.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Filename:=Item^.Value; FileList.Add(Filename); Node:=ASource.Tree.FindSuccessor(Node); @@ -8639,7 +8626,7 @@ begin if Defines<>nil then begin Node:=Defines.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); if IsValidIdent(Item^.Name) then begin inc(Cnt); SubPath:=Path+'Defines/Macro'+IntToStr(Cnt)+'/'; @@ -8657,7 +8644,7 @@ begin if Undefines<>nil then begin Node:=Undefines.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); inc(Cnt); if s<>'' then s:=s+','; s:=s+Item^.Name; diff --git a/components/codetools/directivestree.pas b/components/codetools/directivestree.pas index d634f86d46..e5a824b03b 100644 --- a/components/codetools/directivestree.pas +++ b/components/codetools/directivestree.pas @@ -37,8 +37,9 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, FileProcs, LazFileUtils, - BasicCodeTools, KeywordFuncLists, CodeCache, AVL_Tree, ExprEval, CodeTree; + Classes, SysUtils, Laz_AVL_Tree, + // Codetools + FileProcs, BasicCodeTools, KeywordFuncLists, CodeCache, ExprEval, CodeTree; type TCompilerDirectiveNodeDesc = word; diff --git a/components/codetools/directorycacher.pas b/components/codetools/directorycacher.pas index 5eb8f1fac2..94da604a94 100644 --- a/components/codetools/directorycacher.pas +++ b/components/codetools/directorycacher.pas @@ -36,11 +36,11 @@ interface uses // RTL + FCL - Classes, SysUtils, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, // CodeTools - CodeToolsStructs, FileProcs, + FileProcs, // LazUtils - LazUTF8, LazFileCache, LazFileUtils, LazUtilities, LazDbgLog; + LazUTF8, LazFileCache, LazFileUtils, LazUtilities, AvgLvlTree, LazDbgLog; // verbosity { $DEFINE CTDEBUG} diff --git a/components/codetools/eventcodetool.pas b/components/codetools/eventcodetool.pas index 852ebfd9b4..ddb7db4235 100644 --- a/components/codetools/eventcodetool.pas +++ b/components/codetools/eventcodetool.pas @@ -43,10 +43,13 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, TypInfo, FileProcs, LazFileUtils, CodeToolsStrConsts, - CodeTree, CodeCache, PascalParserTool, CodeCompletionTool, KeywordFuncLists, - BasicCodeTools, LinkScanner, AVL_Tree, CodeToolsStructs, - SourceChanger, FindDeclarationTool, ChangeDeclarationTool; + Classes, SysUtils, TypInfo, Laz_AVL_Tree, + // LazUtils + LazFileUtils, + // Codetools + FileProcs, CodeToolsStrConsts, CodeTree, CodeCache, PascalParserTool, + CodeCompletionTool, KeywordFuncLists, BasicCodeTools, LinkScanner, + CodeToolsStructs, SourceChanger, FindDeclarationTool, ChangeDeclarationTool; type { TEventsCodeTool } diff --git a/components/codetools/extractproctool.pas b/components/codetools/extractproctool.pas index e0dcd4c136..ec258d273e 100644 --- a/components/codetools/extractproctool.pas +++ b/components/codetools/extractproctool.pas @@ -51,11 +51,12 @@ unit ExtractProcTool; interface uses - Classes, SysUtils, math, FileProcs, CodeToolsStrConsts, CodeTree, CodeAtom, + Classes, SysUtils, math, Laz_AVL_Tree, + // Codetools + FileProcs, CodeToolsStrConsts, CodeTree, CodeAtom, CodeCache, CustomCodeTool, PascalReaderTool, PascalParserTool, CodeCompletionTool, KeywordFuncLists, BasicCodeTools, - LinkScanner, AVL_Tree, SourceChanger, - FindDeclarationTool; + LinkScanner, SourceChanger, FindDeclarationTool; type TExtractedProcVariableType = ( diff --git a/components/codetools/fileprocs.pas b/components/codetools/fileprocs.pas index d6bd8b5c72..6b20af7f9a 100644 --- a/components/codetools/fileprocs.pas +++ b/components/codetools/fileprocs.pas @@ -40,7 +40,7 @@ uses Windows, {$ENDIF} // RTL + FCL - Classes, SysUtils, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, // CodeTools CodeToolsStrConsts, // LazUtils @@ -48,8 +48,7 @@ uses {$IFDEF EnableWrapperFunctions} LazDbgLog, {$ENDIF} - LazLogger, LazUTF8, LazFileCache, - LazFileUtils, LazUTF8Classes; + LazLogger, LazFileCache, LazFileUtils, LazUTF8, LazUTF8Classes; type TFPCStreamSeekType = int64; diff --git a/components/codetools/finddeclarationcache.pas b/components/codetools/finddeclarationcache.pas index e3634bbb9e..5d91ec4207 100644 --- a/components/codetools/finddeclarationcache.pas +++ b/components/codetools/finddeclarationcache.pas @@ -37,9 +37,10 @@ interface { $DEFINE HardExceptions} uses - Classes, SysUtils, FileProcs, BasicCodeTools, CodeTree, LinkScanner, - AVL_Tree, PascalParserTool, KeywordFuncLists, - CodeToolMemManager; + Classes, SysUtils, Laz_AVL_Tree, + // Codetools + FileProcs, BasicCodeTools, CodeTree, LinkScanner, + PascalParserTool, KeywordFuncLists, CodeToolMemManager; type { @@ -489,12 +490,7 @@ var Entry: PInterfaceIdentCacheEntry; begin if FItems<>nil then begin - {$IF FPC_FULLVERSION<30101} - if FItems.ConsistencyCheck<>0 then - RaiseCatchableException(''); - {$ELSE} FItems.ConsistencyCheck; - {$ENDIF} Node:=FItems.FindLowest; while Node<>nil do begin Entry:=PInterfaceIdentCacheEntry(Node.Data); @@ -1054,14 +1050,8 @@ end; procedure TCodeTreeNodeCache.ConsistencyCheck; begin - if (FItems<>nil) then begin - {$IF FPC_FULLVERSION<30101} - if FItems.ConsistencyCheck<>0 then - raise Exception.Create(''); - {$ELSE} + if (FItems<>nil) then FItems.ConsistencyCheck; - {$ENDIF} - end; if Owner<>nil then begin if Owner.Cache<>Self then raise Exception.Create(''); diff --git a/components/codetools/finddeclarationtool.pas b/components/codetools/finddeclarationtool.pas index 24fb92b102..f2fdaa3055 100644 --- a/components/codetools/finddeclarationtool.pas +++ b/components/codetools/finddeclarationtool.pas @@ -77,10 +77,13 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, CodeToolsStrConsts, CodeTree, CodeAtom, CustomCodeTool, + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + LazFileUtils, LazUtilities, + // Codetools + CodeToolsStrConsts, CodeTree, CodeAtom, CustomCodeTool, SourceLog, KeywordFuncLists, BasicCodeTools, LinkScanner, CodeCache, - DirectoryCacher, AVL_Tree, PascalParserTool, - PascalReaderTool, FileProcs, LazFileUtils, LazUtilities, LazUTF8, + DirectoryCacher, PascalParserTool, PascalReaderTool, FileProcs, DefineTemplates, FindDeclarationCache; type @@ -11687,22 +11690,10 @@ begin ANodeCache.ConsistencyCheck; ANodeCache:=ANodeCache.Next; end; - if FDependentCodeTools<>nil then begin - {$IF FPC_FULLVERSION<30101} - if FDependentCodeTools.ConsistencyCheck<>0 then - raise Exception.Create(''); - {$ELSE} + if FDependentCodeTools<>nil then FDependentCodeTools.ConsistencyCheck; - {$ENDIF} - end; - if FDependsOnCodeTools<>nil then begin - {$IF FPC_FULLVERSION<30101} - if FDependsOnCodeTools.ConsistencyCheck<>0 then - raise Exception.Create(''); - {$ELSE} + if FDependsOnCodeTools<>nil then FDependsOnCodeTools.ConsistencyCheck; - {$ENDIF} - end; end; procedure TFindDeclarationTool.CalcMemSize(Stats: TCTMemStats); diff --git a/components/codetools/findoverloads.pas b/components/codetools/findoverloads.pas index 8a15db8743..eec27877c0 100644 --- a/components/codetools/findoverloads.pas +++ b/components/codetools/findoverloads.pas @@ -33,8 +33,10 @@ unit FindOverloads; interface uses - Classes, SysUtils, FileProcs, BasicCodeTools, CodeTree, CodeGraph, - CodeCache, FindDeclarationTool, AVL_Tree, FindDeclarationCache, StdCodeTools; + Classes, SysUtils, Laz_AVL_Tree, + // Codetools + FileProcs, BasicCodeTools, CodeTree, CodeGraph, + CodeCache, FindDeclarationTool, FindDeclarationCache, StdCodeTools; type TOverloadsGraphEdge = class; diff --git a/components/codetools/h2pastool.pas b/components/codetools/h2pastool.pas index e7e8f0dc39..d175332db5 100644 --- a/components/codetools/h2pastool.pas +++ b/components/codetools/h2pastool.pas @@ -94,10 +94,12 @@ unit H2PasTool; interface uses - Classes, SysUtils, CodeToolsStructs, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + AvgLvlTree, + // Codetools FileProcs, BasicCodeTools, CCodeParserTool, - NonPascalCodeTools, KeywordFuncLists, CodeCache, - CodeTree, CodeAtom; + NonPascalCodeTools, KeywordFuncLists, CodeCache, CodeTree, CodeAtom; const DefaultMaxPascalIdentLen = 70; diff --git a/components/codetools/ide/addassignmethoddlg.pas b/components/codetools/ide/addassignmethoddlg.pas index 4e8ab9ef6c..f421d7f523 100644 --- a/components/codetools/ide/addassignmethoddlg.pas +++ b/components/codetools/ide/addassignmethoddlg.pas @@ -30,8 +30,12 @@ unit AddAssignMethodDlg; interface uses - Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, - Dialogs, ButtonPanel, StdCtrls, ComCtrls, Menus, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LResources, Forms, Controls, Graphics, + Dialogs, ButtonPanel, StdCtrls, ComCtrls, Menus, + // LazUtils + FileUtil, // Codetools CodeCache, CodeToolManager, FileProcs, PascalParserTool, BasicCodeTools, CodeTree, FindDeclarationTool, diff --git a/components/codetools/ide/codyfindoverloads.pas b/components/codetools/ide/codyfindoverloads.pas index 33e309c259..5fa4008552 100644 --- a/components/codetools/ide/codyfindoverloads.pas +++ b/components/codetools/ide/codyfindoverloads.pas @@ -44,15 +44,17 @@ unit CodyFindOverloads; interface uses - Classes, SysUtils, AVL_Tree, contnrs, + Classes, SysUtils, contnrs, Laz_AVL_Tree, + // LazUtils FileUtil, LazLoggerBase, LazUtilities, - Forms, Controls, Graphics, - Dialogs, ExtCtrls, StdCtrls, Grids, ComCtrls, + // LCL + Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Grids, ComCtrls, + // Codetools CodeToolManager, CodeTree, CodeCache, FindDeclarationTool, PascalParserTool, BasicCodeTools, CTUnitGraph, FileProcs, StdCodeTools, - CodeGraph, - LazIDEIntf, IDEWindowIntf, ProjectIntf, - CodyUtils, CodyStrConsts; + CodeGraph, CodyUtils, CodyStrConsts, + // IdeIntf + LazIDEIntf, IDEWindowIntf, ProjectIntf; type TCFOUnit = class(TUGUnit) diff --git a/components/codetools/ide/codyidentifiersdlg.pas b/components/codetools/ide/codyidentifiersdlg.pas index 94da2abe25..25f9e7050c 100644 --- a/components/codetools/ide/codyidentifiersdlg.pas +++ b/components/codetools/ide/codyidentifiersdlg.pas @@ -38,13 +38,18 @@ unit CodyIdentifiersDlg; interface uses - Classes, SysUtils, LCLProc, avl_tree, contnrs, Forms, - Controls, Dialogs, ButtonPanel, StdCtrls, ExtCtrls, LCLType, - Buttons, Menus, PackageIntf, LazIDEIntf, SrcEditorIntf, ProjectIntf, - CompOptsIntf, IDEDialogs, IDEMsgIntf, IDEExternToolIntf, CodeCache, - BasicCodeTools, CustomCodeTool, CodeToolManager, UnitDictionary, CodeTree, + Classes, SysUtils, LCLProc, contnrs, Laz_AVL_Tree, + // LCL + Forms, Controls, Dialogs, ButtonPanel, StdCtrls, ExtCtrls, LCLType, Buttons, Menus, + // IdeIntf + PackageIntf, LazIDEIntf, SrcEditorIntf, ProjectIntf, + CompOptsIntf, IDEDialogs, IDEMsgIntf, IDEExternToolIntf, + // Codetools + CodeCache, BasicCodeTools, CustomCodeTool, CodeToolManager, UnitDictionary, CodeTree, LinkScanner, DefineTemplates, CodeToolsStructs, FindDeclarationTool, - CodyStrConsts, CodyUtils, CodyOpts, FileProcs, LazFileUtils, LazFileCache; + CodyStrConsts, CodyUtils, CodyOpts, FileProcs, + // LazUtils + LazFileUtils, LazFileCache, AvgLvlTree; const PackageNameFPCSrcDir = 'FPCSrcDir'; @@ -690,7 +695,7 @@ end; procedure TCodyUnitDictionary.CheckFiles; var aFilename: String; - StrItem: PStringToStringTreeItem; + StrItem: PStringToStringItem; List: TStringList; UDGroup: TUDUnitGroup; CurUnit: TUDUnit; diff --git a/components/codetools/ide/codynodeinfodlg.pas b/components/codetools/ide/codynodeinfodlg.pas index a692c3a1f8..606993d4e0 100644 --- a/components/codetools/ide/codynodeinfodlg.pas +++ b/components/codetools/ide/codynodeinfodlg.pas @@ -30,8 +30,9 @@ unit CodyNodeInfoDlg; interface uses - Classes, SysUtils, AVL_Tree, Forms, Controls, Graphics, Dialogs, - ButtonPanel, ComCtrls, StdCtrls, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, Controls, Graphics, Dialogs, ButtonPanel, ComCtrls, StdCtrls, // IDEIntf SrcEditorIntf, // CodeTools diff --git a/components/codetools/ide/ppulistdlg.pas b/components/codetools/ide/ppulistdlg.pas index f31f9fc65e..be16c63fc3 100644 --- a/components/codetools/ide/ppulistdlg.pas +++ b/components/codetools/ide/ppulistdlg.pas @@ -30,9 +30,11 @@ unit PPUListDlg; interface uses - Classes, SysUtils, contnrs, math, LCLProc, FileUtil, Forms, - Controls, Dialogs, ButtonPanel, Grids, StdCtrls, AvgLvlTree, + Classes, SysUtils, contnrs, math, Laz_AVL_Tree, + // LCL + LCLProc, FileUtil, Forms, Controls, Dialogs, ButtonPanel, Grids, StdCtrls, ExtCtrls, ComCtrls, + AvgLvlTree, // IDEIntf ProjectIntf, LazIDEIntf, IDEDialogs, IDEWindowIntf, PackageIntf, @@ -129,10 +131,10 @@ type FMainItem: TPPUDlgListItem; FProject: TLazProject; FIdleConnected: boolean; - FSearchingItems: TAvgLvlTree; // tree of TPPUDlgListItem sorted for TheUnitName - FItems: TAvgLvlTree; // tree of TPPUDlgListItem sorted for TheUnitName + FSearchingItems: TAvlTree; // tree of TPPUDlgListItem sorted for TheUnitName + FItems: TAvlTree; // tree of TPPUDlgListItem sorted for TheUnitName FSort: array[1..3] of TPPUListSortRec; - FDlgLinkedFiles: TAvgLvlTree; // tree of TPPUDlgLinkedFile sorted for ID, file, flags + FDlgLinkedFiles: TAvlTree; // tree of TPPUDlgLinkedFile sorted for ID, file, flags procedure SetProject(const AValue: TLazProject); procedure SetIdleConnected(const AValue: boolean); @@ -149,7 +151,7 @@ type // units grid procedure UpdateUnitsGrid; - function CompareUnits({%H-}Tree: TAvgLvlTree; Data1, Data2: Pointer): integer; + function CompareUnits({%H-}Tree: TAvlTree; Data1, Data2: Pointer): integer; procedure JumpToUnit(TheUnitName: string); // units info @@ -254,9 +256,9 @@ end; procedure TPPUListDialog.FormCreate(Sender: TObject); begin - FSearchingItems:=TAvgLvlTree.Create(@ComparePPUListItems); - FItems:=TAvgLvlTree.Create(@ComparePPUListItems); - FDlgLinkedFiles:=TAvgLvlTree.Create(@ComparePPULinkedFiles); + FSearchingItems:=TAvlTree.Create(@ComparePPUListItems); + FItems:=TAvlTree.Create(@ComparePPUListItems); + FDlgLinkedFiles:=TAvlTree.Create(@ComparePPULinkedFiles); FSort[1].Category:=plsOSize; FSort[2].Category:=plsName; @@ -562,17 +564,17 @@ procedure TPPUListDialog.UpdateUnitsGrid; var Grid: TStringGrid; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: TPPUDlgListItem; Row: Integer; s: String; TotalPPUBytes, TotalOBytes: int64; - SortedItems: TAvgLvlTree; + SortedItems: TAvlTree; begin Grid:=UnitsStringGrid; Grid.BeginUpdate; - SortedItems:=TAvgLvlTree.CreateObjectCompare(@CompareUnits); + SortedItems:=TAvlTree.CreateObjectCompare(@CompareUnits); try Node:=FItems.FindLowest; TotalPPUBytes:=0; @@ -679,7 +681,7 @@ begin dec(Result); end; -function TPPUListDialog.CompareUnits(Tree: TAvgLvlTree; Data1, Data2: Pointer +function TPPUListDialog.CompareUnits(Tree: TAvlTree; Data1, Data2: Pointer ): integer; function CompareInt(const a,b: int64; Reverse: boolean): integer; @@ -838,7 +840,7 @@ function TPPUListDialog.FindUsesPath(UsingUnit, UsedUnit: TPPUDlgListItem): TFPL Result is a list of TPPUDlgListItem } var - Visited: TAvgLvlTree; + Visited: TAvlTree; function Search(Item: TPPUDlgListItem; Path: TFPList): boolean; var @@ -864,7 +866,7 @@ var begin Result:=TFPList.Create; if (UsingUnit=nil) or (UsedUnit=nil) then exit; - Visited:=TAvgLvlTree.Create(@ComparePPUListItems); + Visited:=TAvlTree.Create(@ComparePPUListItems); try if Search(UsedUnit,Result) then Result.Add(UsedUnit); @@ -912,7 +914,7 @@ procedure TPPUListDialog.UpdateLinkedFilesTreeView; end; var - PPUNode, DlgLinkedFileNode: TAvgLvlTreeNode; + PPUNode, DlgLinkedFileNode: TAvlTreeNode; Item: TPPUDlgListItem; PPULinkedFile: TPPULinkedFile; DlgLinkedFile: TPPUDlgLinkedFile; @@ -976,7 +978,7 @@ const MaxNonIdleTime = (1/86400)/2; var StartTime: TDateTime; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: TPPUDlgListItem; AnUnitName: String; InFilename: String; @@ -1130,7 +1132,7 @@ end; function TPPUListDialog.FindUnit(AnUnitName: string): TPPUDlgListItem; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FItems.FindKey(Pointer(AnUnitName),@CompareUnitNameWithPPUListItem); if Node=nil then diff --git a/components/codetools/identcompletiontool.pas b/components/codetools/identcompletiontool.pas index 008e2e0392..d044ac3c2c 100644 --- a/components/codetools/identcompletiontool.pas +++ b/components/codetools/identcompletiontool.pas @@ -48,12 +48,14 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, typinfo, FileProcs, LazFileUtils, - CodeTree, CodeAtom, CodeCache, CustomCodeTool, CodeToolsStrConsts, - KeywordFuncLists, BasicCodeTools, LinkScanner, AvgLvlTree, AVL_Tree, - SourceChanger, FindDeclarationTool, PascalReaderTool, PascalParserTool, - CodeToolsStructs, ExprEval, LazDbgLog, crc; - + Classes, SysUtils, typinfo, crc, Laz_AVL_Tree, + // LazUtils + LazFileUtils, LazDbgLog, AvgLvlTree, + // Codetools + FileProcs, CodeTree, CodeAtom, CodeCache, CustomCodeTool, CodeToolsStrConsts, + KeywordFuncLists, BasicCodeTools, LinkScanner, SourceChanger, + FindDeclarationTool, PascalReaderTool, PascalParserTool, ExprEval; + type TIdentCompletionTool = class; TIdentifierHistoryList = class; @@ -236,13 +238,13 @@ type FFilteredList: TFPList; // list of TIdentifierListItem FFlags: TIdentifierListFlags; FHistory: TIdentifierHistoryList; - FItems: TAvgLvlTree; // tree of TIdentifierListItem (completely sorted) + FItems: TAvlTree; // tree of TIdentifierListItem (completely sorted) FIdentView: TAVLTree; // tree of TIdentifierListItem sorted for identifiers FUsedTools: TAVLTree; // tree of TFindDeclarationTool FIdentSearchItem: TIdentifierListSearchItem; FPrefix: string; FStartContext: TFindContext; - function CompareIdentListItems({%H-}Tree: TAvgLvlTree; Data1, Data2: Pointer): integer; + function CompareIdentListItems({%H-}Tree: TAvlTree; Data1, Data2: Pointer): integer; procedure SetHistory(const AValue: TIdentifierHistoryList); procedure SetSortForHistory(AValue: boolean); procedure SetSortForScope(AValue: boolean); @@ -554,8 +556,7 @@ end; { TIdentifierList } -function TIdentifierList.CompareIdentListItems(Tree: TAvgLvlTree; Data1, - Data2: Pointer): integer; +function TIdentifierList.CompareIdentListItems(Tree: TAvlTree; Data1, Data2: Pointer): integer; var Item1: TIdentifierListItem absolute Data1; Item2: TIdentifierListItem absolute Data2; @@ -610,7 +611,7 @@ end; procedure TIdentifierList.UpdateFilteredList; var - AnAVLNode: TAvgLvlTreeNode; + AnAVLNode: TAvlTreeNode; CurItem: TIdentifierListItem; begin if not (ilfFilteredListNeedsUpdate in FFlags) then exit; @@ -676,7 +677,7 @@ end; constructor TIdentifierList.Create; begin FFlags:=[ilfFilteredListNeedsUpdate]; - FItems:=TAvgLvlTree.CreateObjectCompare(@CompareIdentListItems); + FItems:=TAvlTree.CreateObjectCompare(@CompareIdentListItems); FIdentView:=TAVLTree.Create(@CompareIdentListItemsForIdents); FIdentSearchItem:=TIdentifierListSearchItem.Create; FCreatedIdentifiers:=TFPList.Create; @@ -868,7 +869,7 @@ function TIdentifierList.CompletePrefix(const OldPrefix: string): string; // search all identifiers beginning with Prefix // and return the biggest shared prefix of all of them var - AnAVLNode: TAvgLvlTreeNode; + AnAVLNode: TAvlTreeNode; CurItem: TIdentifierListItem; FoundFirst: Boolean; SamePos: Integer; @@ -909,7 +910,7 @@ function TIdentifierList.CalcMemSize: PtrUInt; var i: Integer; Node: TAVLTreeNode; - AvgNode: TAvgLvlTreeNode; + AvgNode: TAvlTreeNode; li: TIdentifierListItem; hli: TIdentHistListItem; begin @@ -929,7 +930,7 @@ begin inc(Result,FHistory.CalcMemSize); end; if FItems<>nil then begin - {%H-}inc(Result,FItems.Count*SizeOf(TAvgLvlTreeNode)); + {%H-}inc(Result,FItems.Count*SizeOf(TAvlTreeNode)); AvgNode:=FItems.FindLowest; while AvgNode<>nil do begin li:=TIdentifierListItem(AvgNode.Data); @@ -2505,7 +2506,7 @@ end; procedure TIdentCompletionTool.AddCompilerDirectiveMacros(Directive: string); var Macros: TStringToStringTree; - StrItem: PStringToStringTreeItem; + StrItem: PStringToStringItem; CodeBufs: TAVLTree; AVLNode: TAVLTreeNode; diff --git a/components/codetools/lfmtrees.pas b/components/codetools/lfmtrees.pas index 0eceab7370..bc7e7b9136 100644 --- a/components/codetools/lfmtrees.pas +++ b/components/codetools/lfmtrees.pas @@ -30,8 +30,11 @@ unit LFMTrees; interface uses - Classes, SysUtils, AVL_Tree, FileProcs, LazUtilities, - BasicCodeTools, CodeCache, TypInfo; + Classes, SysUtils, TypInfo, Laz_AVL_Tree, + // LazUtils + LazUtilities, + // Codetools + FileProcs, BasicCodeTools, CodeCache; type { TLFMTreeNode } diff --git a/components/codetools/linkscanner.pas b/components/codetools/linkscanner.pas index 861f88b486..92e7a2b862 100644 --- a/components/codetools/linkscanner.pas +++ b/components/codetools/linkscanner.pas @@ -47,7 +47,7 @@ uses MemCheck, {$ENDIF} // RTL + FCL - Classes, SysUtils, math, AVL_Tree, + Classes, SysUtils, math, Laz_AVL_Tree, // CodeTools CodeToolsStrConsts, CodeToolMemManager, FileProcs, ExprEval, SourceLog, KeywordFuncLists, BasicCodeTools, diff --git a/components/codetools/methodjumptool.pas b/components/codetools/methodjumptool.pas index b1614a8766..a5059d7003 100644 --- a/components/codetools/methodjumptool.pas +++ b/components/codetools/methodjumptool.pas @@ -40,9 +40,12 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, FileProcs, LazFileUtils, CodeTree, PascalParserTool, - StdCodeTools, KeywordFuncLists, BasicCodeTools, - LinkScanner, CodeCache, PascalReaderTool, AVL_Tree; + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + LazFileUtils, + // Codetools + FileProcs, CodeTree, PascalParserTool, StdCodeTools, KeywordFuncLists, + BasicCodeTools, LinkScanner, CodeCache, PascalReaderTool; type diff --git a/components/codetools/nonpascalcodetools.pas b/components/codetools/nonpascalcodetools.pas index 6e7c387cc0..9910f0503b 100644 --- a/components/codetools/nonpascalcodetools.pas +++ b/components/codetools/nonpascalcodetools.pas @@ -31,7 +31,7 @@ unit NonPascalCodeTools; interface uses - Classes, SysUtils, AVL_Tree, KeywordFuncLists, FileProcs; + SysUtils, KeywordFuncLists, FileProcs; // C function CompareCIdentifiers(Identifier1, Identifier2: PChar): integer; diff --git a/components/codetools/pascalparsertool.pas b/components/codetools/pascalparsertool.pas index 8517b950ee..ae393a4efd 100644 --- a/components/codetools/pascalparsertool.pas +++ b/components/codetools/pascalparsertool.pas @@ -42,9 +42,10 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, FileProcs, CodeToolsStrConsts, CodeTree, CodeAtom, ExprEval, - CustomCodeTool, MultiKeyWordListTool, KeywordFuncLists, - CodeToolsStructs, LinkScanner, CodeCache, AVL_Tree; + Classes, SysUtils, + // Codetools + FileProcs, CodeToolsStrConsts, CodeTree, CodeAtom, ExprEval, + MultiKeyWordListTool, KeywordFuncLists, CodeToolsStructs, LinkScanner, CodeCache; type TProcHeadAttribute = ( diff --git a/components/codetools/pascalreadertool.pas b/components/codetools/pascalreadertool.pas index 6597e02303..154c899b68 100644 --- a/components/codetools/pascalreadertool.pas +++ b/components/codetools/pascalreadertool.pas @@ -37,9 +37,12 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, FileProcs, CodeToolsStrConsts, CodeTree, CodeCache, - CodeAtom, CustomCodeTool, PascalParserTool, KeywordFuncLists, BasicCodeTools, - LinkScanner, AVL_Tree, LazFileUtils, LazDbgLog; + Classes, SysUtils, + // LazUtils + LazFileUtils, LazDbgLog, + // Codetools + FileProcs, CodeToolsStrConsts, CodeTree, CodeCache, CodeAtom, + PascalParserTool, KeywordFuncLists, BasicCodeTools, LinkScanner; type TPascalHintModifier = ( diff --git a/components/codetools/ppugraph.pas b/components/codetools/ppugraph.pas index 12c92c7e1a..b0059642ee 100644 --- a/components/codetools/ppugraph.pas +++ b/components/codetools/ppugraph.pas @@ -30,12 +30,13 @@ unit PPUGraph; interface uses - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, {$IFnDEF HASAMIGA} dynlibs, {$ENDIF} - PPUParser, CodeTree, AVL_Tree, FileProcs, - LazFileUtils, BasicCodeTools, CodeGraph, CodeToolManager, CodeToolsStructs; + // Codetools + PPUParser, CodeTree, FileProcs, LazFileUtils, BasicCodeTools, CodeGraph, + CodeToolManager, CodeToolsStructs; const FPCPPUGroupPrefix = 'fpc_'; diff --git a/components/codetools/sourcechanger.pas b/components/codetools/sourcechanger.pas index 0a6a933ec1..af525eac6b 100644 --- a/components/codetools/sourcechanger.pas +++ b/components/codetools/sourcechanger.pas @@ -42,8 +42,12 @@ interface {off $DEFINE VerboseSrcChanger} uses - Classes, SysUtils, FileProcs, CodeToolsStrConsts, CodeCache, BasicCodeTools, - typinfo, LinkScanner, AVL_Tree, KeywordFuncLists, LazDbgLog; + Classes, SysUtils, typinfo, Laz_AVL_Tree, + // LazUtils + LazDbgLog, + // Codetools + FileProcs, CodeToolsStrConsts, CodeCache, BasicCodeTools, LinkScanner, + KeywordFuncLists; type // Insert policy types for class parts (properties, variables, method defs) @@ -844,8 +848,7 @@ begin Result:=true; end; -function TSourceChangeCache.IndentLine(LineStartPos, IndentDiff: integer - ): boolean; +function TSourceChangeCache.IndentLine(LineStartPos, IndentDiff: integer): boolean; var OldIndent: LongInt; NewIndent: Integer; @@ -906,18 +909,8 @@ begin end; procedure TSourceChangeCache.ConsistencyCheck; -{$IF FPC_FULLVERSION<30101} -var - CurResult: LongInt; -{$ENDIF} begin - {$IF FPC_FULLVERSION<30101} - CurResult:=FEntries.ConsistencyCheck; - if CurResult<>0 then - RaiseCatchableException(IntToStr(CurResult)); - {$ELSE} FEntries.ConsistencyCheck; - {$ENDIF} BeautifyCodeOptions.ConsistencyCheck; end; diff --git a/components/codetools/stdcodetools.pas b/components/codetools/stdcodetools.pas index 7f3d0a21ba..3fd2f0b387 100644 --- a/components/codetools/stdcodetools.pas +++ b/components/codetools/stdcodetools.pas @@ -50,11 +50,14 @@ uses {$IFDEF MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, TypInfo, CodeToolsStrConsts, FileProcs, CodeTree, CodeAtom, + Classes, SysUtils, TypInfo, Laz_AVL_Tree, + // Codetools + CodeToolsStrConsts, FileProcs, CodeTree, CodeAtom, FindDeclarationTool, IdentCompletionTool, PascalReaderTool, PascalParserTool, ExprEval, KeywordFuncLists, BasicCodeTools, LinkScanner, - CodeCache, AVL_Tree, LFMTrees, SourceChanger, - CustomCodeTool, CodeToolsStructs, LazFileUtils, LazFileCache; + CodeCache, LFMTrees, SourceChanger, CustomCodeTool, CodeToolsStructs, + // LazUtils + LazFileUtils, LazFileCache, AvgLvlTree; type TStandardCodeTool = class; diff --git a/components/codetools/unitdictionary.pas b/components/codetools/unitdictionary.pas index cf5b3dc6be..7c76756048 100644 --- a/components/codetools/unitdictionary.pas +++ b/components/codetools/unitdictionary.pas @@ -30,8 +30,12 @@ unit UnitDictionary; interface uses - Classes, SysUtils, AVL_Tree, BasicCodeTools, FileProcs, LazFileUtils, - CodeToolsStructs, FindDeclarationCache, CodeToolManager, CodeCache; + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + LazFileUtils, AvgLvlTree, + // Codetools + BasicCodeTools, FileProcs, CodeToolsStructs, FindDeclarationCache, + CodeToolManager, CodeCache; const // Version 2: added unit and group use count @@ -396,21 +400,10 @@ begin if UnitsByFilename.Count<>UnitsByName.Count then e('UnitsByFilename.Count<>UnitsByName.Count'); - {$IF FPC_FULLVERSION<30101} - if UnitGroupsByFilename.ConsistencyCheck<>0 then - e('UnitGroupsByFilename.ConsistencyCheck<>0'); - if UnitGroupsByName.ConsistencyCheck<>0 then - e('UnitGroupsByName.ConsistencyCheck<>0'); - if UnitsByName.ConsistencyCheck<>0 then - e('UnitsByName.ConsistencyCheck<>0'); - if UnitsByFilename.ConsistencyCheck<>0 then - e('UnitsByFilename.ConsistencyCheck<>0'); - {$ELSE} UnitGroupsByFilename.ConsistencyCheck; UnitGroupsByName.ConsistencyCheck; UnitsByName.ConsistencyCheck; UnitsByFilename.ConsistencyCheck; - {$ENDIF} IdentifiersCount:=0; // check UnitsByName @@ -426,12 +419,7 @@ begin e('unit '+CurUnit.Name+' in FUnitsByName not in FUnitsByFilename'); if CurUnit.Groups.Count=0 then e('unit '+CurUnit.Name+' has not group'); - {$IF FPC_FULLVERSION<30101} - if CurUnit.Groups.ConsistencyCheck<>0 then - e('unit '+CurUnit.Name+' UnitGroups.ConsistencyCheck<>0'); - {$ELSE} CurUnit.Groups.ConsistencyCheck; - {$ENDIF} if (LastUnit<>nil) and (CompareFilenames(LastUnit.Filename,CurUnit.Filename)=0) then e('unit '+CurUnit.Name+' exists twice: '+CurUnit.Filename); @@ -491,12 +479,7 @@ begin e('group '+Group.Name+' without filename'); if AVLFindPointer(FUnitGroupsByFilename,Group)=nil then e('group '+Group.Name+' in FUnitGroupsByName not in FUnitGroupsByFilename'); - {$IF FPC_FULLVERSION<30101} - if Group.Units.ConsistencyCheck<>0 then - e('group '+Group.Name+' Group.Units.ConsistencyCheck<>0'); - {$ELSE} Group.Units.ConsistencyCheck; - {$ENDIF} if (LastGroup<>nil) and (CompareFilenames(LastGroup.Filename,Group.Filename)=0) then e('group '+Group.Name+' exists twice: '+Group.Filename); diff --git a/components/education/educomppalette.pas b/components/education/educomppalette.pas index bf28f0d00c..842100e236 100644 --- a/components/education/educomppalette.pas +++ b/components/education/educomppalette.pas @@ -18,10 +18,15 @@ unit EduCompPalette; interface uses - Classes, SysUtils, LCLProc, FileUtil, LResources, Forms, Controls, Graphics, - Dialogs, ComCtrls, ExtCtrls, StdCtrls, AvgLvlTree, - FormEditingIntf, LazConfigStorage, IDEOptionsIntf, ComponentReg, - IDEImagesIntf, LazIDEIntf, LCLType, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, LCLType, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls, + ExtCtrls, StdCtrls, + // LazUtils + LazConfigStorage, AvgLvlTree, + // IdeIntf + FormEditingIntf, IDEOptionsIntf, ComponentReg, IDEImagesIntf, + // Education EduOptions; type @@ -442,7 +447,7 @@ end; function TEduComponentPaletteOptions.Save(Config: TConfigStorage): TModalResult; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringToStringItem; Cnt: Integer; begin diff --git a/components/education/edumenu.pas b/components/education/edumenu.pas index 60893fa1d2..df86b9e147 100644 --- a/components/education/edumenu.pas +++ b/components/education/edumenu.pas @@ -18,9 +18,14 @@ unit EduMenu; interface uses - Classes, SysUtils, LCLProc, FileUtil, LResources, Forms, StdCtrls, ComCtrls, - AvgLvlTree, Controls, ExtCtrls, - LazConfigStorage, IDEOptionsIntf, MenuIntf, IDEImagesIntf, LazIDEIntf, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, LResources, Forms, StdCtrls, ComCtrls, Controls, ExtCtrls, + // LazUtils + AvgLvlTree, LazConfigStorage, + // IdeIntf + IDEOptionsIntf, MenuIntf, IDEImagesIntf, + // Education EduOptions; type @@ -367,7 +372,7 @@ end; function TEduMenuOptions.Save(Config: TConfigStorage): TModalResult; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringToStringItem; Cnt: Integer; begin diff --git a/components/education/eduspeedbuttons.pas b/components/education/eduspeedbuttons.pas index 351b73e9dd..5c90388873 100644 --- a/components/education/eduspeedbuttons.pas +++ b/components/education/eduspeedbuttons.pas @@ -18,9 +18,16 @@ unit EduSpeedButtons; interface uses - Classes, SysUtils, Controls, Graphics, LResources, Forms, StdCtrls, ExtCtrls, - LazConfigStorage, ComCtrls, Buttons, IDEOptionsIntf, EduOptions, - ObjectInspector, LazIDEIntf, IDEImagesIntf, Dialogs, AvgLvlTree; + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Controls, Graphics, LResources, Forms, StdCtrls, ExtCtrls, Dialogs, + ComCtrls, Buttons, + // LazUtils + LazConfigStorage, AvgLvlTree, + // IdeIntf + IDEOptionsIntf, LazIDEIntf, IDEImagesIntf, + // Education + EduOptions; type @@ -139,7 +146,7 @@ end; function TEduSpeedButtonsOptions.Save(Config: TConfigStorage): TModalResult; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringToStringItem; Cnt: Integer; begin diff --git a/components/ideintf/componentreg.pas b/components/ideintf/componentreg.pas index 2984df5c54..1bc765689c 100644 --- a/components/ideintf/componentreg.pas +++ b/components/ideintf/componentreg.pas @@ -24,7 +24,7 @@ unit ComponentReg; interface uses - Classes, SysUtils, typinfo, AVL_Tree, fgl, + Classes, SysUtils, typinfo, Laz_AVL_Tree, fgl, {$IFDEF CustomIDEComps} CustomIDEComps, {$ENDIF} diff --git a/components/ideintf/componenttreeview.pas b/components/ideintf/componenttreeview.pas index f588f99af0..fcf1262ff9 100644 --- a/components/ideintf/componenttreeview.pas +++ b/components/ideintf/componenttreeview.pas @@ -24,8 +24,10 @@ unit ComponentTreeView; interface uses - Classes, SysUtils, TypInfo, LCLProc, AvgLvlTree, Dialogs, Controls, ComCtrls, - Graphics, ExtCtrls, + Classes, SysUtils, TypInfo, Laz_AVL_Tree, + // LCL + LCLProc, Dialogs, Controls, ComCtrls, Graphics, + // IdeIntf ObjInspStrConsts, PropEdits, PropEditUtils; type @@ -100,14 +102,14 @@ type TComponentWalker = class FComponentTV: TComponentTreeView; - FCandidates: TAvgLvlTree; + FCandidates: TAvlTree; FLookupRoot: TComponent; FNode: TTreeNode; protected procedure GetOwnedPersistents(AComponent: TComponent; AProc: TGetPersistentProc); public constructor Create( - ATreeView: TComponentTreeView; ACandidates: TAvgLvlTree; + ATreeView: TComponentTreeView; ACandidates: TAvlTree; ALookupRoot: TComponent; ANode: TTreeNode); procedure Walk(AComponent: TComponent); @@ -161,7 +163,7 @@ begin end; constructor TComponentWalker.Create(ATreeView: TComponentTreeView; - ACandidates: TAvgLvlTree; ALookupRoot: TComponent; ANode: TTreeNode); + ACandidates: TAvlTree; ALookupRoot: TComponent; ANode: TTreeNode); begin {$IFDEF VerboseComponentTVWalker} debugln(['TComponentWalker.Create ALookupRoot=',DbgSName(ALookupRoot)]); @@ -176,7 +178,7 @@ procedure TComponentWalker.Walk(AComponent: TComponent); var OldNode: TTreeNode; Candidate: TComponentCandidate; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; Root: TComponent; begin if csDestroying in AComponent.ComponentState then exit; @@ -617,7 +619,7 @@ end; procedure TComponentTreeView.RebuildComponentNodes; var - Candidates: TAvgLvlTree; // tree of TComponentCandidate sorted for aPersistent (CompareComponentCandidates) + Candidates: TAvlTree; // tree of TComponentCandidate sorted for aPersistent (CompareComponentCandidates) RootObject: TPersistent; RootComponent: TComponent absolute RootObject; @@ -684,7 +686,7 @@ begin RootObject:=nil; if RootObject <> nil then begin - Candidates:=TAvgLvlTree.Create(TListSortCompare(@CompareComponentCandidates)); + Candidates:=TAvlTree.Create(TListSortCompare(@CompareComponentCandidates)); try // first add the lookup root RootNode := Items.Add(nil, CreateNodeCaption(RootObject)); diff --git a/components/ideintf/ideexterntoolintf.pas b/components/ideintf/ideexterntoolintf.pas index ad3538794d..72975b8c61 100644 --- a/components/ideintf/ideexterntoolintf.pas +++ b/components/ideintf/ideexterntoolintf.pas @@ -14,8 +14,13 @@ unit IDEExternToolIntf; interface uses - Classes, SysUtils, Math, TypInfo, UTF8Process, AvgLvlTree, - ObjInspStrConsts, LazLogger, LazFileUtils, LazFileCache, Menus, LCLProc; + Classes, SysUtils, Math, Laz_AVL_Tree, + // LCL + LCLProc, + // LazUtils + UTF8Process, LazFileUtils, LazFileCache, + // IdeIntf + ObjInspStrConsts, LazLogger, Menus; const SubToolFPC = 'FPC'; @@ -188,11 +193,11 @@ type FMaxLine: integer; FMinLine: integer; protected - FTree: TAvgLvlTree; - FCurrent: TAvgLvlTreeNode; + FTree: TAvlTree; + FCurrent: TAvlTreeNode; function GetCurrent: TMessageLine; inline; public - constructor Create(Tree: TAvgLvlTree; const aFilename: string; + constructor Create(Tree: TAvlTree; const aFilename: string; aMinLine, aMaxLine: integer); function GetEnumerator: TMessageLineEnumerator; function MoveNext: boolean; @@ -215,10 +220,10 @@ type FMessageLineClass: TMessageLineClass; FOnMarksFixed: TETMarksFixedEvent; FOwner: TObject; - FSortedForSrcPos: TAvgLvlTree; // tree of TMessageLine sorted for Filename, Line, Column, OutputIndex, Index + FSortedForSrcPos: TAvlTree; // tree of TMessageLine sorted for Filename, Line, Column, OutputIndex, Index FUpdateSortedSrcPos: boolean; fChangedHandler: TMethodList; - fMarkedFixed: TAvgLvlTree; // list of TMessageLine + fMarkedFixed: TAvlTree; // list of TMessageLine function GetItems(Index: integer): TMessageLine; procedure SetBaseDirectory(const AValue: string); procedure LineChanged(Line: TMessageLine); @@ -1009,7 +1014,7 @@ begin Result:=TMessageLine(FCurrent.Data); end; -constructor TMessageLineEnumerator.Create(Tree: TAvgLvlTree; +constructor TMessageLineEnumerator.Create(Tree: TAvlTree; const aFilename: string; aMinLine, aMaxLine: integer); begin FTree:=Tree; @@ -1637,7 +1642,7 @@ begin InitCriticalSection(FCritSec); FMessageLineClass:=aMsgLineClass; fItems:=TFPList.Create; - FSortedForSrcPos:=TAvgLvlTree.Create(@CompareMsgLinesSrcPos); + FSortedForSrcPos:=TAvlTree.Create(@CompareMsgLinesSrcPos); FUpdateSortedSrcPos:=true; fChangedHandler:=TMethodList.Create; end; @@ -1752,14 +1757,14 @@ procedure TMessageLines.MarkFixed(MsgLine: TMessageLine); begin //debugln(['TMessageLines.MarkFixed ',MsgLine.Msg,' ',MsgLine.Line,',',MsgLine.Column]); if fMarkedFixed=nil then - fMarkedFixed:=TAvgLvlTree.Create; + fMarkedFixed:=TAvlTree.Create; if fMarkedFixed.Find(MsgLine)=nil then fMarkedFixed.Add(MsgLine); end; procedure TMessageLines.ApplyFixedMarks; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Msg: TMessageLine; List: TFPList; begin @@ -1810,7 +1815,7 @@ procedure TMessageLines.SourceLinesInserted(Filename: string; Line, // adjust Line numbers in all messages var CmpLine: TMessageLine; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; MsgLine: TMessageLine; begin if (Filename='') or (Count<=0) then exit; @@ -1842,7 +1847,7 @@ procedure TMessageLines.SourceLinesDeleted(Filename: string; FirstLine, // adjust Line numbers in all messages and mark lines in range as deleted var CmpLine: TMessageLine; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; MsgLine: TMessageLine; begin if (Filename='') or (Count<=0) then exit; diff --git a/components/lazcontrols/lvlgraphctrl.pas b/components/lazcontrols/lvlgraphctrl.pas index d39bb52cc8..e1c15a356d 100644 --- a/components/lazcontrols/lvlgraphctrl.pas +++ b/components/lazcontrols/lvlgraphctrl.pas @@ -15,10 +15,12 @@ unit LvlGraphCtrl; interface uses - Classes, SysUtils, types, math, typinfo, - FPimage, FPCanvas, - AvgLvlTree, LazLoggerBase, LMessages, LCLType, LResources, - GraphType, GraphMath, Graphics, Controls, ImgList, LCLIntf, Forms, Themes; + Classes, SysUtils, types, math, typinfo, FPimage, FPCanvas, Laz_AVL_Tree, + // LazUtils + LazLoggerBase, AvgLvlTree, + // LCL + LMessages, LCLType, LCLIntf, GraphType, GraphMath, Graphics, Controls, ImgList, + Forms, Themes; type TLazCtrlPalette = array of TFPColor; @@ -93,9 +95,9 @@ type function OutEdgeCount: integer; property OutEdges[Index: integer]: TLvlGraphEdge read GetOutEdges; function GetVisibleSourceNodes: TLvlGraphNodeArray; - function GetVisibleSourceNodesAsAVLTree: TAvgLvlTree; + function GetVisibleSourceNodesAsAVLTree: TAvlTree; function GetVisibleTargetNodes: TLvlGraphNodeArray; - function GetVisibleTargetNodesAsAVLTree: TAvgLvlTree; + function GetVisibleTargetNodesAsAVLTree: TAvlTree; property IndexInLevel: integer read GetIndexInLevel write SetIndexInLevel; property Level: TLvlGraphLevel read FLevel write SetLevel; property Selected: boolean read FSelected write SetSelected; @@ -136,9 +138,9 @@ type property Highlighted: boolean read FHighlighted write SetHighlighted; property DrawnAt: TRect read FDrawnAt; // last drawn with scrolling function GetVisibleSourceNodes: TLvlGraphNodeArray; - function GetVisibleSourceNodesAsAVLTree: TAvgLvlTree; + function GetVisibleSourceNodesAsAVLTree: TAvlTree; function GetVisibleTargetNodes: TLvlGraphNodeArray; - function GetVisibleTargetNodesAsAVLTree: TAvgLvlTree; + function GetVisibleTargetNodesAsAVLTree: TAvlTree; function AsString: string; end; TLvlGraphEdgeClass = class of TLvlGraphEdge; @@ -595,10 +597,10 @@ function GetDistancePointPoint(X1,Y1,X2,Y2: integer): integer; // level graph procedure LvlGraphMinimizeCrossings(Graph: TLvlGraph); overload; procedure LvlGraphHighlightNode(Node: TLvlGraphNode; - HighlightedElements: TAvgLvlTree; FollowIn, FollowOut: boolean); + HighlightedElements: TAvlTree; FollowIn, FollowOut: boolean); function CompareLGNodesByCenterPos(Node1, Node2: Pointer): integer; procedure DrawCurvedLvlLeftToRightEdge(Canvas: TFPCustomCanvas; x1, y1, x2, y2: integer); -function NodeAVLTreeToNodeArray(Nodes: TAvgLvlTree; RemoveHidden: boolean; FreeTree: boolean): TLvlGraphNodeArray; +function NodeAVLTreeToNodeArray(Nodes: TAvlTree; RemoveHidden: boolean; FreeTree: boolean): TLvlGraphNodeArray; function NodeArrayAsString(Nodes: TLvlGraphNodeArray): String; // debugging @@ -717,7 +719,7 @@ begin end; end; -procedure LvlGraphHighlightNode(Node: TLvlGraphNode; HighlightedElements: TAvgLvlTree; +procedure LvlGraphHighlightNode(Node: TLvlGraphNode; HighlightedElements: TAvlTree; FollowIn, FollowOut: boolean); var i: Integer; @@ -927,10 +929,10 @@ begin Freemem(Points); end; -function NodeAVLTreeToNodeArray(Nodes: TAvgLvlTree; RemoveHidden: boolean; +function NodeAVLTreeToNodeArray(Nodes: TAvlTree; RemoveHidden: boolean; FreeTree: boolean): TLvlGraphNodeArray; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; Node: TLvlGraphNode; i: Integer; begin @@ -1550,7 +1552,7 @@ var e: Integer; OtherNode: TMinXNode; k: Integer; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; P2PItem: PPointerToPointerItem; begin AVLNode:=FGraphNodeToNode.Tree.FindLowest; @@ -2568,11 +2570,11 @@ var n: Integer; CurNode: TLvlGraphNode; e: Integer; - HighlightedElements: TAvgLvlTree; + HighlightedElements: TAvlTree; Edge: TLvlGraphEdge; begin BeginUpdate; - HighlightedElements:=TAvgLvlTree.Create; + HighlightedElements:=TAvlTree.Create; try if Element is TLvlGraphNode then LvlGraphHighlightNode(TLvlGraphNode(Element),HighlightedElements,true,true) @@ -3062,7 +3064,7 @@ end; procedure TLvlGraph.CreateTopologicalLevels(HighLevels: boolean); {$DEFINE LvlGraphConsistencyCheck} var - ExtNodes: TAvgLvlTree; // tree of TGraphLevelerNode sorted by Node + ExtNodes: TAvlTree; // tree of TGraphLevelerNode sorted by Node MaxLevel: Integer; function GetExtNode(Node: TLvlGraphNode): TGraphLevelerNode; @@ -3117,7 +3119,7 @@ begin {$IFDEF LvlGraphConsistencyCheck} ConsistencyCheck(false); {$ENDIF} - ExtNodes:=TAvgLvlTree.Create(@CompareGraphLevelerNodes); + ExtNodes:=TAvlTree.Create(@CompareGraphLevelerNodes); try // init ExtNodes // clear BackEdge flags @@ -3181,7 +3183,7 @@ var l: Integer; LastNode: TLvlGraphNode; NextNode: TLvlGraphNode; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; P2PItem: PPointerToPointerItem; MergeAtSourceNode: Boolean; SourceInfo: PNodeInfo; @@ -3573,10 +3575,10 @@ begin Result:=NodeAVLTreeToNodeArray(GetVisibleSourceNodesAsAVLTree,true,true); end; -function TLvlGraphEdge.GetVisibleSourceNodesAsAVLTree: TAvgLvlTree; +function TLvlGraphEdge.GetVisibleSourceNodesAsAVLTree: TAvlTree; // return all visible nodes connected in Source direction var - Visited: TAvgLvlTree; + Visited: TAvlTree; procedure Search(Node: TLvlGraphNode); var @@ -3594,8 +3596,8 @@ var end; begin - Result:=TAvgLvlTree.Create; - Visited:=TAvgLvlTree.Create; + Result:=TAvlTree.Create; + Visited:=TAvlTree.Create; try Search(Source); finally @@ -3609,10 +3611,10 @@ begin Result:=NodeAVLTreeToNodeArray(GetVisibleTargetNodesAsAVLTree,true,true); end; -function TLvlGraphEdge.GetVisibleTargetNodesAsAVLTree: TAvgLvlTree; +function TLvlGraphEdge.GetVisibleTargetNodesAsAVLTree: TAvlTree; // return all visible nodes connected in Target direction var - Visited: TAvgLvlTree; + Visited: TAvlTree; procedure Search(Node: TLvlGraphNode); var @@ -3630,8 +3632,8 @@ var end; begin - Result:=TAvgLvlTree.Create; - Visited:=TAvgLvlTree.Create; + Result:=TAvlTree.Create; + Visited:=TAvlTree.Create; try Search(Source); finally @@ -3893,7 +3895,7 @@ begin Result:=NodeAVLTreeToNodeArray(GetVisibleSourceNodesAsAVLTree,true,true); end; -function TLvlGraphNode.GetVisibleSourceNodesAsAVLTree: TAvgLvlTree; +function TLvlGraphNode.GetVisibleSourceNodesAsAVLTree: TAvlTree; // return all visible nodes connected in Source direction procedure Search(Node: TLvlGraphNode); @@ -3912,7 +3914,7 @@ function TLvlGraphNode.GetVisibleSourceNodesAsAVLTree: TAvgLvlTree; var i: Integer; begin - Result:=TAvgLvlTree.Create; + Result:=TAvlTree.Create; for i:=0 to InEdgeCount-1 do Search(InEdges[i].Source); end; @@ -3923,10 +3925,10 @@ begin Result:=NodeAVLTreeToNodeArray(GetVisibleTargetNodesAsAVLTree,true,true); end; -function TLvlGraphNode.GetVisibleTargetNodesAsAVLTree: TAvgLvlTree; +function TLvlGraphNode.GetVisibleTargetNodesAsAVLTree: TAvlTree; // return all visible nodes connected in Target direction var - Visited: TAvgLvlTree; + Visited: TAvlTree; procedure Search(Node: TLvlGraphNode); var @@ -3946,8 +3948,8 @@ var var i: Integer; begin - Result:=TAvgLvlTree.Create; - Visited:=TAvgLvlTree.Create; + Result:=TAvlTree.Create; + Visited:=TAvlTree.Create; try for i:=0 to OutEdgeCount-1 do Search(OutEdges[i].Target); diff --git a/components/lazutils/avglvltree.pas b/components/lazutils/avglvltree.pas index bfbe6c70b9..6f1d2fbbeb 100644 --- a/components/lazutils/avglvltree.pas +++ b/components/lazutils/avglvltree.pas @@ -9,18 +9,9 @@ Author: Mattias Gaertner Abstract: - The Tree is sorted ascending from left to right. That means - Compare(Node.Left,Node.Right) <= 0 for all nodes. - - TAvgLvlTree is an Average Level binary Tree. This binary tree is always - balanced, so that inserting, deleting and finding a node is performed in - O(log(#Nodes)). - - Duplicates are supported. - Order of duplicates is kept, that means the order is stable. - - The compare function must define a total order, that means transitive - A >= B and B>=C means A >= C for all nodes A,B,C + Defines classes that use TAvlTree for data storage, and enumerators for them. + TAvlTree is an Average Level binary Tree, + located in unit AVL_Tree in FPC packages. } unit AvgLvlTree; @@ -29,167 +20,39 @@ unit AvgLvlTree; interface uses - Classes, SysUtils; + Classes, SysUtils, Laz_AVL_Tree, + LazFileUtils, LazDbgLog; type - TAvgLvlTree = class; - - TObjectSortCompare = function(Tree: TAvgLvlTree; Data1, Data2: Pointer - ): integer of object; - { TAvgLvlTreeNode } - - TAvgLvlTreeNode = class - public - Parent, Left, Right: TAvgLvlTreeNode; - Balance: integer; // = RightDepth-LeftDepth -2..+2, after balancing: -1,0,+1 - Data: Pointer; - function Successor: TAvgLvlTreeNode; // next right - function Precessor: TAvgLvlTreeNode; // next left - procedure Clear; - function TreeDepth: integer; // longest WAY down. e.g. only one node => 0 ! - procedure ConsistencyCheck(Tree: TAvgLvlTree); virtual; - function GetCount: SizeInt; - end; - TAvgLvlTreeNodeClass = class of TAvgLvlTreeNode; - PAvgLvlTreeNode = ^TAvgLvlTreeNode; - - { TAvgLvlTreeNodeEnumerator - left to right, low to high } - - TAvgLvlTreeNodeEnumerator = class - protected - FCurrent: TAvgLvlTreeNode; - FLowToHigh: boolean; - FTree: TAvgLvlTree; - public - constructor Create(Tree: TAvgLvlTree; aLowToHigh: boolean = true); - function GetEnumerator: TAvgLvlTreeNodeEnumerator; inline; - function MoveNext: Boolean; - property Current: TAvgLvlTreeNode read FCurrent; - property LowToHigh: boolean read FLowToHigh; - end; - - { TAvgLvlTree } - - TAvgLvlTree = class - private - FOwnsObjects: boolean; - protected - fRoot: TAvgLvlTreeNode; - FCount: SizeInt; - FNodeClass: TAvgLvlTreeNodeClass; - FOnCompare: TListSortCompare; - FOnObjectCompare: TObjectSortCompare; - procedure BalanceAfterInsert(ANode: TAvgLvlTreeNode); - procedure BalanceAfterDelete(ANode: TAvgLvlTreeNode); - procedure DeletingNode({%H-}aNode: TAvgLvlTreeNode); virtual; - function FindInsertPos(Data: Pointer): TAvgLvlTreeNode; - procedure Init; virtual; - procedure NodeAdded({%H-}aNode: TAvgLvlTreeNode); virtual; - procedure RotateLeft(aNode: TAvgLvlTreeNode); virtual; - procedure RotateRight(aNode: TAvgLvlTreeNode); virtual; - procedure SwitchPositionWithSuccessor(aNode, aSuccessor: TAvgLvlTreeNode); virtual; - procedure SetOnCompare(const AValue: TListSortCompare); - procedure SetOnObjectCompare(const AValue: TObjectSortCompare); - procedure SetCompares(const NewCompare: TListSortCompare; - const NewObjectCompare: TObjectSortCompare); - public - constructor Create(const OnCompareMethod: TListSortCompare); - constructor CreateObjectCompare(const OnCompareMethod: TObjectSortCompare); - constructor Create; - destructor Destroy; override; - property OnCompare: TListSortCompare read FOnCompare write SetOnCompare; - property OnObjectCompare: TObjectSortCompare read FOnObjectCompare write SetOnObjectCompare; - property NodeClass: TAvgLvlTreeNodeClass read FNodeClass write FNodeClass; // used for new nodes - function NewNode: TAvgLvlTreeNode; virtual; // create a node, not connected, outside the tree - procedure DisposeNode(aNode: TAvgLvlTreeNode); virtual; // free a node, already disconnected from the tree - property OwnsObjects: boolean read FOwnsObjects write FOwnsObjects; - - // add, delete, remove, move - procedure Add(ANode: TAvgLvlTreeNode); - function Add(Data: Pointer): TAvgLvlTreeNode; - function AddAscendingSequence(Data: Pointer; LastAdded: TAvgLvlTreeNode; - var Successor: TAvgLvlTreeNode): TAvgLvlTreeNode; - procedure Delete(ANode: TAvgLvlTreeNode); - function Remove(Data: Pointer): boolean; - function RemovePointer(Data: Pointer): boolean; - procedure MoveDataLeftMost(var ANode: TAvgLvlTreeNode); - procedure MoveDataRightMost(var ANode: TAvgLvlTreeNode); - procedure Clear; - procedure FreeAndClear; - procedure FreeAndDelete(ANode: TAvgLvlTreeNode); - function Equals(Obj: TObject): boolean; override; // same as IsEqual(aTree,false) - function IsEqual(aTree: TAvgLvlTree; CheckDataPointer: boolean): boolean; // checks only keys or Data (references), not the data itself, O(n) - procedure Assign(aTree: TAvgLvlTree); virtual; // clear and copy all Data (references), O(n) - - // search - property Root: TAvgLvlTreeNode read fRoot; - property Count: SizeInt read FCount; - function Compare(Data1, Data2: Pointer): integer; inline; - function Find(Data: Pointer): TAvgLvlTreeNode; // O(log(n)) - function FindKey(Key: Pointer; - const OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; // O(log(n)) - function FindNearestKey(Key: Pointer; - const OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; // O(log(n)) - function FindSuccessor(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode; inline; - function FindPrecessor(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode; inline; - function FindLowest: TAvgLvlTreeNode; // O(log(n)) - function FindHighest: TAvgLvlTreeNode; // O(log(n)) - function FindNearest(Data: Pointer): TAvgLvlTreeNode; // O(log(n)) - // search in a tree with duplicates (duplicate means here: Compare function returns 0) - function FindPointer(Data: Pointer): TAvgLvlTreeNode; // O(log(n))+k (k= maximum number of same values) - function FindLeftMost(Data: Pointer): TAvgLvlTreeNode; - function FindRightMost(Data: Pointer): TAvgLvlTreeNode; - function FindLeftMostKey(Key: Pointer; - const OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; - function FindRightMostKey(Key: Pointer; - const OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; - function FindLeftMostSameKey(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode; - function FindRightMostSameKey(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode; - - // enumerators - function GetEnumerator: TAvgLvlTreeNodeEnumerator; - function GetEnumeratorHighToLow: TAvgLvlTreeNodeEnumerator; - - // consistency - procedure ConsistencyCheck; virtual; - procedure WriteReportToStream(s: TStream); - function NodeToReportStr(aNode: TAvgLvlTreeNode): string; virtual; - function ReportAsString: string; - end; - TAvgLvlTreeClass = class of TAvgLvlTree; - PAvgLvlTree = ^TAvgLvlTree; - -type - TIndexedAVLTreeNode = class(TAvgLvlTreeNode) + TIndexedAVLTreeNode = class(TAvlTreeNode) public LeftCount: SizeInt; // number of nodes in the Left side end; { TIndexedAVLTree } - TIndexedAVLTree = class(TAvgLvlTree) + TIndexedAVLTree = class(TAvlTree) private function GetItems(Index: SizeInt): Pointer; inline; protected fLastIndex: SizeInt; fLastNode: TIndexedAVLTreeNode; - procedure DeletingNode(aNode: TAvgLvlTreeNode); override; + procedure DeletingNode(aNode: TAvlTreeNode); override; procedure Init; override; - procedure NodeAdded(aNode: TAvgLvlTreeNode); override; - procedure RotateLeft(aNode: TAvgLvlTreeNode); override; - procedure RotateRight(aNode: TAvgLvlTreeNode); override; - procedure SwitchPositionWithSuccessor(aNode, aSuccessor: TAvgLvlTreeNode); override; + procedure NodeAdded(aNode: TAvlTreeNode); override; + procedure RotateLeft(aNode: TAvlTreeNode); override; + procedure RotateRight(aNode: TAvlTreeNode); override; + procedure SwitchPositionWithSuccessor(aNode, aSuccessor: TAvlTreeNode); override; public function GetNodeAtIndex(Index: integer): TIndexedAVLTreeNode; - function NodeToIndex(Node: TAvgLvlTreeNode): SizeInt; + function NodeToIndex(Node: TAvlTreeNode): SizeInt; function IndexOf(Data: Pointer): SizeInt; property Items[Index: SizeInt]: Pointer read GetItems; default; procedure ConsistencyCheck; override; - function NodeToReportStr(aNode: TAvgLvlTreeNode): string; override; + function NodeToReportStr(aNode: TAvlTreeNode): string; override; end; -type { TPointerToPointerTree - Associative array } TPointerToPointerItem = record @@ -203,11 +66,11 @@ type TPointerToPointerEnumerator = class protected FHighToLow: boolean; - FTree: TAvgLvlTree; - FCurrent: TAvgLvlTreeNode; + FTree: TAvlTree; + FCurrent: TAvlTreeNode; function GetCurrent: PPointerToPointerItem; inline; public - constructor Create(Tree: TAvgLvlTree); + constructor Create(Tree: TAvlTree); function GetEnumerator: TPointerToPointerEnumerator; inline; function MoveNext: Boolean; property Current: PPointerToPointerItem read GetCurrent; @@ -216,12 +79,12 @@ type TPointerToPointerTree = class private - FItems: TAvgLvlTree; + FItems: TAvlTree; function GetCount: SizeInt; inline; function GetValues(const Key: Pointer): Pointer; procedure SetValues(const Key: Pointer; const AValue: Pointer); - function FindNode(const Key: Pointer): TAvgLvlTreeNode; - function GetNode(Node: TAvgLvlTreeNode; out Key, Value: Pointer): Boolean; + function FindNode(const Key: Pointer): TAvlTreeNode; + function GetNode(Node: TAvlTreeNode; out Key, Value: Pointer): Boolean; public constructor Create; destructor Destroy; override; @@ -238,21 +101,13 @@ type function GetPrev(const Key: Pointer; out PrevKey, PrevValue: Pointer): Boolean; property Count: SizeInt read GetCount; property Values[const Key: Pointer]: Pointer read GetValues write SetValues; default; - property Tree: TAvgLvlTree read FItems; // tree of PPointerToPointerItem + property Tree: TAvlTree read FItems; // tree of PPointerToPointerItem // enumerators function GetEnumerator: TPointerToPointerEnumerator; function GetEnumeratorHighToLow: TPointerToPointerEnumerator; end; - -function ComparePointerToPointerItems(Data1, Data2: Pointer): integer; -function ComparePointerWithPtrToPtrItem(Key, Data: Pointer): Integer; - - -type - TStringMap = class; - TStringMapItem = record Name: string; end; @@ -262,10 +117,10 @@ type TCustomStringMapEnumerator = class protected - FTree: TAvgLvlTree; - FCurrent: TAvgLvlTreeNode; + FTree: TAvlTree; + FCurrent: TAvlTreeNode; public - constructor Create(Tree: TAvgLvlTree); + constructor Create(Tree: TAvlTree); function MoveNext: boolean; // "Current" is implemented by the descendant classes end; @@ -275,7 +130,7 @@ type TCustomStringMap = class private FCompareKeyItemFunc: TListSortCompare; - FTree: TAvgLvlTree;// tree of PStringMapItem + FTree: TAvlTree;// tree of PStringMapItem FCaseSensitive: boolean; function GetCompareItemsFunc: TListSortCompare; protected @@ -292,16 +147,17 @@ type procedure GetNames(List: TStrings); procedure Remove(const Name: string); virtual; property CaseSensitive: boolean read FCaseSensitive; - property Tree: TAvgLvlTree read FTree; // tree of PStringMapItem - function FindNode(const s: string): TAvgLvlTreeNode; + property Tree: TAvlTree read FTree; // tree of PStringMapItem + function FindNode(const s: string): TAvlTreeNode; function Count: SizeInt; inline; function Equals(OtherTree: TCustomStringMap): boolean; reintroduce; procedure Assign(Source: TCustomStringMap); virtual; + function CalcMemSize: PtrUint; virtual; property CompareItemsFunc: TListSortCompare read GetCompareItemsFunc; property CompareKeyItemFunc: TListSortCompare read FCompareKeyItemFunc; - procedure SetCompareFuncs( - const NewCompareItemsFunc, NewCompareKeyItemFunc: TListSortCompare; - NewCaseSensitive: boolean); + procedure SetCompareFuncs(const NewCompareItemsFunc, + NewCompareKeyItemFunc: TListSortCompare + {; NewCaseSensitive: boolean}); end; { TStringMapEnumerator } @@ -352,7 +208,7 @@ type procedure DisposeItem(p: PStringMapItem); override; function ItemsAreEqual(p1, p2: PStringMapItem): boolean; override; function CreateCopy(Src: PStringMapItem): PStringMapItem; override; - function GetNode(Node: TAvgLvlTreeNode; out Name, Value: string): Boolean; + function GetNode(Node: TAvlTreeNode; out Name, Value: string): Boolean; public function GetString(const Name: string; out Value: string): boolean; procedure Add(const Name, Value: string); inline; @@ -362,8 +218,10 @@ type procedure AddNames(List: TStrings); procedure Delete(const Name: string); inline; deprecated; // use Remove property Values[const s: string]: string read GetValues write SetValues; default; + function GetNodeData(Node: TAVLTreeNode): PStringToStringItem; inline; function AsText: string; procedure Assign(Source: TCustomStringMap); override; + function CalcMemSize: PtrUint; override; function GetEnumerator: TStringToStringTreeEnumerator; function GetFirst(out Name, Value: string): Boolean; function GetLast(out Name, Value: string): Boolean; @@ -371,21 +229,19 @@ type function GetPrev(const Name: string; out PrevName, PrevValue: string): Boolean; end; - { TStringToPointerTree - Associative array from string to pointer } - - TStringToPointerItem = record + TStringToPointerTreeItem = record Name: string; Value: Pointer; end; - PStringToPointerItem = ^TStringToPointerItem; + PStringToPointerTreeItem = ^TStringToPointerTreeItem; { TStringToPointerTreeEnumerator } - TStringToPointerTreeEnumerator = class(TCustomStringMapEnumerator) + TStringToPointerTreeEnumerator = class(TStringMapEnumerator) private - function GetCurrent: PStringToPointerItem; inline; + function GetCurrent: PStringToPointerTreeItem; public - property Current: PStringToPointerItem read GetCurrent; + property Current: PStringToPointerTreeItem read GetCurrent; end; TStringToPointerTree = class(TCustomStringMap) @@ -399,22 +255,44 @@ type function CreateCopy(Src: PStringMapItem): PStringMapItem; override; public function GetData(const Name: string; out Value: Pointer): boolean; - property Values[const s: string]: Pointer read GetValues write SetValues; default; + function GetNodeData(Node: TAVLTreeNode): PStringToPointerTreeItem; inline; function GetEnumerator: TStringToPointerTreeEnumerator; property FreeValues: boolean read FFreeValues write FFreeValues; + property Values[const s: string]: Pointer read GetValues write SetValues; default; end; + { TFilenameToStringTree } + + TFilenameToStringTree = class(TStringToStringTree) + public + constructor Create(CaseInsensitive: boolean); // false = system default + end; + + { TFilenameToPointerTree } + + TFilenameToPointerTree = class(TStringToPointerTree) + public + constructor Create(CaseInsensitive: boolean); // false = system default + end; + + +function ComparePointer(Data1, Data2: Pointer): integer; +function ComparePointerToPointerItems(Data1, Data2: Pointer): integer; +function ComparePointerWithPtrToPtrItem(Key, Data: Pointer): Integer; + function CompareStringToStringItems(Data1, Data2: Pointer): integer; function CompareAnsiStringWithStrToStrItem(Key, Data: Pointer): Integer; function CompareStringToStringItemsI(Data1, Data2: Pointer): integer; function CompareAnsiStringWithStrToStrItemI(Key, Data: Pointer): Integer; -function ComparePointer(Data1, Data2: Pointer): integer; +function CompareFilenameToStringItems(Data1, Data2: Pointer): integer; +function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer): integer; +function CompareFilenameToStringItemsI(Data1, Data2: Pointer): integer; +function CompareFilenameAndFilenameToStringTreeItemI(Key, Data: Pointer): integer; implementation - function ComparePointer(Data1, Data2: Pointer): integer; begin if Data1>Data2 then Result:=-1 @@ -455,6 +333,29 @@ begin Result:=CompareText(AnsiString(Key),PStringMapItem(Data)^.Name); end; +function CompareFilenameToStringItems(Data1, Data2: Pointer): integer; +begin + Result:=CompareFilenames(PStringToStringItem(Data1)^.Name, + PStringToStringItem(Data2)^.Name); +end; + +function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer): integer; +begin + Result:=CompareFilenames(String(Key),PStringToStringItem(Data)^.Name); +end; + +function CompareFilenameToStringItemsI(Data1, Data2: Pointer): integer; +begin + Result:=CompareFilenamesIgnoreCase(PStringToStringItem(Data1)^.Name, + PStringToStringItem(Data2)^.Name); +end; + +function CompareFilenameAndFilenameToStringTreeItemI(Key, Data: Pointer): integer; +begin + Result:=CompareFilenamesIgnoreCase(String(Key), + PStringToStringItem(Data)^.Name); +end; + { TPointerToPointerEnumerator } function TPointerToPointerEnumerator.GetCurrent: PPointerToPointerItem; @@ -462,7 +363,7 @@ begin Result:=PPointerToPointerItem(FCurrent.Data); end; -constructor TPointerToPointerEnumerator.Create(Tree: TAvgLvlTree); +constructor TPointerToPointerEnumerator.Create(Tree: TAvlTree); begin FTree:=Tree; end; @@ -488,57 +389,27 @@ begin Result:=FCurrent<>nil; end; -{ TAvgLvlTreeNodeEnumerator } - -constructor TAvgLvlTreeNodeEnumerator.Create(Tree: TAvgLvlTree; - aLowToHigh: boolean); -begin - FTree:=Tree; - FLowToHigh:=aLowToHigh; -end; - -function TAvgLvlTreeNodeEnumerator.GetEnumerator: TAvgLvlTreeNodeEnumerator; -begin - Result:=Self; -end; - -function TAvgLvlTreeNodeEnumerator.MoveNext: Boolean; -begin - if FLowToHigh then begin - if FCurrent<>nil then - FCurrent:=FCurrent.Successor - else - FCurrent:=FTree.FindLowest; - end else begin - if FCurrent<>nil then - FCurrent:=FCurrent.Precessor - else - FCurrent:=FTree.FindHighest; - end; - Result:=FCurrent<>nil; -end; - { TStringToPointerTree } function TStringToPointerTree.GetValues(const s: string): Pointer; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(s); if Node<>nil then - Result:=PStringToPointerItem(Node.Data)^.Value + Result:=PStringToPointerTreeItem(Node.Data)^.Value else Result:=nil end; procedure TStringToPointerTree.SetValues(const s: string; const AValue: Pointer); var - Node: TAvgLvlTreeNode; - Item: PStringToPointerItem; + Node: TAvlTreeNode; + Item: PStringToPointerTreeItem; begin Node:=FindNode(s); if Node<>nil then begin - Item:=PStringToPointerItem(Node.Data); + Item:=PStringToPointerTreeItem(Node.Data); if Item^.Value=AValue then exit; if FreeValues then TObject(Item^.Value).Free; @@ -553,7 +424,7 @@ end; procedure TStringToPointerTree.DisposeItem(p: PStringMapItem); var - Item: PStringToPointerItem absolute p; + Item: PStringToPointerTreeItem absolute p; begin if FreeValues then TObject(Item^.Value).Free; @@ -562,8 +433,8 @@ end; function TStringToPointerTree.ItemsAreEqual(p1, p2: PStringMapItem): boolean; var - Item1: PStringToPointerItem absolute p1; - Item2: PStringToPointerItem absolute p2; + Item1: PStringToPointerTreeItem absolute p1; + Item2: PStringToPointerTreeItem absolute p2; begin Result:=(Item1^.Name=Item2^.Name) and (Item1^.Value=Item2^.Value); @@ -571,8 +442,8 @@ end; function TStringToPointerTree.CreateCopy(Src: PStringMapItem): PStringMapItem; var - SrcItem: PStringToPointerItem absolute Src; - NewItem: PStringToPointerItem; + SrcItem: PStringToPointerTreeItem absolute Src; + NewItem: PStringToPointerTreeItem; begin New(NewItem); NewItem^.Name:=SrcItem^.Name; @@ -582,34 +453,58 @@ end; function TStringToPointerTree.GetData(const Name: string; out Value: Pointer): boolean; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Name); if Node<>nil then begin - Value:=PStringToPointerItem(Node.Data)^.Value; + Value:=PStringToPointerTreeItem(Node.Data)^.Value; Result:=true; end else begin Result:=false; end; end; +function TStringToPointerTree.GetNodeData(Node: TAVLTreeNode): PStringToPointerTreeItem; +begin + Result:=PStringToPointerTreeItem(Node.Data); +end; + function TStringToPointerTree.GetEnumerator: TStringToPointerTreeEnumerator; begin Result:=TStringToPointerTreeEnumerator.Create(FTree); end; -{ TStringToPointerTreeEnumerator } +{ TFilenameToStringTree } -function TStringToPointerTreeEnumerator.GetCurrent: PStringToPointerItem; +constructor TFilenameToStringTree.Create(CaseInsensitive: boolean); begin - Result:=PStringToPointerItem(FCurrent.Data); + inherited Create(true); + if CaseInsensitive then + SetCompareFuncs(@CompareFilenameToStringItemsI, + @CompareFilenameAndFilenameToStringTreeItemI) + else + SetCompareFuncs(@CompareFilenameToStringItems, + @CompareFilenameAndFilenameToStringTreeItem); +end; + +{ TFilenameToPointerTree } + +constructor TFilenameToPointerTree.Create(CaseInsensitive: boolean); +begin + inherited Create(true); + if CaseInsensitive then + SetCompareFuncs(@CompareFilenameToStringItemsI, + @CompareFilenameAndFilenameToStringTreeItemI) + else + SetCompareFuncs(@CompareFilenameToStringItems, + @CompareFilenameAndFilenameToStringTreeItem); end; { TStringToStringTree } function TStringToStringTree.GetValues(const s: string): string; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(s); if Node<>nil then @@ -620,7 +515,7 @@ end; procedure TStringToStringTree.SetValues(const s: string; const AValue: string); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringToStringItem; begin Node:=FindNode(s); @@ -663,8 +558,8 @@ begin Result:=PStringMapItem(NewItem); end; -function TStringToStringTree.GetNode(Node: TAvgLvlTreeNode; out Name, - Value: string): Boolean; +function TStringToStringTree.GetNode(Node: TAvlTreeNode; out Name, Value: string + ): Boolean; var Item: PStringToStringItem; begin @@ -682,7 +577,7 @@ end; function TStringToStringTree.GetString(const Name: string; out Value: string): boolean; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Name); if Node<>nil then begin @@ -735,6 +630,11 @@ begin Remove(Name); end; +function TStringToStringTree.GetNodeData(Node: TAVLTreeNode): PStringToStringItem; +begin + Result:=PStringToStringItem(Node.Data); +end; + function TStringToStringTree.GetFirst(out Name, Value: string): Boolean; begin Result:=GetNode(Tree.FindLowest,Name,Value); @@ -748,7 +648,7 @@ end; function TStringToStringTree.GetNext(const Name: string; out NextName, NextValue: string): Boolean; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Name); if Node<>nil then @@ -759,7 +659,7 @@ end; function TStringToStringTree.GetPrev(const Name: string; out PrevName, PrevValue: string): Boolean; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Name); if Node<>nil then @@ -769,7 +669,7 @@ end; function TStringToStringTree.AsText: string; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringToStringItem; begin Result:=''; @@ -783,7 +683,7 @@ end; procedure TStringToStringTree.Assign(Source: TCustomStringMap); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringToStringItem; begin if (Source=nil) or (Source.ClassType<>ClassType) then @@ -797,11 +697,36 @@ begin end; end; +function TStringToStringTree.CalcMemSize: PtrUint; +var + Node: TAvlTreeNode; + Item: PStringToStringItem; +begin + Result:=PtrUInt(InstanceSize) + +PtrUInt(FTree.InstanceSize) + +PtrUint(FTree.Count)*SizeOf(TAvlTreeNode); + Node:=FTree.FindLowest; + while Node<>nil do begin + Item:=PStringToStringItem(Node.Data); + inc(Result,MemSizeString(Item^.Name) + +MemSizeString(Item^.Value) + +SizeOf(TStringToStringItem)); + Node:=FTree.FindSuccessor(Node); + end; +end; + function TStringToStringTree.GetEnumerator: TStringToStringTreeEnumerator; begin Result:=TStringToStringTreeEnumerator.Create(FTree); end; +{ TStringToPointerTreeEnumerator } + +function TStringToPointerTreeEnumerator.GetCurrent: PStringToPointerTreeItem; +begin + Result:=PStringToPointerTreeItem(FCurrent.Data); +end; + { TStringMapEnumerator } function TStringMapEnumerator.GetCurrent: string; @@ -826,7 +751,7 @@ end; procedure TStringMap.Add(const Name: string); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; NewItem: PStringMapItem; begin Node:=FindNode(Name); @@ -851,1178 +776,6 @@ begin Result:=PStringToStringItem(FCurrent.Data); end; -{ TAvgLvlTree } - -function TAvgLvlTree.Compare(Data1, Data2: Pointer): integer; -begin - if Assigned(FOnCompare) then - Result:=FOnCompare(Data1,Data2) - else - Result:=FOnObjectCompare(Self,Data1,Data2); -end; - -function TAvgLvlTree.FindSuccessor(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode; -begin - if ANode<>nil then - Result:=ANode.Successor - else - Result:=nil; -end; - -function TAvgLvlTree.FindPrecessor(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode; -begin - if ANode<>nil then - Result:=ANode.Precessor - else - Result:=nil; -end; - -function TAvgLvlTree.Add(Data: Pointer): TAvgLvlTreeNode; -begin - Result:=NewNode; - Result.Data:=Data; - Add(Result); -end; - -function TAvgLvlTree.AddAscendingSequence(Data: Pointer; - LastAdded: TAvgLvlTreeNode; var Successor: TAvgLvlTreeNode): TAvgLvlTreeNode; -{ This is an optimized version of "Add" for adding an ascending sequence of - nodes. - It uses the LastAdded and Successor to skip searching for an insert position. - For nodes with same value the order of the sequence is kept. - - Usage: - LastNode:=nil; // TAvgLvlTreeNode - Successor:=nil; // TAvgLvlTreeNode - for i:=1 to 1000 do - LastNode:=Tree.AddAscendingSequence(TItem.Create(i),LastNode,Successor); -} -var - InsertPos: TAvgLvlTreeNode; -begin - Result:=NewNode; - Result.Data:=Data; - if (LastAdded<>nil) and (Compare(LastAdded.Data,Data)<=0) - and ((Successor=nil) or (Compare(Data,Successor.Data)<=0)) then begin - // Data is between LastAdded and Successor - inc(FCount); - if LastAdded.Right=nil then begin - Result.Parent:=LastAdded; - LastAdded.Right:=Result; - end else begin - InsertPos:=LastAdded.Right; - while InsertPos.Left<>nil do - InsertPos:=InsertPos.Left; - Result.Parent:=InsertPos; - InsertPos.Left:=Result; - end; - NodeAdded(Result); - BalanceAfterInsert(Result); - end else begin - // normal Add - Add(Result); - Successor:=Result.Successor; - end; -end; - -function TAvgLvlTree.NewNode: TAvgLvlTreeNode; -begin - Result:=NodeClass.Create; -end; - -procedure TAvgLvlTree.DisposeNode(aNode: TAvgLvlTreeNode); -begin - if OwnsObjects then begin - TObject(aNode.Data).Free; - aNode.Data := nil; - end; - aNode.Free; -end; - -procedure TAvgLvlTree.Add(ANode: TAvgLvlTreeNode); -// add a node. If there are already nodes with the same value it will be -// inserted rightmost -var InsertPos: TAvgLvlTreeNode; - InsertComp: integer; -begin - ANode.Left:=nil; - ANode.Right:=nil; - inc(FCount); - if fRoot<>nil then begin - InsertPos:=FindInsertPos(ANode.Data); - InsertComp:=Compare(ANode.Data,InsertPos.Data); - ANode.Parent:=InsertPos; - if InsertComp<0 then begin - // insert to the left - InsertPos.Left:=ANode; - end else begin - // insert to the right - InsertPos.Right:=ANode; - end; - NodeAdded(ANode); - BalanceAfterInsert(ANode); - end else begin - fRoot:=ANode; - ANode.Parent:=nil; - NodeAdded(ANode); - end; -end; - -function TAvgLvlTree.FindLowest: TAvgLvlTreeNode; -begin - Result:=fRoot; - if Result<>nil then - while Result.Left<>nil do Result:=Result.Left; -end; - -function TAvgLvlTree.FindHighest: TAvgLvlTreeNode; -begin - Result:=fRoot; - if Result<>nil then - while Result.Right<>nil do Result:=Result.Right; -end; - -procedure TAvgLvlTree.BalanceAfterDelete(ANode: TAvgLvlTreeNode); -var - OldParent, OldRight, OldRightLeft, OldLeft, OldLeftRight: TAvgLvlTreeNode; -begin - while ANode<>nil do begin - if ((ANode.Balance=+1) or (ANode.Balance=-1)) then exit; - OldParent:=ANode.Parent; - if (ANode.Balance=0) then begin - // Treeheight has decreased by one - if (OldParent=nil) then - exit; - if(OldParent.Left=ANode) then - Inc(OldParent.Balance) - else - Dec(OldParent.Balance); - ANode:=OldParent; - end else if (ANode.Balance=+2) then begin - // Node is overweighted to the right - OldRight:=ANode.Right; - if (OldRight.Balance>=0) then begin - // OldRight.Balance is 0 or -1 - // rotate ANode,OldRight left - RotateLeft(ANode); - ANode.Balance:=(1-OldRight.Balance); // toggle 0 and 1 - Dec(OldRight.Balance); - ANode:=OldRight; - end else begin - // OldRight.Balance=-1 - { double rotate - = rotate OldRightLeft,OldRight right - and then rotate ANode,OldRightLeft left - OldParent OldParent - | | - ANode OldRightLeft - \ / \ - OldRight => ANode OldRight - / \ / - OldRightLeft OldRightLeftLeft OldRightLeftRight - / \ - OldRightLeftLeft OldRightLeftRight - } - OldRightLeft:=OldRight.Left; - RotateRight(OldRight); - RotateLeft(ANode); - if (OldRightLeft.Balance<=0) then - ANode.Balance:=0 - else - ANode.Balance:=-1; - if (OldRightLeft.Balance>=0) then - OldRight.Balance:=0 - else - OldRight.Balance:=+1; - OldRightLeft.Balance:=0; - ANode:=OldRightLeft; - end; - end else begin - // Node.Balance=-2 - // Node is overweighted to the left - OldLeft:=ANode.Left; - if (OldLeft.Balance<=0) then begin - // rotate OldLeft,ANode right - RotateRight(ANode); - ANode.Balance:=(-1-OldLeft.Balance); // toggle 0 and -1 - Inc(OldLeft.Balance); - ANode:=OldLeft; - end else begin - // OldLeft.Balance = 1 - { double rotate left right - = rotate OldLeft,OldLeftRight left - and then rotate OldLeft,ANode right - OldParent OldParent - | | - ANode OldLeftRight - / / \ - OldLeft => OldLeft ANode - \ \ / - OldLeftRight OldLeftRightLeft OldLeftRightRight - / \ - OldLeftRightLeft OldLeftRightRight - } - OldLeftRight:=OldLeft.Right; - RotateLeft(OldLeft); - RotateRight(ANode); - if (OldLeftRight.Balance>=0) then - ANode.Balance:=0 - else - ANode.Balance:=+1; - if (OldLeftRight.Balance<=0) then - OldLeft.Balance:=0 - else - OldLeft.Balance:=-1; - OldLeftRight.Balance:=0; - ANode:=OldLeftRight; - end; - end; - end; -end; - -procedure TAvgLvlTree.DeletingNode(aNode: TAvgLvlTreeNode); -// called by Delete, before disconnecting from tree -// Node.Left=nil or Node.Right=nil -begin - // for user overrides -end; - -procedure TAvgLvlTree.BalanceAfterInsert(ANode: TAvgLvlTreeNode); -var - OldParent, OldRight, OldLeft: TAvgLvlTreeNode; -begin - OldParent:=ANode.Parent; - while (OldParent<>nil) do begin - if (OldParent.Left=ANode) then begin - // Node is left child - dec(OldParent.Balance); - if (OldParent.Balance=0) then exit; - if (OldParent.Balance=-1) then begin - ANode:=OldParent; - OldParent:=ANode.Parent; - continue; - end; - // OldParent.Balance=-2 - if (ANode.Balance=-1) then begin - { rotate ANode,ANode.Parent right - OldParentParent OldParentParent - | | - OldParent => ANode - / \ - ANode OldParent - \ / - OldRight OldRight } - RotateRight(OldParent); - ANode.Balance:=0; - OldParent.Balance:=0; - end else begin - // Node.Balance = +1 - { double rotate - = rotate ANode,OldRight left and then rotate OldRight,OldParent right - OldParentParent OldParentParent - | | - OldParent OldRight - / => / \ - ANode ANode OldParent - \ \ / - OldRight OldRightLeft OldRightRight - / \ - OldRightLeft OldRightRight - } - OldRight:=ANode.Right; - RotateLeft(ANode); - RotateRight(OldParent); - if (OldRight.Balance<=0) then - ANode.Balance:=0 - else - ANode.Balance:=-1; - if (OldRight.Balance=-1) then - OldParent.Balance:=1 - else - OldParent.Balance:=0; - OldRight.Balance:=0; - end; - exit; - end else begin - // Node is right child - Inc(OldParent.Balance); - if (OldParent.Balance=0) then exit; - if (OldParent.Balance=+1) then begin - ANode:=OldParent; - OldParent:=ANode.Parent; - continue; - end; - // OldParent.Balance = +2 - if(ANode.Balance=+1) then begin - { rotate OldParent,ANode left - OldParentParent OldParentParent - | | - OldParent => ANode - \ / - ANode OldParent - / \ - OldLeft OldLeft } - RotateLeft(OldParent); - ANode.Balance:=0; - OldParent.Balance:=0; - end else begin - // Node.Balance = -1 - { double rotate - = rotate OldLeft,ANode right and then rotate OldParent,OldLeft right - OldParentParent OldParentParent - | | - OldParent OldLeft - \ => / \ - ANode OldParent ANode - / \ / - OldLeft OldLeftLeft OldLeftRight - / \ - OldLeftLeft OldLeftRight - } - OldLeft:=ANode.Left; - RotateRight(ANode); - RotateLeft(OldParent); - if (OldLeft.Balance>=0) then - ANode.Balance:=0 - else - ANode.Balance:=+1; - if (OldLeft.Balance=+1) then - OldParent.Balance:=-1 - else - OldParent.Balance:=0; - OldLeft.Balance:=0; - end; - exit; - end; - end; -end; - -procedure TAvgLvlTree.Clear; - - procedure DeleteNode(ANode: TAvgLvlTreeNode); - begin - if ANode<>nil then begin - if ANode.Left<>nil then DeleteNode(ANode.Left); - if ANode.Right<>nil then DeleteNode(ANode.Right); - end; - DisposeNode(ANode); - end; - -// Clear -begin - DeleteNode(fRoot); - fRoot:=nil; - FCount:=0; -end; - -constructor TAvgLvlTree.Create(const OnCompareMethod: TListSortCompare); -begin - inherited Create; - FOnCompare:=OnCompareMethod; - Init; -end; - -constructor TAvgLvlTree.CreateObjectCompare( - const OnCompareMethod: TObjectSortCompare); -begin - inherited Create; - FOnObjectCompare:=OnCompareMethod; - Init; -end; - -constructor TAvgLvlTree.Create; -begin - Create(@ComparePointer); -end; - -procedure TAvgLvlTree.Delete(ANode: TAvgLvlTreeNode); -var - OldParent: TAvgLvlTreeNode; - Child: TAvgLvlTreeNode; -begin - if (ANode.Left<>nil) and (ANode.Right<>nil) then begin - // ANode has both: Left and Right - // Switch ANode position with Successor - // Because ANode.Right<>nil the Successor is a child of ANode - SwitchPositionWithSuccessor(ANode,ANode.Successor); - end; - // left or right is nil - DeletingNode(aNode); - OldParent:=ANode.Parent; - ANode.Parent:=nil; - if ANode.Left<>nil then - Child:=ANode.Left - else - Child:=ANode.Right; - if Child<>nil then - Child.Parent:=OldParent; - if (OldParent<>nil) then begin - // Node has parent - if (OldParent.Left=ANode) then begin - // Node is left child of OldParent - OldParent.Left:=Child; - Inc(OldParent.Balance); - end else begin - // Node is right child of OldParent - OldParent.Right:=Child; - Dec(OldParent.Balance); - end; - BalanceAfterDelete(OldParent); - end else begin - // Node was Root - fRoot:=Child; - end; - dec(FCount); - DisposeNode(ANode); -end; - -function TAvgLvlTree.Remove(Data: Pointer): boolean; -var ANode: TAvgLvlTreeNode; -begin - ANode:=Find(Data); - if ANode<>nil then begin - Delete(ANode); - Result:=true; - end else - Result:=false; -end; - -function TAvgLvlTree.RemovePointer(Data: Pointer): boolean; -var - ANode: TAvgLvlTreeNode; -begin - ANode:=FindPointer(Data); - if ANode<>nil then begin - Delete(ANode); - Result:=true; - end else - Result:=false; -end; - -destructor TAvgLvlTree.Destroy; -begin - Clear; - inherited Destroy; -end; - -function TAvgLvlTree.GetEnumerator: TAvgLvlTreeNodeEnumerator; -begin - Result:=TAvgLvlTreeNodeEnumerator.Create(Self,true); -end; - -function TAvgLvlTree.GetEnumeratorHighToLow: TAvgLvlTreeNodeEnumerator; -begin - Result:=TAvgLvlTreeNodeEnumerator.Create(Self,false); -end; - -function TAvgLvlTree.Find(Data: Pointer): TAvgLvlTreeNode; -var Comp: integer; -begin - Result:=fRoot; - while (Result<>nil) do begin - Comp:=Compare(Data,Result.Data); - if Comp=0 then exit; - if Comp<0 then begin - Result:=Result.Left - end else begin - Result:=Result.Right - end; - end; -end; - -function TAvgLvlTree.FindKey(Key: Pointer; - const OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; -var Comp: integer; -begin - Result:=fRoot; - while (Result<>nil) do begin - Comp:=OnCompareKeyWithData(Key,Result.Data); - if Comp=0 then exit; - if Comp<0 then begin - Result:=Result.Left - end else begin - Result:=Result.Right - end; - end; -end; - -function TAvgLvlTree.FindNearestKey(Key: Pointer; - const OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; -var Comp: integer; -begin - Result:=fRoot; - while (Result<>nil) do begin - Comp:=OnCompareKeyWithData(Key,Result.Data); - if Comp=0 then exit; - if Comp<0 then begin - if Result.Left<>nil then - Result:=Result.Left - else - exit; - end else begin - if Result.Right<>nil then - Result:=Result.Right - else - exit; - end; - end; -end; - -function TAvgLvlTree.FindLeftMostKey(Key: Pointer; - const OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; -var - LeftNode: TAvgLvlTreeNode; -begin - Result:=FindKey(Key,OnCompareKeyWithData); - if Result=nil then exit; - repeat - LeftNode:=Result.Precessor; - if (LeftNode=nil) or (OnCompareKeyWithData(Key,LeftNode.Data)<>0) then break; - Result:=LeftNode; - until false; -end; - -function TAvgLvlTree.FindRightMostKey(Key: Pointer; - const OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; -var - RightNode: TAvgLvlTreeNode; -begin - Result:=FindKey(Key,OnCompareKeyWithData); - if Result=nil then exit; - repeat - RightNode:=Result.Successor; - if (RightNode=nil) or (OnCompareKeyWithData(Key,RightNode.Data)<>0) then break; - Result:=RightNode; - until false; -end; - -function TAvgLvlTree.FindLeftMostSameKey(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode; -var - LeftNode: TAvgLvlTreeNode; - Data: Pointer; -begin - if ANode<>nil then begin - Data:=ANode.Data; - Result:=ANode; - repeat - LeftNode:=Result.Precessor; - if (LeftNode=nil) or (Compare(Data,LeftNode.Data)<>0) then break; - Result:=LeftNode; - until false; - end else begin - Result:=nil; - end; -end; - -function TAvgLvlTree.FindRightMostSameKey(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode; -var - RightNode: TAvgLvlTreeNode; - Data: Pointer; -begin - if ANode<>nil then begin - Data:=ANode.Data; - Result:=ANode; - repeat - RightNode:=Result.Successor; - if (RightNode=nil) or (Compare(Data,RightNode.Data)<>0) then break; - Result:=RightNode; - until false; - end else begin - Result:=nil; - end; -end; - -function TAvgLvlTree.FindNearest(Data: Pointer): TAvgLvlTreeNode; -var Comp: integer; -begin - Result:=fRoot; - while (Result<>nil) do begin - Comp:=Compare(Data,Result.Data); - if Comp=0 then exit; - if Comp<0 then begin - if Result.Left<>nil then - Result:=Result.Left - else - exit; - end else begin - if Result.Right<>nil then - Result:=Result.Right - else - exit; - end; - end; -end; - -function TAvgLvlTree.FindPointer(Data: Pointer): TAvgLvlTreeNode; -// same as Find, but not comparing for key, but same Data too -begin - Result:=FindLeftMost(Data); - while (Result<>nil) do begin - if Result.Data=Data then break; - Result:=Result.Successor; - if Result=nil then exit(nil); - if Compare(Data,Result.Data)<>0 then exit(nil); - end; -end; - -function TAvgLvlTree.FindLeftMost(Data: Pointer): TAvgLvlTreeNode; -var - Left: TAvgLvlTreeNode; -begin - Result:=Find(Data); - while (Result<>nil) do begin - Left:=Result.Precessor; - if (Left=nil) or (Compare(Data,Left.Data)<>0) then break; - Result:=Left; - end; -end; - -function TAvgLvlTree.FindRightMost(Data: Pointer): TAvgLvlTreeNode; -var - Right: TAvgLvlTreeNode; -begin - Result:=Find(Data); - while (Result<>nil) do begin - Right:=Result.Successor; - if (Right=nil) or (Compare(Data,Right.Data)<>0) then break; - Result:=Right; - end; -end; - -function TAvgLvlTree.FindInsertPos(Data: Pointer): TAvgLvlTreeNode; -var Comp: integer; -begin - Result:=fRoot; - while (Result<>nil) do begin - Comp:=Compare(Data,Result.Data); - if Comp<0 then begin - if Result.Left<>nil then - Result:=Result.Left - else - exit; - end else begin - if Result.Right<>nil then - Result:=Result.Right - else - exit; - end; - end; -end; - -procedure TAvgLvlTree.MoveDataLeftMost(var ANode: TAvgLvlTreeNode); -var LeftMost, PreNode: TAvgLvlTreeNode; - Data: Pointer; -begin - if ANode=nil then exit; - LeftMost:=ANode; - repeat - PreNode:=LeftMost.Precessor; - if (PreNode=nil) or (Compare(ANode,PreNode)<>0) then break; - LeftMost:=PreNode; - until false; - if LeftMost=ANode then exit; - Data:=LeftMost.Data; - LeftMost.Data:=ANode.Data; - ANode.Data:=Data; - ANode:=LeftMost; -end; - -procedure TAvgLvlTree.MoveDataRightMost(var ANode: TAvgLvlTreeNode); -var RightMost, PostNode: TAvgLvlTreeNode; - Data: Pointer; -begin - if ANode=nil then exit; - RightMost:=ANode; - repeat - PostNode:=RightMost.Successor; - if (PostNode=nil) or (Compare(ANode,PostNode)<>0) then break; - RightMost:=PostNode; - until false; - if RightMost=ANode then exit; - Data:=RightMost.Data; - RightMost.Data:=ANode.Data; - ANode.Data:=Data; - ANode:=RightMost; -end; - -procedure TAvgLvlTree.ConsistencyCheck; - - procedure E(Msg: string); - begin - raise Exception.Create('TAvgLvlTree.ConsistencyCheck: '+Msg); - end; - -var - RealCount: SizeInt; -begin - RealCount:=0; - if FRoot<>nil then begin - FRoot.ConsistencyCheck(Self); - RealCount:=FRoot.GetCount; - end; - if Count<>RealCount then - E('Count<>RealCount'); -end; - -procedure TAvgLvlTree.FreeAndClear; - - procedure FreeNodeData(ANode: TAvgLvlTreeNode); - begin - if ANode=nil then exit; - FreeNodeData(ANode.Left); - FreeNodeData(ANode.Right); - TObject(ANode.Data).Free; - ANode.Data:=nil; - end; - -// TAvgLvlTree.FreeAndClear -begin - // free all data - FreeNodeData(fRoot); - // free all nodes - Clear; -end; - -procedure TAvgLvlTree.FreeAndDelete(ANode: TAvgLvlTreeNode); -var OldData: TObject; -begin - if OwnsObjects then - Delete(ANode) - else begin - OldData:=TObject(ANode.Data); - Delete(ANode); - OldData.Free; - end; -end; - -function TAvgLvlTree.Equals(Obj: TObject): boolean; -begin - if Obj is TAvgLvlTree then - Result:=IsEqual(TAvgLvlTree(Obj),false) - else - Result:=inherited Equals(Obj); -end; - -function TAvgLvlTree.IsEqual(aTree: TAvgLvlTree; CheckDataPointer: boolean - ): boolean; -var - MyNode: TAvgLvlTreeNode; - OtherNode: TAvgLvlTreeNode; -begin - if aTree=Self then exit(true); - Result:=false; - if aTree=nil then exit; - if Count<>aTree.Count then exit; - if OnCompare<>aTree.OnCompare then exit; - if OnObjectCompare<>aTree.OnObjectCompare then exit; - if NodeClass<>aTree.NodeClass then exit; - MyNode:=FindLowest; - OtherNode:=aTree.FindLowest; - while MyNode<>nil do begin - if OtherNode=nil then exit; - if CheckDataPointer then begin - if MyNode.Data<>OtherNode.Data then exit; - end else begin - if Compare(MyNode.Data,OtherNode.Data)<>0 then exit; - end; - MyNode:=MyNode.Successor;; - OtherNode:=OtherNode.Successor; - end; - if OtherNode<>nil then exit; - Result:=true; -end; - -procedure TAvgLvlTree.Assign(aTree: TAvgLvlTree); - - procedure AssignNode(var MyNode: TAvgLvlTreeNode; OtherNode: TAvgLvlTreeNode); - begin - MyNode:=NewNode; - MyNode.Data:=OtherNode.Data; - MyNode.Balance:=OtherNode.Balance; - if OtherNode.Left<>nil then begin - AssignNode(MyNode.Left,OtherNode.Left); - MyNode.Left.Parent:=MyNode; - end; - if OtherNode.Right<>nil then begin - AssignNode(MyNode.Right,OtherNode.Right); - MyNode.Right.Parent:=MyNode; - end; - end; - -begin - if aTree=nil then - raise Exception.Create('TAvgLvlTree.Assign aTree=nil'); - if IsEqual(aTree,true) then exit; - Clear; - SetCompares(aTree.OnCompare,aTree.OnObjectCompare); - FNodeClass:=aTree.NodeClass; - if aTree.Root<>nil then - AssignNode(fRoot,aTree.Root); - FCount:=aTree.Count; -end; - -procedure TAvgLvlTree.WriteReportToStream(s: TStream); - - procedure WriteStr(const Txt: string); - begin - if Txt='' then exit; - s.Write(Txt[1],length(Txt)); - end; - - procedure WriteTreeNode(ANode: TAvgLvlTreeNode); - var - b: String; - IsLeft: boolean; - AParent: TAvgLvlTreeNode; - WasLeft: Boolean; - begin - if ANode=nil then exit; - WriteTreeNode(ANode.Right); - AParent:=ANode; - WasLeft:=false; - b:=''; - while AParent<>nil do begin - if AParent.Parent=nil then begin - if AParent=ANode then - b:='--'+b - else - b:=' '+b; - break; - end; - IsLeft:=AParent.Parent.Left=AParent; - if AParent=ANode then begin - if IsLeft then - b:='\-' - else - b:='/-'; - end else begin - if WasLeft=IsLeft then - b:=' '+b - else - b:='| '+b; - end; - WasLeft:=IsLeft; - AParent:=AParent.Parent; - end; - b+=NodeToReportStr(ANode)+LineEnding; - WriteStr(b); - WriteTreeNode(ANode.Left); - end; - -// TAvgLvlTree.WriteReportToStream -begin - WriteStr('-Start-of-AVL-Tree-------------------'+LineEnding); - WriteTreeNode(fRoot); - WriteStr('-End-Of-AVL-Tree---------------------'+LineEnding); -end; - -function TAvgLvlTree.NodeToReportStr(aNode: TAvgLvlTreeNode): string; -begin - Result:=Format('%p Self=%p Parent=%p Balance=%d', - [aNode.Data, Pointer(aNode),Pointer(aNode.Parent), aNode.Balance]); -end; - -function TAvgLvlTree.ReportAsString: string; -var ms: TMemoryStream; -begin - Result:=''; - ms:=TMemoryStream.Create; - try - WriteReportToStream(ms); - ms.Position:=0; - SetLength(Result,ms.Size); - if Result<>'' then - ms.Read(Result[1],length(Result)); - finally - ms.Free; - end; -end; - -procedure TAvgLvlTree.SetOnCompare(const AValue: TListSortCompare); -begin - if AValue=nil then - SetCompares(nil,FOnObjectCompare) - else - SetCompares(AValue,nil); -end; - -procedure TAvgLvlTree.SetOnObjectCompare(const AValue: TObjectSortCompare); -begin - if AValue=nil then - SetCompares(FOnCompare,nil) - else - SetCompares(nil,AValue); -end; - -procedure TAvgLvlTree.SetCompares(const NewCompare: TListSortCompare; - const NewObjectCompare: TObjectSortCompare); -var List: PPointer; - ANode: TAvgLvlTreeNode; - i, OldCount: integer; -begin - if (FOnCompare=NewCompare) and (FOnObjectCompare=NewObjectCompare) then exit; - if Count<=1 then begin - FOnCompare:=NewCompare; - FOnObjectCompare:=NewObjectCompare; - exit; - end; - // sort the tree again - OldCount:=Count; - GetMem(List,SizeOf(Pointer)*OldCount); - try - // save the data in a list - ANode:=FindLowest; - i:=0; - while ANode<>nil do begin - List[i]:=ANode.Data; - inc(i); - ANode:=ANode.Successor; - end; - // clear the tree - Clear; - // set the new compare function - FOnCompare:=NewCompare; - FOnObjectCompare:=NewObjectCompare; - // re-add all nodes - for i:=0 to OldCount-1 do - Add(List[i]); - finally - FreeMem(List); - end; -end; - -procedure TAvgLvlTree.RotateLeft(aNode: TAvgLvlTreeNode); -{ Parent Parent - | | - Node => OldRight - / \ / - Left OldRight Node - / / \ - OldRightLeft Left OldRightLeft } -var - OldRight: TAvgLvlTreeNode; - AParent: TAvgLvlTreeNode; - OldRightLeft: TAvgLvlTreeNode; -begin - OldRight:=aNode.Right; - OldRightLeft:=OldRight.Left; - AParent:=aNode.Parent; - if AParent<>nil then begin - if AParent.Left=aNode then - AParent.Left:=OldRight - else - AParent.Right:=OldRight; - end else - fRoot:=OldRight; - OldRight.Parent:=AParent; - aNode.Parent:=OldRight; - aNode.Right:=OldRightLeft; - if OldRightLeft<>nil then - OldRightLeft.Parent:=aNode; - OldRight.Left:=aNode; -end; - -procedure TAvgLvlTree.RotateRight(aNode: TAvgLvlTreeNode); -{ Parent Parent - | | - Node => OldLeft - / \ \ - OldLeft Right Node - \ / \ - OldLeftRight OldLeftRight Right } -var - OldLeft: TAvgLvlTreeNode; - AParent: TAvgLvlTreeNode; - OldLeftRight: TAvgLvlTreeNode; -begin - OldLeft:=aNode.Left; - OldLeftRight:=OldLeft.Right; - AParent:=aNode.Parent; - if AParent<>nil then begin - if AParent.Left=aNode then - AParent.Left:=OldLeft - else - AParent.Right:=OldLeft; - end else - fRoot:=OldLeft; - OldLeft.Parent:=AParent; - aNode.Parent:=OldLeft; - aNode.Left:=OldLeftRight; - if OldLeftRight<>nil then - OldLeftRight.Parent:=aNode; - OldLeft.Right:=aNode; -end; - -procedure TAvgLvlTree.SwitchPositionWithSuccessor(aNode, - aSuccessor: TAvgLvlTreeNode); -{ called by delete, when aNode.Left<>nil and aNode.Right<>nil - Switch ANode position with Successor - Because ANode.Right<>nil the Successor is a child of ANode } -var - OldBalance: Integer; - OldParent, OldLeft, OldRight, - OldSuccParent, OldSuccLeft, OldSuccRight: TAvgLvlTreeNode; -begin - OldBalance:=aNode.Balance; - aNode.Balance:=aSuccessor.Balance; - aSuccessor.Balance:=OldBalance; - - OldParent:=aNode.Parent; - OldLeft:=aNode.Left; - OldRight:=aNode.Right; - OldSuccParent:=aSuccessor.Parent; - OldSuccLeft:=aSuccessor.Left; - OldSuccRight:=aSuccessor.Right; - - if OldParent<>nil then begin - if OldParent.Left=aNode then - OldParent.Left:=aSuccessor - else - OldParent.Right:=aSuccessor; - end else - fRoot:=aSuccessor; - aSuccessor.Parent:=OldParent; - - if OldSuccParent<>aNode then begin - if OldSuccParent.Left=aSuccessor then - OldSuccParent.Left:=aNode - else - OldSuccParent.Right:=aNode; - aSuccessor.Right:=OldRight; - aNode.Parent:=OldSuccParent; - if OldRight<>nil then - OldRight.Parent:=aSuccessor; - end else begin - { aNode aSuccessor - \ => \ - aSuccessor aNode } - aSuccessor.Right:=aNode; - aNode.Parent:=aSuccessor; - end; - - aNode.Left:=OldSuccLeft; - if OldSuccLeft<>nil then - OldSuccLeft.Parent:=aNode; - aNode.Right:=OldSuccRight; - if OldSuccRight<>nil then - OldSuccRight.Parent:=aNode; - aSuccessor.Left:=OldLeft; - if OldLeft<>nil then - OldLeft.Parent:=aSuccessor; -end; - -procedure TAvgLvlTree.Init; -begin - FNodeClass:=TAvgLvlTreeNode; -end; - -procedure TAvgLvlTree.NodeAdded(aNode: TAvgLvlTreeNode); -begin - // for descendants to override -end; - -{ TAvgLvlTreeNode } - -function TAvgLvlTreeNode.TreeDepth: integer; -// longest WAY down. e.g. only one node => 0 ! -var LeftDepth, RightDepth: integer; -begin - if Left<>nil then - LeftDepth:=Left.TreeDepth+1 - else - LeftDepth:=0; - if Right<>nil then - RightDepth:=Right.TreeDepth+1 - else - RightDepth:=0; - if LeftDepth>RightDepth then - Result:=LeftDepth - else - Result:=RightDepth; -end; - -procedure TAvgLvlTreeNode.ConsistencyCheck(Tree: TAvgLvlTree); - - procedure E(Msg: string); - begin - raise Exception.Create('TAvgLvlTreeNode.ConsistencyCheck: '+Msg); - end; - -var - LeftDepth: SizeInt; - RightDepth: SizeInt; -begin - // test left child - if Left<>nil then begin - if Left.Parent<>Self then - E('Left.Parent<>Self'); - if Tree.Compare(Left.Data,Data)>0 then - E('Compare(Left.Data,Data)>0'); - Left.ConsistencyCheck(Tree); - end; - // test right child - if Right<>nil then begin - if Right.Parent<>Self then - E('Right.Parent<>Self'); - if Tree.Compare(Data,Right.Data)>0 then - E('Compare(Data,Right.Data)>0'); - Right.ConsistencyCheck(Tree); - end; - // test balance - if Left<>nil then - LeftDepth:=Left.TreeDepth+1 - else - LeftDepth:=0; - if Right<>nil then - RightDepth:=Right.TreeDepth+1 - else - RightDepth:=0; - if Balance<>(RightDepth-LeftDepth) then - E('Balance['+IntToStr(Balance)+']<>(RightDepth['+IntToStr(RightDepth)+']-LeftDepth['+IntToStr(LeftDepth)+'])'); -end; - -function TAvgLvlTreeNode.GetCount: SizeInt; -begin - Result:=1; - if Left<>nil then inc(Result,Left.GetCount); - if Right<>nil then inc(Result,Right.GetCount); -end; - -function TAvgLvlTreeNode.Successor: TAvgLvlTreeNode; -begin - Result:=Right; - if Result<>nil then begin - while (Result.Left<>nil) do Result:=Result.Left; - end else begin - Result:=Self; - while (Result.Parent<>nil) and (Result.Parent.Right=Result) do - Result:=Result.Parent; - Result:=Result.Parent; - end; -end; - -function TAvgLvlTreeNode.Precessor: TAvgLvlTreeNode; -begin - Result:=Left; - if Result<>nil then begin - while (Result.Right<>nil) do Result:=Result.Right; - end else begin - Result:=Self; - while (Result.Parent<>nil) and (Result.Parent.Left=Result) do - Result:=Result.Parent; - Result:=Result.Parent; - end; -end; - -procedure TAvgLvlTreeNode.Clear; -begin - Parent:=nil; - Left:=nil; - Right:=nil; - Balance:=0; - Data:=nil; -end; - { TIndexedAVLTree } function TIndexedAVLTree.GetItems(Index: SizeInt): Pointer; @@ -2030,9 +783,9 @@ begin Result:=GetNodeAtIndex(Index).Data; end; -procedure TIndexedAVLTree.DeletingNode(aNode: TAvgLvlTreeNode); +procedure TIndexedAVLTree.DeletingNode(aNode: TAvlTreeNode); var - aParent: TAvgLvlTreeNode; + aParent: TAvlTreeNode; begin fLastNode:=nil; repeat @@ -2049,9 +802,9 @@ begin FNodeClass:=TIndexedAVLTreeNode; end; -procedure TIndexedAVLTree.NodeAdded(aNode: TAvgLvlTreeNode); +procedure TIndexedAVLTree.NodeAdded(aNode: TAvlTreeNode); var - aParent: TAvgLvlTreeNode; + aParent: TAvlTreeNode; begin fLastNode:=nil; repeat @@ -2063,7 +816,7 @@ begin until false; end; -procedure TIndexedAVLTree.RotateLeft(aNode: TAvgLvlTreeNode); +procedure TIndexedAVLTree.RotateLeft(aNode: TAvlTreeNode); { Parent Parent | | CurNode => OldRight @@ -2080,7 +833,7 @@ begin OldRight.LeftCount += 1+CurNode.LeftCount; end; -procedure TIndexedAVLTree.RotateRight(aNode: TAvgLvlTreeNode); +procedure TIndexedAVLTree.RotateRight(aNode: TAvlTreeNode); { Parent Parent | | CurNode => OldLeft @@ -2098,7 +851,7 @@ begin end; procedure TIndexedAVLTree.SwitchPositionWithSuccessor(aNode, - aSuccessor: TAvgLvlTreeNode); + aSuccessor: TAvlTreeNode); var CurNode: TIndexedAVLTreeNode absolute aNode; CurSucc: TIndexedAVLTreeNode absolute aSuccessor; @@ -2151,7 +904,7 @@ begin until false; end; -function TIndexedAVLTree.NodeToIndex(Node: TAvgLvlTreeNode): SizeInt; +function TIndexedAVLTree.NodeToIndex(Node: TAvlTreeNode): SizeInt; var CurNode: TIndexedAVLTreeNode; CurParent: TIndexedAVLTreeNode; @@ -2177,7 +930,7 @@ end; function TIndexedAVLTree.IndexOf(Data: Pointer): SizeInt; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindPointer(Data); if Node=nil then exit(-1); @@ -2192,7 +945,7 @@ procedure TIndexedAVLTree.ConsistencyCheck; end; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; i: SizeInt; LeftCount: SizeInt; begin @@ -2222,7 +975,7 @@ begin end; end; -function TIndexedAVLTree.NodeToReportStr(aNode: TAvgLvlTreeNode): string; +function TIndexedAVLTree.NodeToReportStr(aNode: TAvlTreeNode): string; begin Result:=inherited NodeToReportStr(aNode)+' LeftCount='+IntToStr(TIndexedAVLTreeNode(aNode).LeftCount); end; @@ -2236,7 +989,7 @@ end; function TPointerToPointerTree.GetValues(const Key: Pointer): Pointer; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Key); if Node<>nil then @@ -2249,7 +1002,7 @@ procedure TPointerToPointerTree.SetValues(const Key: Pointer; const AValue: Pointer); var NewItem: PPointerToPointerItem; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Key); if (Node<>nil) then @@ -2262,12 +1015,12 @@ begin end; end; -function TPointerToPointerTree.FindNode(const Key: Pointer): TAvgLvlTreeNode; +function TPointerToPointerTree.FindNode(const Key: Pointer): TAvlTreeNode; begin Result:=FItems.FindKey(Key,@ComparePointerWithPtrToPtrItem) end; -function TPointerToPointerTree.GetNode(Node: TAvgLvlTreeNode; out Key, +function TPointerToPointerTree.GetNode(Node: TAvlTreeNode; out Key, Value: Pointer): Boolean; var Item: PPointerToPointerItem; @@ -2286,7 +1039,7 @@ end; constructor TPointerToPointerTree.Create; begin - FItems:=TAvgLvlTree.Create(@ComparePointerToPointerItems); + FItems:=TAvlTree.Create(@ComparePointerToPointerItems); end; destructor TPointerToPointerTree.Destroy; @@ -2298,7 +1051,7 @@ end; procedure TPointerToPointerTree.Clear; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PPointerToPointerItem; begin Node:=FItems.FindLowest; @@ -2312,7 +1065,7 @@ end; procedure TPointerToPointerTree.ClearWithFree; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PPointerToPointerItem; begin Node:=FItems.FindLowest; @@ -2335,8 +1088,8 @@ end; function TPointerToPointerTree.IsEqual(aTree: TPointerToPointerTree): boolean; var - MyNode: TAvgLvlTreeNode; - OtherNode: TAvgLvlTreeNode; + MyNode: TAvlTreeNode; + OtherNode: TAvlTreeNode; MyItem: PPointerToPointerItem; OtherItem: PPointerToPointerItem; begin @@ -2364,7 +1117,7 @@ end; procedure TPointerToPointerTree.Assign(aTree: TPointerToPointerTree); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; SrcItem, MyItem: PPointerToPointerItem; begin if aTree=nil then @@ -2385,7 +1138,7 @@ end; procedure TPointerToPointerTree.Remove(Key: Pointer); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PPointerToPointerItem; begin Node:=FindNode(Key); @@ -2413,7 +1166,7 @@ end; function TPointerToPointerTree.GetNext(const Key: Pointer; out NextKey, NextValue: Pointer): Boolean; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Key); if Node<>nil then @@ -2424,7 +1177,7 @@ end; function TPointerToPointerTree.GetPrev(const Key: Pointer; out PrevKey, PrevValue: Pointer): Boolean; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Key); if Node<>nil then @@ -2446,7 +1199,7 @@ end; { TCustomStringMapEnumerator } -constructor TCustomStringMapEnumerator.Create(Tree: TAvgLvlTree); +constructor TCustomStringMapEnumerator.Create(Tree: TAvlTree); begin FTree:=Tree; end; @@ -2467,7 +1220,7 @@ begin Result:=Tree.OnCompare; end; -function TCustomStringMap.FindNode(const s: string): TAvgLvlTreeNode; +function TCustomStringMap.FindNode(const s: string): TAvlTreeNode; begin Result:=FTree.FindKey(Pointer(s),FCompareKeyItemFunc); end; @@ -2501,7 +1254,7 @@ constructor TCustomStringMap.Create(const ACompareItems, begin FCaseSensitive:=TheCaseSensitive; FCompareKeyItemFunc:=ACompareNameWithItem; - FTree:=TAvgLvlTree.Create(ACompareItems); + FTree:=TAvlTree.Create(ACompareItems); end; destructor TCustomStringMap.Destroy; @@ -2514,7 +1267,7 @@ end; procedure TCustomStringMap.Clear; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FTree.FindLowest; while Node<>nil do begin @@ -2531,7 +1284,7 @@ end; procedure TCustomStringMap.GetNames(List: TStrings); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringMapItem; begin Node:=Tree.FindLowest; @@ -2544,7 +1297,7 @@ end; procedure TCustomStringMap.Remove(const Name: string); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringMapItem; begin Node:=FindNode(Name); @@ -2562,8 +1315,8 @@ end; function TCustomStringMap.Equals(OtherTree: TCustomStringMap): boolean; var - Node: TAvgLvlTreeNode; - OtherNode: TAvgLvlTreeNode; + Node: TAvlTreeNode; + OtherNode: TAvlTreeNode; OtherItem: PStringMapItem; Item: PStringMapItem; begin @@ -2586,7 +1339,7 @@ end; procedure TCustomStringMap.Assign(Source: TCustomStringMap); var - SrcNode: TAvgLvlTreeNode; + SrcNode: TAvlTreeNode; SrcItem: PStringMapItem; begin if (Source=nil) or (Source.ClassType<>ClassType) then @@ -2600,12 +1353,29 @@ begin end; end; +function TCustomStringMap.CalcMemSize: PtrUint; +var + Node: TAvlTreeNode; + Item: PStringMapItem; +begin + Result:=PtrUInt(InstanceSize) + +PtrUInt(FTree.InstanceSize) + +PtrUint(FTree.Count)*SizeOf(TAvlTreeNode); + Node:=FTree.FindLowest; + while Node<>nil do begin + Item:=PStringMapItem(Node.Data); + inc(Result,MemSizeString(Item^.Name) + +SizeOf(TStringMapItem)); + Node:=FTree.FindSuccessor(Node); + end; +end; + procedure TCustomStringMap.SetCompareFuncs(const NewCompareItemsFunc, - NewCompareKeyItemFunc: TListSortCompare; NewCaseSensitive: boolean); + NewCompareKeyItemFunc: TListSortCompare {; NewCaseSensitive: boolean}); begin FCompareKeyItemFunc:=NewCompareKeyItemFunc; Tree.OnCompare:=NewCompareItemsFunc; - FCaseSensitive:=NewCaseSensitive; + //FCaseSensitive:=NewCaseSensitive; end; end. diff --git a/components/lazutils/easylazfreetype.pas b/components/lazutils/easylazfreetype.pas index 33b7b52b75..38bc207976 100644 --- a/components/lazutils/easylazfreetype.pas +++ b/components/lazutils/easylazfreetype.pas @@ -25,7 +25,9 @@ unit EasyLazFreeType; interface uses - Classes, SysUtils, LazFreeType, TTTypes, TTRASTER, AvgLvlTree, fpimage, Types, lazutf8; + Classes, SysUtils, fpimage, Laz_AVL_Tree, + // LazUtils // Note: Types must be after TTTypes for PByte. + LazUTF8, LazFreeType, TTRASTER, TTTypes, Types; type TGlyphRenderQuality = (grqMonochrome, grqLowQuality, grqHighQuality); @@ -229,7 +231,7 @@ type FClearType: boolean; FNamesArray: array of string; FCollection: TCustomFreeTypeFontCollection; - function FindGlyphNode(Index: Integer): TAvgLvlTreeNode; + function FindGlyphNode(Index: Integer): TAvlTreeNode; function GetCharIndex(AUnicodeChar: integer): integer; function GetDPI: integer; function GetFamily: string; @@ -265,7 +267,7 @@ type FFaceLoaded: boolean; FInstance: TT_Instance; FInstanceCreated : boolean; - FGlyphTable: TAvgLvlTree; + FGlyphTable: TAvlTree; FCharMap: TT_CharMap; FCharmapOk, FCharmapSymbol: boolean; FAscentValue, FDescentValue, FLineGapValue, FLargeLineGapValue, FCapHeight: single; @@ -920,7 +922,7 @@ begin if (a[i] = 'Italic') or (a[i] = 'Oblique') then result += [ftsItalic]; end; -function TFreeTypeFont.FindGlyphNode(Index: Integer): TAvgLvlTreeNode; +function TFreeTypeFont.FindGlyphNode(Index: Integer): TAvlTreeNode; var DataValue: integer; begin Result:=FGlyphTable.Root; @@ -977,8 +979,9 @@ begin end; function TFreeTypeFont.GetGlyph(Index: integer): TFreeTypeGlyph; -var node: TAvgLvlTreeNode; - lGlyph: TFreeTypeGlyph; +var + node: TAvlTreeNode; + lGlyph: TFreeTypeGlyph; begin if not CheckInstance then begin @@ -1433,7 +1436,7 @@ begin FCharmapOk := false; FPointSize := 10; FDPI := 96; - FGlyphTable := TAvgLvlTree.Create; + FGlyphTable := TAvlTree.Create; FHinted := true; FWidthFactor := 1; FClearType := false; diff --git a/components/lazutils/laz_avl_tree.pp b/components/lazutils/laz_avl_tree.pp new file mode 100644 index 0000000000..f5e1e10df8 --- /dev/null +++ b/components/lazutils/laz_avl_tree.pp @@ -0,0 +1,1515 @@ +{ ********************************************************************** + This file is part of the Free Component Library (FCL) + Copyright (c) 2008 by Mattias Gaertner + + Average Level Tree implementation by Mattias Gaertner + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + ********************************************************************** + + Author: Mattias Gaertner + + Abstract: + TAVLTree is an Average Level binary Tree. This binary tree is always + balanced, so that inserting, deleting and finding a node is performed in + O(log(#Nodes)). + + Note! This is a copy of avl_tree unit from FPC 3.1.1 from 26.3.2017. + Can be removed when FPC 3.2 is the minimun requirement for Lazarus and LazUtils. +} +unit Laz_AVL_Tree; + +{$ifdef FPC}{$mode objfpc}{$endif}{$H+} + +interface + +{off $DEFINE MEM_CHECK} + +uses + {$IFDEF MEM_CHECK}MemCheck,{$ENDIF} + Classes, SysUtils; + +type + TAVLTree = class; + + TObjectSortCompare = function(Tree: TAVLTree; Data1, Data2: Pointer): integer of object; + + { TAVLTreeNode } + + TAVLTreeNode = class + public + Parent, Left, Right: TAVLTreeNode; + Balance: integer; // = RightDepth-LeftDepth -2..+2, after balancing: -1,0,+1 + Data: Pointer; + function Successor: TAVLTreeNode; // next right + function Precessor: TAVLTreeNode; // next left + procedure Clear; + function TreeDepth: integer; // longest WAY down. e.g. only one node => 0 ! + procedure ConsistencyCheck(Tree: TAVLTree); virtual; + function GetCount: SizeInt; + end; + TAVLTreeNodeClass = class of TAVLTreeNode; + PAVLTreeNode = ^TAVLTreeNode; + + { TBaseAVLTreeNodeManager } + + TBaseAVLTreeNodeManager = class + public + procedure DisposeNode(ANode: TAVLTreeNode); virtual; abstract; + function NewNode: TAVLTreeNode; virtual; abstract; + end; + + { TAVLTreeNodeEnumerator } + + TAVLTreeNodeEnumerator = class + protected + FCurrent: TAVLTreeNode; + FLowToHigh: boolean; + FTree: TAVLTree; + public + constructor Create(Tree: TAVLTree; aLowToHigh: boolean = true); + function GetEnumerator: TAVLTreeNodeEnumerator; inline; + function MoveNext: Boolean; + property Current: TAVLTreeNode read FCurrent; + property LowToHigh: boolean read FLowToHigh; + end; + + TAVLTree = class + protected + FCount: SizeInt; + FNodeClass: TAVLTreeNodeClass; + fNodeMgr: TBaseAVLTreeNodeManager; + fNodeMgrAutoFree: boolean; + FOnCompare: TListSortCompare; + FOnObjectCompare: TObjectSortCompare; + FRoot: TAVLTreeNode; + procedure BalanceAfterInsert(ANode: TAVLTreeNode); + procedure BalanceAfterDelete(ANode: TAVLTreeNode); + procedure DeletingNode({%H-}aNode: TAVLTreeNode); virtual; + function FindInsertPos(Data: Pointer): TAVLTreeNode; + procedure Init; virtual; + procedure NodeAdded({%H-}aNode: TAVLTreeNode); virtual; + procedure RotateLeft(aNode: TAVLTreeNode); virtual; + procedure RotateRight(aNode: TAVLTreeNode); virtual; + procedure SwitchPositionWithSuccessor(aNode, aSuccessor: TAVLTreeNode); virtual; + procedure SetOnCompare(const AValue: TListSortCompare); + procedure SetOnObjectCompare(const AValue: TObjectSortCompare); + procedure SetCompares(const NewCompare: TListSortCompare; + const NewObjectCompare: TObjectSortCompare); + public + constructor Create(const OnCompareMethod: TListSortCompare); + constructor CreateObjectCompare(const OnCompareMethod: TObjectSortCompare); + constructor Create; + destructor Destroy; override; + property OnCompare: TListSortCompare read FOnCompare write SetOnCompare; + property OnObjectCompare: TObjectSortCompare read FOnObjectCompare write SetOnObjectCompare; + property NodeClass: TAVLTreeNodeClass read FNodeClass write FNodeClass; // used for new nodes + procedure SetNodeManager(NewMgr: TBaseAVLTreeNodeManager; + AutoFree: boolean = false); + function NewNode: TAVLTreeNode; virtual; // create a node outside the tree + procedure DisposeNode(ANode: TAVLTreeNode); virtual; // free the node outside the tree + + // add, delete, remove, move + procedure Add(ANode: TAVLTreeNode); + function Add(Data: Pointer): TAVLTreeNode; + function AddAscendingSequence(Data: Pointer; LastAdded: TAVLTreeNode; + var Successor: TAVLTreeNode): TAVLTreeNode; + procedure Delete(ANode: TAVLTreeNode); + // JuMa: Turned Remove and RemovePointer into functions. + function Remove(Data: Pointer): boolean; + function RemovePointer(Data: Pointer): boolean; + procedure MoveDataLeftMost(var ANode: TAVLTreeNode); + procedure MoveDataRightMost(var ANode: TAVLTreeNode); + procedure Clear; + procedure FreeAndClear; + procedure FreeAndDelete(ANode: TAVLTreeNode); + function Equals(Obj: TObject): boolean; override; // same as IsEqual(aTree,false) + function IsEqual(aTree: TAVLTree; CheckDataPointer: boolean): boolean; // checks only keys or Data (references), not the data itself, O(n) + procedure Assign(aTree: TAVLTree); virtual; // clear and copy all Data (references), O(n) + + // search + property Root: TAVLTreeNode read fRoot; + property Count: SizeInt read FCount; + function Compare(Data1, Data2: Pointer): integer; + function Find(Data: Pointer): TAVLTreeNode; // O(log(n)) + function FindKey(Key: Pointer; + const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode; // O(log(n)) + function FindNearestKey(Key: Pointer; + const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode; // O(log(n)) + function FindSuccessor(ANode: TAVLTreeNode): TAVLTreeNode; inline; + function FindPrecessor(ANode: TAVLTreeNode): TAVLTreeNode; inline; + function FindLowest: TAVLTreeNode; // O(log(n)) + function FindHighest: TAVLTreeNode; // O(log(n)) + function FindNearest(Data: Pointer): TAVLTreeNode; + // search in a tree with duplicates (duplicate means here: Compare function returns 0) + function FindPointer(Data: Pointer): TAVLTreeNode; + function FindLeftMost(Data: Pointer): TAVLTreeNode; + function FindRightMost(Data: Pointer): TAVLTreeNode; + function FindLeftMostKey(Key: Pointer; + const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode; + function FindRightMostKey(Key: Pointer; + const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode; + function FindLeftMostSameKey(ANode: TAVLTreeNode): TAVLTreeNode; + function FindRightMostSameKey(ANode: TAVLTreeNode): TAVLTreeNode; + + // enumerators + function GetEnumerator: TAVLTreeNodeEnumerator; + function GetEnumeratorHighToLow: TAVLTreeNodeEnumerator; + + // consistency + procedure ConsistencyCheck; virtual; // JuMa: changed to procedure and added "virtual". + procedure WriteReportToStream(s: TStream); + function NodeToReportStr(aNode: TAVLTreeNode): string; virtual; + function ReportAsString: string; + end; + TAVLTreeClass = class of TAVLTree; + + { TAVLTreeNodeMemManager } + + TAVLTreeNodeMemManager = class(TBaseAVLTreeNodeManager) + private + FFirstFree: TAVLTreeNode; + FFreeCount: SizeInt; + FCount: SizeInt; + FMinFree: SizeInt; + FMaxFreeRatio: SizeInt; + procedure SetMaxFreeRatio(NewValue: SizeInt); + procedure SetMinFree(NewValue: SizeInt); + procedure DisposeFirstFreeNode; + public + procedure DisposeNode(ANode: TAVLTreeNode); override; + function NewNode: TAVLTreeNode; override; + property MinimumFreeNode: SizeInt read FMinFree write SetMinFree; + property MaximumFreeNodeRatio: SizeInt + read FMaxFreeRatio write SetMaxFreeRatio; // in one eighth steps + property Count: SizeInt read FCount; + procedure Clear; + constructor Create; + destructor Destroy; override; + end; + +var + LazNodeMemManager: TAVLTreeNodeMemManager; + +implementation + +function ComparePointer(Data1, Data2: Pointer): integer; +begin + if Data1>Data2 then Result:=-1 + else if Data1nil then + FCurrent:=FCurrent.Successor + else + FCurrent:=FTree.FindLowest; + end else begin + if FCurrent<>nil then + FCurrent:=FCurrent.Precessor + else + FCurrent:=FTree.FindHighest; + end; + Result:=FCurrent<>nil; +end; + +{ TAVLTree } + +function TAVLTree.Add(Data: Pointer): TAVLTreeNode; +begin + Result:=fNodeMgr.NewNode; + Result.Data:=Data; + Add(Result); +end; + +function TAVLTree.AddAscendingSequence(Data: Pointer; LastAdded: TAVLTreeNode; + var Successor: TAVLTreeNode): TAVLTreeNode; +{ This is an optimized version of "Add" for adding an ascending sequence of + nodes. + It uses the LastAdded and Successor to skip searching for an insert position. + For nodes with same value the order of the sequence is kept. + + Usage: + LastNode:=nil; // TAvlTreeNode + Successor:=nil; // TAvlTreeNode + for i:=1 to 1000 do + LastNode:=Tree.AddAscendingSequence(TItem.Create(i),LastNode,Successor); +} +var + InsertPos: TAVLTreeNode; +begin + Result:=NewNode; + Result.Data:=Data; + if (LastAdded<>nil) and (Compare(LastAdded.Data,Data)<=0) + and ((Successor=nil) or (Compare(Data,Successor.Data)<=0)) then begin + // Data is between LastAdded and Successor + inc(FCount); + if LastAdded.Right=nil then begin + Result.Parent:=LastAdded; + LastAdded.Right:=Result; + end else begin + InsertPos:=LastAdded.Right; + while InsertPos.Left<>nil do + InsertPos:=InsertPos.Left; + Result.Parent:=InsertPos; + InsertPos.Left:=Result; + end; + NodeAdded(Result); + BalanceAfterInsert(Result); + end else begin + // normal Add + Add(Result); + Successor:=Result.Successor; + end; +end; + +function TAVLTree.NewNode: TAVLTreeNode; +begin + if LazNodeMemManager<>nil then + Result:=LazNodeMemManager.NewNode + else + Result:=NodeClass.Create; +end; + +procedure TAVLTree.DisposeNode(ANode: TAVLTreeNode); +begin + if LazNodeMemManager<>nil then + LazNodeMemManager.DisposeNode(ANode) + else + ANode.Free; +end; + +procedure TAVLTree.Add(ANode: TAVLTreeNode); +// add a node. If there are already nodes with the same value it will be +// inserted rightmost +var InsertPos: TAVLTreeNode; + InsertComp: integer; +begin + ANode.Left:=nil; + ANode.Right:=nil; + inc(FCount); + if Root<>nil then begin + InsertPos:=FindInsertPos(ANode.Data); + InsertComp:=Compare(ANode.Data,InsertPos.Data); + ANode.Parent:=InsertPos; + if InsertComp<0 then begin + // insert to the left + InsertPos.Left:=ANode; + end else begin + // insert to the right + InsertPos.Right:=ANode; + end; + NodeAdded(ANode); + BalanceAfterInsert(ANode); + end else begin + fRoot:=ANode; + ANode.Parent:=nil; + NodeAdded(ANode); + end; +end; + +function TAVLTree.FindLowest: TAVLTreeNode; +begin + Result:=Root; + if Result<>nil then + while Result.Left<>nil do Result:=Result.Left; +end; + +function TAVLTree.FindHighest: TAVLTreeNode; +begin + Result:=Root; + if Result<>nil then + while Result.Right<>nil do Result:=Result.Right; +end; + +procedure TAVLTree.BalanceAfterDelete(ANode: TAVLTreeNode); +var + OldParent, OldRight, OldRightLeft, OldLeft, OldLeftRight: TAVLTreeNode; +begin + while ANode<>nil do begin + if ((ANode.Balance=+1) or (ANode.Balance=-1)) then exit; + OldParent:=ANode.Parent; + if (ANode.Balance=0) then begin + // Treeheight has decreased by one + if (OldParent=nil) then + exit; + if(OldParent.Left=ANode) then + Inc(OldParent.Balance) + else + Dec(OldParent.Balance); + ANode:=OldParent; + end else if (ANode.Balance=+2) then begin + // Node is overweighted to the right + OldRight:=ANode.Right; + if (OldRight.Balance>=0) then begin + // OldRight.Balance is 0 or -1 + // rotate ANode,OldRight left + RotateLeft(ANode); + ANode.Balance:=(1-OldRight.Balance); // toggle 0 and 1 + Dec(OldRight.Balance); + ANode:=OldRight; + end else begin + // OldRight.Balance=-1 + { double rotate + = rotate OldRightLeft,OldRight right + and then rotate ANode,OldRightLeft left + OldParent OldParent + | | + ANode OldRightLeft + \ / \ + OldRight => ANode OldRight + / \ / + OldRightLeft OldRightLeftLeft OldRightLeftRight + / \ + OldRightLeftLeft OldRightLeftRight + } + OldRightLeft:=OldRight.Left; + RotateRight(OldRight); + RotateLeft(ANode); + if (OldRightLeft.Balance<=0) then + ANode.Balance:=0 + else + ANode.Balance:=-1; + if (OldRightLeft.Balance>=0) then + OldRight.Balance:=0 + else + OldRight.Balance:=+1; + OldRightLeft.Balance:=0; + ANode:=OldRightLeft; + end; + end else begin + // Node.Balance=-2 + // Node is overweighted to the left + OldLeft:=ANode.Left; + if (OldLeft.Balance<=0) then begin + // rotate OldLeft,ANode right + RotateRight(ANode); + ANode.Balance:=(-1-OldLeft.Balance); // toggle 0 and -1 + Inc(OldLeft.Balance); + ANode:=OldLeft; + end else begin + // OldLeft.Balance = 1 + { double rotate left right + = rotate OldLeft,OldLeftRight left + and then rotate OldLeft,ANode right + OldParent OldParent + | | + ANode OldLeftRight + / / \ + OldLeft => OldLeft ANode + \ \ / + OldLeftRight OldLeftRightLeft OldLeftRightRight + / \ + OldLeftRightLeft OldLeftRightRight + } + OldLeftRight:=OldLeft.Right; + RotateLeft(OldLeft); + RotateRight(ANode); + if (OldLeftRight.Balance>=0) then + ANode.Balance:=0 + else + ANode.Balance:=+1; + if (OldLeftRight.Balance<=0) then + OldLeft.Balance:=0 + else + OldLeft.Balance:=-1; + OldLeftRight.Balance:=0; + ANode:=OldLeftRight; + end; + end; + end; +end; + +procedure TAVLTree.DeletingNode(aNode: TAVLTreeNode); +// called by Delete +// Node.Left=nil or Node.Right=nil +begin + // for descendants to override +end; + +procedure TAVLTree.SetOnObjectCompare(const AValue: TObjectSortCompare); +begin + if AValue=nil then + SetCompares(FOnCompare,nil) + else + SetCompares(nil,AValue); +end; + +procedure TAVLTree.SetCompares(const NewCompare: TListSortCompare; + const NewObjectCompare: TObjectSortCompare); +var List: PPointer; + ANode: TAVLTreeNode; + i, OldCount: integer; +begin + if (FOnCompare=NewCompare) and (FOnObjectCompare=NewObjectCompare) then exit; + if Count<=1 then begin + FOnCompare:=NewCompare; + FOnObjectCompare:=NewObjectCompare; + exit; + end; + // sort the tree again + OldCount:=Count; + GetMem(List,SizeOf(Pointer)*OldCount); + try + // save the data in a list + ANode:=FindLowest; + i:=0; + while ANode<>nil do begin + List[i]:=ANode.Data; + inc(i); + ANode:=ANode.Successor; + end; + // clear the tree + Clear; + // set the new compare function + FOnCompare:=NewCompare; + FOnObjectCompare:=NewObjectCompare; + // re-add all nodes + for i:=0 to OldCount-1 do + Add(List[i]); + finally + FreeMem(List); + end; +end; + +procedure TAVLTree.BalanceAfterInsert(ANode: TAVLTreeNode); +var + OldParent, OldRight, OldLeft: TAVLTreeNode; +begin + OldParent:=ANode.Parent; + while (OldParent<>nil) do begin + if (OldParent.Left=ANode) then begin + // Node is left child + dec(OldParent.Balance); + if (OldParent.Balance=0) then exit; + if (OldParent.Balance=-1) then begin + ANode:=OldParent; + OldParent:=ANode.Parent; + continue; + end; + // OldParent.Balance=-2 + if (ANode.Balance=-1) then begin + { rotate ANode,ANode.Parent right + OldParentParent OldParentParent + | | + OldParent => ANode + / \ + ANode OldParent + \ / + OldRight OldRight } + RotateRight(OldParent); + ANode.Balance:=0; + OldParent.Balance:=0; + end else begin + // Node.Balance = +1 + { double rotate + = rotate ANode,OldRight left and then rotate OldRight,OldParent right + OldParentParent OldParentParent + | | + OldParent OldRight + / => / \ + ANode ANode OldParent + \ \ / + OldRight OldRightLeft OldRightRight + / \ + OldRightLeft OldRightRight + } + OldRight:=ANode.Right; + RotateLeft(ANode); + RotateRight(OldParent); + if (OldRight.Balance<=0) then + ANode.Balance:=0 + else + ANode.Balance:=-1; + if (OldRight.Balance=-1) then + OldParent.Balance:=1 + else + OldParent.Balance:=0; + OldRight.Balance:=0; + end; + exit; + end else begin + // Node is right child + Inc(OldParent.Balance); + if (OldParent.Balance=0) then exit; + if (OldParent.Balance=+1) then begin + ANode:=OldParent; + OldParent:=ANode.Parent; + continue; + end; + // OldParent.Balance = +2 + if(ANode.Balance=+1) then begin + { rotate OldParent,ANode left + OldParentParent OldParentParent + | | + OldParent => ANode + \ / + ANode OldParent + / \ + OldLeft OldLeft } + RotateLeft(OldParent); + ANode.Balance:=0; + OldParent.Balance:=0; + end else begin + // Node.Balance = -1 + { double rotate + = rotate OldLeft,ANode right and then rotate OldParent,OldLeft right + OldParentParent OldParentParent + | | + OldParent OldLeft + \ => / \ + ANode OldParent ANode + / \ / + OldLeft OldLeftLeft OldLeftRight + / \ + OldLeftLeft OldLeftRight + } + OldLeft:=ANode.Left; + RotateRight(ANode); + RotateLeft(OldParent); + if (OldLeft.Balance>=0) then + ANode.Balance:=0 + else + ANode.Balance:=+1; + if (OldLeft.Balance=+1) then + OldParent.Balance:=-1 + else + OldParent.Balance:=0; + OldLeft.Balance:=0; + end; + exit; + end; + end; +end; + +procedure TAVLTree.Clear; + + procedure DeleteNode(ANode: TAVLTreeNode); + begin + if ANode<>nil then begin + if ANode.Left<>nil then DeleteNode(ANode.Left); + if ANode.Right<>nil then DeleteNode(ANode.Right); + end; + fNodeMgr.DisposeNode(ANode); + end; + +// Clear +begin + DeleteNode(Root); + fRoot:=nil; + FCount:=0; +end; + +constructor TAVLTree.Create(const OnCompareMethod: TListSortCompare); +begin + inherited Create; + fNodeMgr:=LazNodeMemManager; + FOnCompare:=OnCompareMethod; + Init; +end; + +constructor TAVLTree.CreateObjectCompare( + const OnCompareMethod: TObjectSortCompare); +begin + fNodeMgr:=LazNodeMemManager; + FOnObjectCompare:=OnCompareMethod; + Init; +end; + +constructor TAVLTree.Create; +begin + Create(@ComparePointer); +end; + +procedure TAVLTree.Delete(ANode: TAVLTreeNode); +var + OldParent, Child: TAVLTreeNode; +begin + if (ANode.Left<>nil) and (ANode.Right<>nil) then begin + // ANode has both: Left and Right + // Switch ANode position with Successor + // Because ANode.Right<>nil the Successor is a child of ANode + SwitchPositionWithSuccessor(ANode,ANode.Successor); + end; + // left or right is nil + DeletingNode(aNode); + OldParent:=ANode.Parent; + ANode.Parent:=nil; + if ANode.Left<>nil then + Child:=ANode.Left + else + Child:=ANode.Right; + if Child<>nil then + Child.Parent:=OldParent; + if (OldParent<>nil) then begin + // Node has parent + if (OldParent.Left=ANode) then begin + // Node is left child of OldParent + OldParent.Left:=Child; + Inc(OldParent.Balance); + end else begin + // Node is right child of OldParent + OldParent.Right:=Child; + Dec(OldParent.Balance); + end; + BalanceAfterDelete(OldParent); + end else begin + // Node was Root + fRoot:=Child; + end; + dec(FCount); + DisposeNode(ANode); +end; + +function TAvlTree.Remove(Data: Pointer): boolean; +var + ANode: TAvlTreeNode; +begin + ANode:=Find(Data); + if ANode<>nil then begin + Delete(ANode); + Result:=true; + end else + Result:=false; +end; + +function TAvlTree.RemovePointer(Data: Pointer): boolean; +var + ANode: TAvlTreeNode; +begin + ANode:=FindPointer(Data); + if ANode<>nil then begin + Delete(ANode); + Result:=true; + end else + Result:=false; +end; + +destructor TAVLTree.Destroy; +begin + Clear; + if fNodeMgrAutoFree then + FreeAndNil(fNodeMgr); + inherited Destroy; +end; + +function TAVLTree.GetEnumerator: TAVLTreeNodeEnumerator; +begin + Result:=TAVLTreeNodeEnumerator.Create(Self,true); +end; + +function TAVLTree.GetEnumeratorHighToLow: TAVLTreeNodeEnumerator; +begin + Result:=TAVLTreeNodeEnumerator.Create(Self,false); +end; + +function TAVLTree.Find(Data: Pointer): TAVLTreeNode; +var Comp: integer; +begin + Result:=Root; + while (Result<>nil) do begin + Comp:=Compare(Data,Result.Data); + if Comp=0 then exit; + if Comp<0 then begin + Result:=Result.Left + end else begin + Result:=Result.Right + end; + end; +end; + +function TAVLTree.FindKey(Key: Pointer; const OnCompareKeyWithData: TListSortCompare + ): TAVLTreeNode; +var Comp: integer; +begin + Result:=Root; + while (Result<>nil) do begin + Comp:=OnCompareKeyWithData(Key,Result.Data); + if Comp=0 then exit; + if Comp<0 then begin + Result:=Result.Left + end else begin + Result:=Result.Right + end; + end; +end; + +function TAVLTree.FindNearestKey(Key: Pointer; + const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode; +var Comp: integer; +begin + Result:=fRoot; + while (Result<>nil) do begin + Comp:=OnCompareKeyWithData(Key,Result.Data); + if Comp=0 then exit; + if Comp<0 then begin + if Result.Left<>nil then + Result:=Result.Left + else + exit; + end else begin + if Result.Right<>nil then + Result:=Result.Right + else + exit; + end; + end; +end; + +function TAVLTree.FindLeftMostKey(Key: Pointer; + const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode; +var + LeftNode: TAVLTreeNode; +begin + Result:=FindKey(Key,OnCompareKeyWithData); + if Result=nil then exit; + repeat + LeftNode:=Result.Precessor; + if (LeftNode=nil) or (OnCompareKeyWithData(Key,LeftNode.Data)<>0) then exit; + Result:=LeftNode; + until false; +end; + +function TAVLTree.FindRightMostKey(Key: Pointer; + const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode; +var + RightNode: TAVLTreeNode; +begin + Result:=FindKey(Key,OnCompareKeyWithData); + if Result=nil then exit; + repeat + RightNode:=Result.Successor; + if (RightNode=nil) or (OnCompareKeyWithData(Key,RightNode.Data)<>0) then exit; + Result:=RightNode; + until false; +end; + +function TAVLTree.FindLeftMostSameKey(ANode: TAVLTreeNode): TAVLTreeNode; +var + LeftNode: TAVLTreeNode; + Data: Pointer; +begin + if ANode<>nil then begin + Data:=ANode.Data; + Result:=ANode; + repeat + LeftNode:=Result.Precessor; + if (LeftNode=nil) or (Compare(Data,LeftNode.Data)<>0) then break; + Result:=LeftNode; + until false; + end else begin + Result:=nil; + end; +end; + +function TAVLTree.FindRightMostSameKey(ANode: TAVLTreeNode): TAVLTreeNode; +var + RightNode: TAVLTreeNode; + Data: Pointer; +begin + if ANode<>nil then begin + Data:=ANode.Data; + Result:=ANode; + repeat + RightNode:=Result.Successor; + if (RightNode=nil) or (Compare(Data,RightNode.Data)<>0) then break; + Result:=RightNode; + until false; + end else begin + Result:=nil; + end; +end; + +function TAVLTree.FindNearest(Data: Pointer): TAVLTreeNode; +var Comp: integer; +begin + Result:=Root; + while (Result<>nil) do begin + Comp:=Compare(Data,Result.Data); + if Comp=0 then exit; + if Comp<0 then begin + if Result.Left<>nil then + Result:=Result.Left + else + exit; + end else begin + if Result.Right<>nil then + Result:=Result.Right + else + exit; + end; + end; +end; + +function TAVLTree.FindPointer(Data: Pointer): TAVLTreeNode; +// same as Find, but not comparing for key, but same Data too +begin + Result:=FindLeftMost(Data); + while (Result<>nil) do begin + if Result.Data=Data then break; + Result:=Result.Successor; + if Result=nil then exit; + if Compare(Data,Result.Data)<>0 then exit(nil); + end; +end; + +function TAVLTree.FindLeftMost(Data: Pointer): TAVLTreeNode; +var + Left: TAVLTreeNode; +begin + Result:=Find(Data); + while (Result<>nil) do begin + Left:=Result.Precessor; + if (Left=nil) or (Compare(Data,Left.Data)<>0) then break; + Result:=Left; + end; +end; + +function TAVLTree.FindRightMost(Data: Pointer): TAVLTreeNode; +var + Right: TAVLTreeNode; +begin + Result:=Find(Data); + while (Result<>nil) do begin + Right:=Result.Successor; + if (Right=nil) or (Compare(Data,Right.Data)<>0) then break; + Result:=Right; + end; +end; + +function TAVLTree.FindInsertPos(Data: Pointer): TAVLTreeNode; +var Comp: integer; +begin + Result:=Root; + while (Result<>nil) do begin + Comp:=Compare(Data,Result.Data); + if Comp<0 then begin + if Result.Left<>nil then + Result:=Result.Left + else + exit; + end else begin + if Result.Right<>nil then + Result:=Result.Right + else + exit; + end; + end; +end; + +procedure TAVLTree.Init; +begin + FNodeClass:=TAVLTreeNode; +end; + +procedure TAVLTree.NodeAdded(aNode: TAVLTreeNode); +begin + // for descendants to override +end; + +procedure TAVLTree.RotateLeft(aNode: TAVLTreeNode); +{ Parent Parent + | | + Node => OldRight + / \ / + Left OldRight Node + / / \ + OldRightLeft Left OldRightLeft } +var + AParent, OldRight, OldRightLeft: TAVLTreeNode; +begin + OldRight:=aNode.Right; + OldRightLeft:=OldRight.Left; + AParent:=aNode.Parent; + if AParent<>nil then begin + if AParent.Left=aNode then + AParent.Left:=OldRight + else + AParent.Right:=OldRight; + end else + fRoot:=OldRight; + OldRight.Parent:=AParent; + aNode.Parent:=OldRight; + aNode.Right:=OldRightLeft; + if OldRightLeft<>nil then + OldRightLeft.Parent:=aNode; + OldRight.Left:=aNode; +end; + +procedure TAVLTree.RotateRight(aNode: TAVLTreeNode); +{ Parent Parent + | | + Node => OldLeft + / \ \ + OldLeft Right Node + \ / \ + OldLeftRight OldLeftRight Right } +var + AParent, OldLeft, OldLeftRight: TAVLTreeNode; +begin + OldLeft:=aNode.Left; + OldLeftRight:=OldLeft.Right; + AParent:=aNode.Parent; + if AParent<>nil then begin + if AParent.Left=aNode then + AParent.Left:=OldLeft + else + AParent.Right:=OldLeft; + end else + fRoot:=OldLeft; + OldLeft.Parent:=AParent; + aNode.Parent:=OldLeft; + aNode.Left:=OldLeftRight; + if OldLeftRight<>nil then + OldLeftRight.Parent:=aNode; + OldLeft.Right:=aNode; +end; + +procedure TAVLTree.SwitchPositionWithSuccessor(aNode, aSuccessor: TAVLTreeNode); +{ called by delete, when aNode.Left<>nil and aNode.Right<>nil + Switch ANode position with Successor + Because ANode.Right<>nil the Successor is a child of ANode } +var + OldBalance: Integer; + OldParent, OldLeft, OldRight, + OldSuccParent, OldSuccLeft, OldSuccRight: TAVLTreeNode; +begin + OldBalance:=aNode.Balance; + aNode.Balance:=aSuccessor.Balance; + aSuccessor.Balance:=OldBalance; + + OldParent:=aNode.Parent; + OldLeft:=aNode.Left; + OldRight:=aNode.Right; + OldSuccParent:=aSuccessor.Parent; + OldSuccLeft:=aSuccessor.Left; + OldSuccRight:=aSuccessor.Right; + + if OldParent<>nil then begin + if OldParent.Left=aNode then + OldParent.Left:=aSuccessor + else + OldParent.Right:=aSuccessor; + end else + fRoot:=aSuccessor; + aSuccessor.Parent:=OldParent; + + if OldSuccParent<>aNode then begin + if OldSuccParent.Left=aSuccessor then + OldSuccParent.Left:=aNode + else + OldSuccParent.Right:=aNode; + aSuccessor.Right:=OldRight; + aNode.Parent:=OldSuccParent; + if OldRight<>nil then + OldRight.Parent:=aSuccessor; + end else begin + { aNode aSuccessor + \ => \ + aSuccessor aNode } + aSuccessor.Right:=aNode; + aNode.Parent:=aSuccessor; + end; + + aNode.Left:=OldSuccLeft; + if OldSuccLeft<>nil then + OldSuccLeft.Parent:=aNode; + aNode.Right:=OldSuccRight; + if OldSuccRight<>nil then + OldSuccRight.Parent:=aNode; + aSuccessor.Left:=OldLeft; + if OldLeft<>nil then + OldLeft.Parent:=aSuccessor; +end; + +function TAVLTree.FindSuccessor(ANode: TAVLTreeNode): TAVLTreeNode; +begin + if ANode<>nil then + Result:=ANode.Successor + else + Result:=nil; +end; + +function TAVLTree.FindPrecessor(ANode: TAVLTreeNode): TAVLTreeNode; +begin + if ANode<>nil then + Result:=ANode.Precessor + else + Result:=nil; +end; + +procedure TAVLTree.MoveDataLeftMost(var ANode: TAVLTreeNode); +var + LeftMost, PreNode: TAVLTreeNode; + Data: Pointer; +begin + if ANode=nil then exit; + LeftMost:=ANode; + repeat + PreNode:=FindPrecessor(LeftMost); + if (PreNode=nil) or (Compare(ANode,PreNode)<>0) then break; + LeftMost:=PreNode; + until false; + if LeftMost=ANode then exit; + Data:=LeftMost.Data; + LeftMost.Data:=ANode.Data; + ANode.Data:=Data; + ANode:=LeftMost; +end; + +procedure TAVLTree.MoveDataRightMost(var ANode: TAVLTreeNode); +var + RightMost, PostNode: TAVLTreeNode; + Data: Pointer; +begin + if ANode=nil then exit; + RightMost:=ANode; + repeat + PostNode:=FindSuccessor(RightMost); + if (PostNode=nil) or (Compare(ANode,PostNode)<>0) then break; + RightMost:=PostNode; + until false; + if RightMost=ANode then exit; + Data:=RightMost.Data; + RightMost.Data:=ANode.Data; + ANode.Data:=Data; + ANode:=RightMost; +end; + +procedure TAVLTree.ConsistencyCheck; + + procedure E(Msg: string); + begin + raise Exception.Create('TAVLTree.ConsistencyCheck: '+Msg); + end; + +var + RealCount: SizeInt; +begin + RealCount:=0; + if FRoot<>nil then begin + FRoot.ConsistencyCheck(Self); + RealCount:=FRoot.GetCount; + end; + if Count<>RealCount then + E('Count<>RealCount'); +end; + +procedure TAVLTree.FreeAndClear; + + procedure FreeNodeData(ANode: TAVLTreeNode); + begin + if ANode=nil then exit; + FreeNodeData(ANode.Left); + FreeNodeData(ANode.Right); + if ANode.Data<>nil then TObject(ANode.Data).Free; + ANode.Data:=nil; + end; + +// TAVLTree.FreeAndClear +begin + // free all data + FreeNodeData(Root); + // free all nodes + Clear; +end; + +procedure TAVLTree.FreeAndDelete(ANode: TAVLTreeNode); +var OldData: TObject; +begin + OldData:=TObject(ANode.Data); + Delete(ANode); + OldData.Free; +end; + +function TAVLTree.Equals(Obj: TObject): boolean; +begin + if Obj is TAVLTree then + Result:=IsEqual(TAVLTree(Obj),false) + else + Result:=inherited Equals(Obj); +end; + +function TAVLTree.IsEqual(aTree: TAVLTree; CheckDataPointer: boolean): boolean; +var + MyNode, OtherNode: TAVLTreeNode; +begin + if aTree=Self then exit(true); + Result:=false; + if aTree=nil then exit; + if Count<>aTree.Count then exit; + if OnCompare<>aTree.OnCompare then exit; + if OnObjectCompare<>aTree.OnObjectCompare then exit; + if NodeClass<>aTree.NodeClass then exit; + MyNode:=FindLowest; + OtherNode:=aTree.FindLowest; + while MyNode<>nil do begin + if OtherNode=nil then exit; + if CheckDataPointer then begin + if MyNode.Data<>OtherNode.Data then exit; + end else begin + if Compare(MyNode.Data,OtherNode.Data)<>0 then exit; + end; + MyNode:=MyNode.Successor;; + OtherNode:=OtherNode.Successor; + end; + if OtherNode<>nil then exit; + Result:=true; +end; + +procedure TAVLTree.Assign(aTree: TAVLTree); + + procedure AssignNode(var MyNode: TAVLTreeNode; OtherNode: TAVLTreeNode); + begin + MyNode:=NewNode; + MyNode.Data:=OtherNode.Data; + MyNode.Balance:=OtherNode.Balance; + if OtherNode.Left<>nil then begin + AssignNode(MyNode.Left,OtherNode.Left); + MyNode.Left.Parent:=MyNode; + end; + if OtherNode.Right<>nil then begin + AssignNode(MyNode.Right,OtherNode.Right); + MyNode.Right.Parent:=MyNode; + end; + end; + +begin + if aTree=nil then + raise Exception.Create('TAVLTree.Assign aTree=nil'); + if IsEqual(aTree,true) then exit; + Clear; + SetCompares(aTree.OnCompare,aTree.OnObjectCompare); + FNodeClass:=aTree.NodeClass; + if aTree.Root<>nil then + AssignNode(fRoot,aTree.Root); + FCount:=aTree.Count; +end; + +function TAVLTree.Compare(Data1, Data2: Pointer): integer; +begin + if Assigned(FOnCompare) then + Result:=FOnCompare(Data1,Data2) + else + Result:=FOnObjectCompare(Self,Data1,Data2); +end; + +procedure TAVLTree.WriteReportToStream(s: TStream); + + procedure WriteStr(const Txt: string); + begin + if Txt='' then exit; + s.Write(Txt[1],length(Txt)); + end; + + procedure WriteTreeNode(ANode: TAVLTreeNode); + var + b: String; + IsLeft: boolean; + AParent: TAVLTreeNode; + WasLeft: Boolean; + begin + if ANode=nil then exit; + WriteTreeNode(ANode.Right); + AParent:=ANode; + WasLeft:=false; + b:=''; + while AParent<>nil do begin + if AParent.Parent=nil then begin + if AParent=ANode then + b:='--'+b + else + b:=' '+b; + break; + end; + IsLeft:=AParent.Parent.Left=AParent; + if AParent=ANode then begin + if IsLeft then + b:='\-' + else + b:='/-'; + end else begin + if WasLeft=IsLeft then + b:=' '+b + else + b:='| '+b; + end; + WasLeft:=IsLeft; + AParent:=AParent.Parent; + end; + b:=b+NodeToReportStr(ANode)+LineEnding; + WriteStr(b); + WriteTreeNode(ANode.Left); + end; + +// TAVLTree.WriteReportToStream +begin + WriteStr('-Start-of-AVL-Tree-------------------'+LineEnding); + WriteTreeNode(fRoot); + WriteStr('-End-Of-AVL-Tree---------------------'+LineEnding); +end; + +function TAVLTree.NodeToReportStr(aNode: TAVLTreeNode): string; +begin + Result:=Format('%p Self=%p Parent=%p Balance=%d', + [aNode.Data, Pointer(aNode),Pointer(aNode.Parent), aNode.Balance]); +end; + +function TAVLTree.ReportAsString: string; +var ms: TMemoryStream; +begin + Result:=''; + ms:=TMemoryStream.Create; + try + WriteReportToStream(ms); + ms.Position:=0; + SetLength(Result,ms.Size); + if Result<>'' then + ms.Read(Result[1],length(Result)); + finally + ms.Free; + end; +end; + +procedure TAVLTree.SetOnCompare(const AValue: TListSortCompare); +begin + if AValue=nil then + SetCompares(nil,FOnObjectCompare) + else + SetCompares(AValue,nil); +end; + +procedure TAVLTree.SetNodeManager(NewMgr: TBaseAVLTreeNodeManager; + AutoFree: boolean); +// only allowed just after create. +begin + if fNodeMgrAutoFree then + FreeAndNil(fNodeMgr); + fNodeMgr:=NewMgr; + fNodeMgrAutoFree:=AutoFree; +end; + +{ TAVLTreeNode } + +function TAVLTreeNode.TreeDepth: integer; +// longest WAY down. e.g. only one node => 0 ! +var LeftDepth, RightDepth: integer; +begin + if Left<>nil then + LeftDepth:=Left.TreeDepth+1 + else + LeftDepth:=0; + if Right<>nil then + RightDepth:=Right.TreeDepth+1 + else + RightDepth:=0; + if LeftDepth>RightDepth then + Result:=LeftDepth + else + Result:=RightDepth; +end; + +procedure TAVLTreeNode.ConsistencyCheck(Tree: TAVLTree); + + procedure E(Msg: string); + begin + raise Exception.Create('TAVLTreeNode.ConsistencyCheck: '+Msg); + end; + +var + LeftDepth: SizeInt; + RightDepth: SizeInt; +begin + // test left child + if Left<>nil then begin + if Left.Parent<>Self then + E('Left.Parent<>Self'); + if Tree.Compare(Left.Data,Data)>0 then + E('Compare(Left.Data,Data)>0'); + Left.ConsistencyCheck(Tree); + end; + // test right child + if Right<>nil then begin + if Right.Parent<>Self then + E('Right.Parent<>Self'); + if Tree.Compare(Data,Right.Data)>0 then + E('Compare(Data,Right.Data)>0'); + Right.ConsistencyCheck(Tree); + end; + // test balance + if Left<>nil then + LeftDepth:=Left.TreeDepth+1 + else + LeftDepth:=0; + if Right<>nil then + RightDepth:=Right.TreeDepth+1 + else + RightDepth:=0; + if Balance<>(RightDepth-LeftDepth) then + E('Balance['+IntToStr(Balance)+']<>(RightDepth['+IntToStr(RightDepth)+']-LeftDepth['+IntToStr(LeftDepth)+'])'); +end; + +function TAVLTreeNode.GetCount: SizeInt; +begin + Result:=1; + if Left<>nil then inc(Result,Left.GetCount); + if Right<>nil then inc(Result,Right.GetCount); +end; + +function TAVLTreeNode.Successor: TAVLTreeNode; +begin + Result:=Right; + if Result<>nil then begin + while (Result.Left<>nil) do Result:=Result.Left; + end else begin + Result:=Self; + while (Result.Parent<>nil) and (Result.Parent.Right=Result) do + Result:=Result.Parent; + Result:=Result.Parent; + end; +end; + +function TAVLTreeNode.Precessor: TAVLTreeNode; +begin + Result:=Left; + if Result<>nil then begin + while (Result.Right<>nil) do Result:=Result.Right; + end else begin + Result:=Self; + while (Result.Parent<>nil) and (Result.Parent.Left=Result) do + Result:=Result.Parent; + Result:=Result.Parent; + end; +end; + +procedure TAVLTreeNode.Clear; +begin + Parent:=nil; + Left:=nil; + Right:=nil; + Balance:=0; + Data:=nil; +end; + + + +{ TAVLTreeNodeMemManager } + +constructor TAVLTreeNodeMemManager.Create; +begin + inherited Create; + FFirstFree:=nil; + FFreeCount:=0; + FCount:=0; + FMinFree:=100; + FMaxFreeRatio:=8; // 1:1 +end; + +destructor TAVLTreeNodeMemManager.Destroy; +begin + Clear; + inherited Destroy; +end; + +procedure TAVLTreeNodeMemManager.DisposeNode(ANode: TAVLTreeNode); +begin + if ANode=nil then exit; + if (FFreeCount(((8+FMaxFreeRatio)*FCount) shr 3)) then begin + DisposeFirstFreeNode; + DisposeFirstFreeNode; + end; + end else begin + // free list full -> free the ANode + ANode.Free; + end; + dec(FCount); +end; + +function TAVLTreeNodeMemManager.NewNode: TAVLTreeNode; +begin + if FFirstFree<>nil then begin + // take from free list + Result:=FFirstFree; + FFirstFree:=FFirstFree.Right; + Result.Right:=nil; + end else begin + // free list empty -> create new node + Result:=TAVLTreeNode.Create; + end; + inc(FCount); +end; + +procedure TAVLTreeNodeMemManager.Clear; +var ANode: TAVLTreeNode; +begin + while FFirstFree<>nil do begin + ANode:=FFirstFree; + FFirstFree:=FFirstFree.Right; + ANode.Right:=nil; + ANode.Free; + end; + FFreeCount:=0; +end; + +procedure TAVLTreeNodeMemManager.SetMaxFreeRatio(NewValue: SizeInt); +begin + if NewValue<0 then NewValue:=0; + if NewValue=FMaxFreeRatio then exit; + FMaxFreeRatio:=NewValue; +end; + +procedure TAVLTreeNodeMemManager.SetMinFree(NewValue: SizeInt); +begin + if NewValue<0 then NewValue:=0; + if NewValue=FMinFree then exit; + FMinFree:=NewValue; +end; + +procedure TAVLTreeNodeMemManager.DisposeFirstFreeNode; +var OldNode: TAVLTreeNode; +begin + if FFirstFree=nil then exit; + OldNode:=FFirstFree; + FFirstFree:=FFirstFree.Right; + dec(FFreeCount); + OldNode.Right:=nil; + OldNode.Free; +end; + + +initialization + LazNodeMemManager:=TAVLTreeNodeMemManager.Create; + +finalization + LazNodeMemManager.Free; + LazNodeMemManager:=nil; +end. diff --git a/components/lazutils/lazconfigstorage.pas b/components/lazutils/lazconfigstorage.pas index ddce2d4aa6..5317eb9a7f 100644 --- a/components/lazutils/lazconfigstorage.pas +++ b/components/lazutils/lazconfigstorage.pas @@ -18,7 +18,9 @@ unit LazConfigStorage; interface uses - Classes, SysUtils, typinfo, AvgLvlTree, LazLogger; + Classes, SysUtils, typinfo, Laz_AVL_Tree, + // LazUtils + LazLogger, AvgLvlTree; type { TConfigStorage } @@ -93,7 +95,7 @@ type Name: string; Value: string; Parent: TConfigMemStorageNode; - Children: TAvgLvlTree; // tree of TConfigMemStorageNode + Children: TAvlTree; // tree of TConfigMemStorageNode procedure ClearChilds; constructor Create(AParent: TConfigMemStorageNode; const AName: string); destructor Destroy; override; @@ -173,7 +175,7 @@ end; procedure SaveStringToStringTree(Config: TConfigStorage; const Path: string; Tree: TStringToStringTree); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringToStringItem; i: Integer; SubPath: String; @@ -709,7 +711,7 @@ end; procedure TConfigMemStorage.CreateChilds(Node: TConfigMemStorageNode); begin - Node.Children:=TAvgLvlTree.Create(@CompareConfigMemStorageNodes); + Node.Children:=TAvlTree.Create(@CompareConfigMemStorageNodes); end; procedure TConfigMemStorage.Modify(const APath: string; @@ -718,7 +720,7 @@ var Node: TConfigMemStorageNode; p: PChar; StartPos: PChar; - ChildNode: TAvgLvlTreeNode; + ChildNode: TAvlTreeNode; Child: TConfigMemStorageNode; NewName: string; begin @@ -912,7 +914,7 @@ procedure TConfigMemStorage.SaveToConfig(Config: TConfigStorage; procedure Save(Node: TConfigMemStorageNode; SubPath: string); var - ChildNode: TAvgLvlTreeNode; + ChildNode: TAvlTreeNode; Child: TConfigMemStorageNode; Names: String; begin @@ -996,7 +998,7 @@ procedure TConfigMemStorage.WriteDebugReport; procedure w(Node: TConfigMemStorageNode; Prefix: string); var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin if Node=nil then exit; DebugLn(['TConfigMemStorage.WriteDebugReport ',Prefix,'Name="',Node.Name,'" Value="',Node.Value,'"']); @@ -1018,7 +1020,7 @@ end; procedure TConfigMemStorageNode.ClearChilds; var - OldChilds: TAvgLvlTree; + OldChilds: TAvlTree; begin if Children<>nil then begin OldChilds:=Children; diff --git a/components/lazutils/lazfilecache.pas b/components/lazutils/lazfilecache.pas index dbbd23c715..45e2098372 100644 --- a/components/lazutils/lazfilecache.pas +++ b/components/lazutils/lazfilecache.pas @@ -13,7 +13,8 @@ unit LazFileCache; interface uses - Classes, SysUtils, LazDbgLog, AVL_Tree, LazFileUtils; + Classes, SysUtils, Laz_AVL_Tree, + LazDbgLog, LazFileUtils; type TFileStateCacheItemFlag = ( diff --git a/components/lazutils/lazfreetypefontcollection.pas b/components/lazutils/lazfreetypefontcollection.pas index 84335640a3..848604c81e 100644 --- a/components/lazutils/lazfreetypefontcollection.pas +++ b/components/lazutils/lazfreetypefontcollection.pas @@ -13,7 +13,9 @@ unit LazFreeTypeFontCollection; interface uses - Classes, SysUtils, EasyLazFreeType, AvgLvlTree, LazFreeType, TTTypes; + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + EasyLazFreeType, LazFreeType, TTTypes; type { TFontCollectionItem } @@ -94,18 +96,18 @@ type TFreeTypeFontCollection = class(TCustomFreeTypeFontCollection) private - FFontList: TAvgLvlTree; + FFontList: TAvlTree; FTempFont: TFreeTypeFont; FUpdateCount: integer; - FFamilyList: TAvgLvlTree; + FFamilyList: TAvlTree; function AddFamily(AName: string): TFamilyCollectionItem; function FindFamily(AName: string): TFamilyCollectionItem; function FindFont(AFileName: string): TFontCollectionItem; - function CompareFontFileName({%H-}Tree: TAvgLvlTree; Data1, Data2: Pointer): integer; - function CompareFamilyName({%H-}Tree: TAvgLvlTree; Data1, Data2: Pointer): integer; + function CompareFontFileName({%H-}Tree: TAvlTree; Data1, Data2: Pointer): integer; + function CompareFamilyName({%H-}Tree: TAvlTree; Data1, Data2: Pointer): integer; protected function GetFont(AFileName: string): TCustomFontCollectionItem; override; @@ -146,9 +148,9 @@ type TFamilyEnumerator = class(TInterfacedObject,IFreeTypeFamilyEnumerator) private - FNodeEnumerator: TAvgLvlTreeNodeEnumerator; + FNodeEnumerator: TAvlTreeNodeEnumerator; public - constructor Create(ANodeEnumerator: TAvgLvlTreeNodeEnumerator); + constructor Create(ANodeEnumerator: TAvlTreeNodeEnumerator); destructor Destroy; override; function MoveNext: boolean; function GetCurrent: TCustomFamilyCollectionItem; @@ -158,9 +160,9 @@ type TFontEnumerator = class(TInterfacedObject,IFreeTypeFontEnumerator) private - FNodeEnumerator: TAvgLvlTreeNodeEnumerator; + FNodeEnumerator: TAvlTreeNodeEnumerator; public - constructor Create(ANodeEnumerator: TAvgLvlTreeNodeEnumerator); + constructor Create(ANodeEnumerator: TAvlTreeNodeEnumerator); destructor Destroy; override; function MoveNext: boolean; function GetCurrent: TCustomFontCollectionItem; @@ -391,7 +393,7 @@ begin end; end; -constructor TFontEnumerator.Create(ANodeEnumerator: TAvgLvlTreeNodeEnumerator); +constructor TFontEnumerator.Create(ANodeEnumerator: TAvlTreeNodeEnumerator); begin FNodeEnumerator := ANodeEnumerator; end; @@ -418,7 +420,7 @@ begin result := TCustomFamilyCollectionItem(FNodeEnumerator.Current.Data); end; -constructor TFamilyEnumerator.Create(ANodeEnumerator: TAvgLvlTreeNodeEnumerator ); +constructor TFamilyEnumerator.Create(ANodeEnumerator: TAvlTreeNodeEnumerator); begin FNodeEnumerator := ANodeEnumerator; end; @@ -756,8 +758,9 @@ begin end; function TFreeTypeFontCollection.FindFont(AFileName: string): TFontCollectionItem; -var Comp: integer; - node : TAvgLvlTreeNode; +var + Comp: integer; + node: TAvlTreeNode; begin node:= FFontList.Root; while (node<>nil) do begin @@ -775,8 +778,7 @@ begin result := TFontCollectionItem(node.Data); end; -function TFreeTypeFontCollection.GetFamily(AName: string - ): TCustomFamilyCollectionItem; +function TFreeTypeFontCollection.GetFamily(AName: string): TCustomFamilyCollectionItem; var i,j: Integer; begin @@ -845,8 +847,9 @@ begin end; function TFreeTypeFontCollection.FindFamily(AName: string): TFamilyCollectionItem; -var Comp: integer; - node : TAvgLvlTreeNode; +var + Comp: integer; + node: TAvlTreeNode; begin node:= FFamilyList.Root; while (node<>nil) do begin @@ -864,20 +867,19 @@ begin result := TFamilyCollectionItem(node.Data); end; -function TFreeTypeFontCollection.CompareFontFileName(Tree: TAvgLvlTree; Data1, +function TFreeTypeFontCollection.CompareFontFileName(Tree: TAvlTree; Data1, Data2: Pointer): integer; begin result := CompareStr(TFontCollectionItem(Data1).Filename,TFontCollectionItem(Data2).Filename); end; -function TFreeTypeFontCollection.CompareFamilyName(Tree: TAvgLvlTree; Data1, +function TFreeTypeFontCollection.CompareFamilyName(Tree: TAvlTree; Data1, Data2: Pointer): integer; begin result := CompareText(TFamilyCollectionItem(Data1).FamilyName,TFamilyCollectionItem(Data2).FamilyName); end; -function TFreeTypeFontCollection.GetFont(AFileName: string - ): TCustomFontCollectionItem; +function TFreeTypeFontCollection.GetFont(AFileName: string): TCustomFontCollectionItem; begin AFilename:= ExpandFileName(AFilename); result := FindFont(AFilename); @@ -887,8 +889,8 @@ constructor TFreeTypeFontCollection.Create; begin FUpdateCount := 0; FTempFont := nil; - FFontList := TAvgLvlTree.CreateObjectCompare(@CompareFontFileName); - FFamilyList := TAvgLvlTree.CreateObjectCompare(@CompareFamilyName); + FFontList := TAvlTree.CreateObjectCompare(@CompareFontFileName); + FFamilyList := TAvlTree.CreateObjectCompare(@CompareFamilyName); end; procedure TFreeTypeFontCollection.Clear; @@ -929,7 +931,7 @@ end; procedure TFreeTypeFontCollection.RemoveFolder(AFolder: string); var toBeDeleted: TStringList; - enumerator: TAvgLvlTreeNodeEnumerator; + enumerator: TAvlTreeNodeEnumerator; i: Integer; begin AFolder := ExpandFileName(AFolder); diff --git a/components/lazutils/maps.pp b/components/lazutils/maps.pp index 205f138872..4ea69b9514 100644 --- a/components/lazutils/maps.pp +++ b/components/lazutils/maps.pp @@ -24,9 +24,9 @@ unit Maps; interface uses - Classes, SysUtils, Math, typinfo, + Classes, SysUtils, Math, typinfo, Laz_AVL_Tree, // LazUtils - FPCAdds, AvgLvlTree; + FPCAdds; type TMapIdType = (itu1, its1, itu2, its2, itu4, its4, itu8, its8, itu16, its16, @@ -86,16 +86,16 @@ type TBaseMap = class(TPersistent) private - FTree: TAvgLvlTree; + FTree: TAvlTree; FIdType: TMapIdType; FDataSize: Cardinal; FFirst: PMapItem; // First element of our linkedlist FLast: PMapItem; // Last element of our linkedlist FIterators: TList; // A List of iterators iterating us - function FindNode(const AId): TAvgLvlTreeNode; + function FindNode(const AId): TAvlTreeNode; function FindItem(const AId): PMapItem; - procedure FreeData(ANode: TAvgLvlTreeNode); - function TreeCompareID(Sender: TAvgLvlTree; AItem1, AItem2: Pointer): Integer; + procedure FreeData(ANode: TAvlTreeNode); + function TreeCompareID(Sender: TAvlTree; AItem1, AItem2: Pointer): Integer; //-- procedure IteratorAdd(AIterator: TBaseMapIterator); procedure IteratorRemove(AIterator: TBaseMapIterator); @@ -252,12 +252,12 @@ begin inherited Create; FIdType := AIdType; FDataSize := ADataSize; - FTree := TAvgLvlTree.CreateObjectCompare(@TreeCompareID); + FTree := TAvlTree.CreateObjectCompare(@TreeCompareID); end; function TBaseMap.Delete(const AId): Boolean; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; n: integer; begin Node := FindNode(AId); @@ -303,7 +303,7 @@ end; function TBaseMap.FindItem(const AId): PMapItem; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node := FindNode(AId); if Node = nil @@ -311,7 +311,7 @@ begin else Result := Node.Data; end; -function TBaseMap.FindNode(const AId): TAvgLvlTreeNode; +function TBaseMap.FindNode(const AId): TAvlTreeNode; var Item: TMapItem; begin @@ -319,7 +319,7 @@ begin Result := FTree.Find(@Item); end; -procedure TBaseMap.FreeData(ANode: TAvgLvlTreeNode); +procedure TBaseMap.FreeData(ANode: TAvlTreeNode); begin if ANode = nil then Exit; FreeData(ANode.Left); @@ -359,7 +359,7 @@ procedure TBaseMap.InternalAdd(const AId, AData); var item: PMapItem; p: Pointer; - Node, NewNode: TAvgLvlTreeNode; + Node, NewNode: TAvlTreeNode; begin if FindNode(AId) <> nil then begin @@ -465,7 +465,7 @@ procedure TBaseMap.ReleaseData(ADataPtr: Pointer); begin end; -function TBaseMap.TreeCompareID(Sender: TAvgLvlTree; AItem1, AItem2: Pointer): Integer; +function TBaseMap.TreeCompareID(Sender: TAvlTree; AItem1, AItem2: Pointer): Integer; var Item1: PMapItem absolute AItem1; Item2: PMapItem absolute AItem2; @@ -541,7 +541,7 @@ end; function TBaseMapIterator.InternalLocate(const AId): Boolean; var C: Integer; - Node, LastNext: TAvgLvlTreeNode; + Node, LastNext: TAvlTreeNode; Item: TMapItem; begin ValidateMap; diff --git a/components/synedit/synedithighlighterfoldbase.pas b/components/synedit/synedithighlighterfoldbase.pas index ee0617e1b9..ef32ca9aa2 100644 --- a/components/synedit/synedithighlighterfoldbase.pas +++ b/components/synedit/synedithighlighterfoldbase.pas @@ -57,8 +57,13 @@ unit SynEditHighlighterFoldBase; interface uses - SysUtils, Classes, math, LCLProc, SynEditHighlighter, SynEditTypes, - LazSynEditText, AvgLvlTree, LazClasses; + SysUtils, Classes, math, Laz_AVL_Tree, + // LCL + LCLProc, + // LazUtils + LazClasses, + // SynEdit + SynEditHighlighter, SynEditTypes, LazSynEditText; const NullRange = TSynEditRange(nil); @@ -532,7 +537,7 @@ type private FAllocatedCount: integer; FHighlighterClass: TSynCustomHighlighterClass; - FItems: TAvgLvlTree; + FItems: TAvlTree; public constructor Create(TheHighlighterClass: TSynCustomHighlighterClass); destructor Destroy; override; @@ -2484,7 +2489,7 @@ constructor TSynCustomHighlighterRanges.Create( TheHighlighterClass: TSynCustomHighlighterClass); begin Allocate; - FItems:=TAvgLvlTree.Create(@CompareSynHighlighterRanges); + FItems:=TAvlTree.Create(@CompareSynHighlighterRanges); end; destructor TSynCustomHighlighterRanges.Destroy; @@ -2502,7 +2507,7 @@ end; function TSynCustomHighlighterRanges.GetEqual(Range: TSynCustomHighlighterRange ): TSynCustomHighlighterRange; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin if Range=nil then exit(nil); Node:=FItems.Find(Range); diff --git a/components/todolist/todolist.pas b/components/todolist/todolist.pas index 5df6399a81..f5ee0f0488 100644 --- a/components/todolist/todolist.pas +++ b/components/todolist/todolist.pas @@ -59,14 +59,18 @@ unit TodoList; interface uses - // FCL, RTL, LCL - Classes, SysUtils, Math, LCLProc, Forms, Controls, Dialogs, StrUtils, - ComCtrls, ActnList, AvgLvlTree, LazUTF8Classes, LCLType, ButtonPanel, - CodeCache, CodeToolManager, BasicCodeTools, FileProcs, LazFileUtils, - LazFileCache, LclIntf, StdCtrls, XMLPropStorage, + // FCL, RTL + Classes, SysUtils, Math, StrUtils, Laz_AVL_Tree, + // LCL + LCLProc, LCLType, LclIntf, Forms, Controls, StdCtrls, Dialogs, ComCtrls, + ActnList, ButtonPanel, XMLPropStorage, + // LazUtils + AvgLvlTree, LazUTF8Classes, LazFileUtils, LazFileCache, + // Codetools + CodeCache, CodeToolManager, BasicCodeTools, FileProcs, // IDEIntf LazIDEIntf, IDEImagesIntf, PackageIntf, ProjectIntf, IDEUtils, - // IDE + // ToDoList ToDoListStrConsts; @@ -178,7 +182,7 @@ type FLoadingOptions: boolean; fStartFilename: String; FOnOpenFile : TOnOpenFile; - fScannedFiles: TAvgLvlTree;// tree of TTLScannedFile + fScannedFiles: TAvlTree;// tree of TTLScannedFile procedure SetIDEItem(AValue: string); procedure SetIdleConnected(const AValue: boolean); @@ -255,7 +259,7 @@ var i: integer; St : String; CurOwner: TObject; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; CurFile: TTLScannedFile; Units: TStrings; CurProject: TLazProject; @@ -633,7 +637,7 @@ end; procedure TIDETodoWindow.FormCreate(Sender: TObject); begin fUpdating := False; - fScannedFiles := TAvgLvlTree.Create(@CompareTLScannedFiles); + fScannedFiles := TAvlTree.Create(@CompareTLScannedFiles); Caption := lisToDoList; @@ -787,7 +791,7 @@ end; procedure TIDETodoWindow.ScanFile(aFileName: string); var ExpandedFilename: String; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; Tool: TCodeTool; Code: TCodeBuffer; CurFile: TTLScannedFile; diff --git a/components/wiki/lazwiki/wiki2chmconvert.pas b/components/wiki/lazwiki/wiki2chmconvert.pas index 805f3bdc2c..7fe2c789b8 100644 --- a/components/wiki/lazwiki/wiki2chmconvert.pas +++ b/components/wiki/lazwiki/wiki2chmconvert.pas @@ -33,13 +33,16 @@ unit Wiki2CHMConvert; interface uses - Classes, SysUtils, Wiki2HTMLConvert, Wiki2XHTMLConvert, LazLogger, laz2_DOM, + Classes, SysUtils, {$IFDEF EnableWikiCHMWriter} wikichmwriter, wikichmfilewriter, wikichmsitemap, {$ELSE} chmwriter, chmfilewriter, chmsitemap, {$ENDIF} - LazUTF8, LazFileUtils, CodeToolsStructs; + // LazUtils + LazLogger, LazUTF8, LazFileUtils, AvgLvlTree, + // LazWiki + Wiki2HTMLConvert, Wiki2XHTMLConvert; const CHMImagesDir = '/images/'; diff --git a/components/wiki/lazwiki/wiki2xhtmlconvert.pas b/components/wiki/lazwiki/wiki2xhtmlconvert.pas index bf2b21ba52..be3913ffc5 100644 --- a/components/wiki/lazwiki/wiki2xhtmlconvert.pas +++ b/components/wiki/lazwiki/wiki2xhtmlconvert.pas @@ -25,8 +25,13 @@ unit Wiki2XHTMLConvert; interface uses - Classes, SysUtils, WikiFormat, WikiParser, laz2_DOM, LazLogger, LazFileUtils, - laz2_XMLWrite, LazUTF8, BasicCodeTools, KeywordFuncLists, CodeToolsStructs; + Classes, SysUtils, + // LazUtils + laz2_XMLWrite, LazUTF8, laz2_DOM, LazLogger, LazFileUtils, AvgLvlTree, + // CodeTools + BasicCodeTools, KeywordFuncLists, + // LazWiki + WikiFormat, WikiParser; type TW2XHTMLStackItem = record diff --git a/components/wiki/lazwiki/wikiformat.pas b/components/wiki/lazwiki/wikiformat.pas index c13a1d67ae..2cdcc805a0 100644 --- a/components/wiki/lazwiki/wikiformat.pas +++ b/components/wiki/lazwiki/wikiformat.pas @@ -27,9 +27,13 @@ unit WikiFormat; interface uses - Classes, SysUtils, WikiParser, WikiStrConsts, laz2_XMLRead, LazFileUtils, - laz2_DOM, LazLogger, LazUTF8, AvgLvlTree, KeywordFuncLists, CodeToolsStructs, - BasicCodeTools; + Classes, SysUtils, Laz_AVL_Tree, + // LazUtils + LazFileUtils, laz2_XMLRead, laz2_DOM, LazLogger, LazUTF8, AvgLvlTree, + // Codetools + BasicCodeTools, KeywordFuncLists, + // LazWiki + WikiParser, WikiStrConsts; type TWiki2FormatConverter = class; @@ -70,8 +74,8 @@ type FImagesDir: string; FOutputDir: string; fPages: TFPList; // list of TW2FormatPage - fPagesSortFilename: TAvgLvlTree; // TW2FormatPage sorted for WikiFilename - fPagesSortDocumentName: TAvgLvlTree; // TW2FormatPage sorted for WikiDocumentName + fPagesSortFilename: TAvlTree; // TW2FormatPage sorted for WikiFilename + fPagesSortDocumentName: TAvlTree; // TW2FormatPage sorted for WikiDocumentName FPageClass: TW2FormatPageClass; function GetPages(Index: integer): TW2FormatPage; procedure SetOutputDir(AValue: string); @@ -164,8 +168,8 @@ constructor TWiki2FormatConverter.Create; begin FPageClass:=TW2FormatPage; fPages:=TFPList.Create; - fPagesSortFilename:=TAvgLvlTree.Create(@ComparePagesWithFilenames); - fPagesSortDocumentName:=TAvgLvlTree.Create(@ComparePagesWithDocumentNames); + fPagesSortFilename:=TAvlTree.Create(@ComparePagesWithFilenames); + fPagesSortDocumentName:=TAvlTree.Create(@ComparePagesWithDocumentNames); FTitle:='FPC/Lazarus Wiki (offline, generated '+DatetoStr(Now)+')'; FImagesDir:='images'; FNoWarnBaseURLs:=TStringToStringTree.Create(true); @@ -193,10 +197,9 @@ begin FNoWarnBaseURLs.Clear; end; -function TWiki2FormatConverter.GetPageWithFilename(Filename: string - ): TW2FormatPage; +function TWiki2FormatConverter.GetPageWithFilename(Filename: string): TW2FormatPage; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin if Filename='' then exit(nil); Node:=fPagesSortFilename.FindKey(Pointer(Filename),@CompareFilenameWithPage); @@ -209,7 +212,7 @@ end; function TWiki2FormatConverter.GetPageWithDocumentName(DocumentName: string ): TW2FormatPage; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin if DocumentName='' then exit(nil); Node:=fPagesSortDocumentName.FindKey(Pointer(DocumentName),@CompareDocumentNameWithPage); @@ -291,7 +294,7 @@ end; procedure TWiki2FormatConverter.GetPageTranslations(DocumentName: string; out LangToPage: TStringToPointerTree); var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; Page: TW2FormatPage; begin LangToPage:=TStringToPointerTree.Create(false); diff --git a/components/wiki/test/wikisearchoptions.pas b/components/wiki/test/wikisearchoptions.pas index 95b158fed5..31ff42cd74 100644 --- a/components/wiki/test/wikisearchoptions.pas +++ b/components/wiki/test/wikisearchoptions.pas @@ -25,7 +25,7 @@ unit WikiSearchOptions; interface uses - Classes, SysUtils, FileUtil, LazLogger, BasicCodeTools, + Classes, SysUtils, FileUtil, LazLogger, AvgLvlTree, BasicCodeTools, CodeToolsStructs, WikiHelpManager, WikiStrConsts, WikiFormat, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, ComCtrls, Grids; @@ -325,7 +325,7 @@ end; function TWikiSearchOptsWnd.GetLanguages: string; var - S2SItem: PStringToStringTreeItem; + S2SItem: PStringToStringItem; begin Result:=''; if not FLanguages.Contains('') then diff --git a/converter/chgencodingdlg.pas b/converter/chgencodingdlg.pas index 0a24675f03..79ff5e6590 100644 --- a/converter/chgencodingdlg.pas +++ b/converter/chgencodingdlg.pas @@ -31,13 +31,13 @@ interface uses // RTL + FCL - Classes, SysUtils, AVL_Tree, RegExpr, + Classes, SysUtils, RegExpr, Laz_AVL_Tree, // LCL LCLProc, Forms, Controls, ExtCtrls, StdCtrls, ComCtrls, Buttons, // CodeTools - CodeCache, CodeToolsStructs, CodeToolManager, FileProcs, + CodeCache, CodeToolManager, FileProcs, // LazUtils - LConvEncoding, LazFileUtils, LazFileCache, + LConvEncoding, LazFileUtils, LazFileCache, AvgLvlTree, // IDEIntf IDEWindowIntf, SrcEditorIntf, IDEHelpIntf, // IDE @@ -179,7 +179,7 @@ var SrcEdit: TSourceEditorInterface; Encoding, OldEncoding, NewEncoding: String; Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; Filename: String; HasChanged: boolean; li, Cur: TListItem; @@ -191,7 +191,7 @@ begin OldCount := PreviewListView.Items.Count; Node:=FFiles.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Filename:=Item^.Name; Encoding:=Item^.Value; @@ -356,7 +356,7 @@ end; procedure TChgEncodingDialog.UpdatePreview; var Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; Filename: String; Encoding: String; li: TListItem; @@ -378,7 +378,7 @@ begin PreviewListView.BeginUpdate; Node:=FFiles.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Filename:=Item^.Name; Encoding:=Item^.Value; DebugLn(['TChgEncodingDialog.UpdatePreview Filename=',Filename,' Encoding=',Encoding]); diff --git a/converter/convcodetool.pas b/converter/convcodetool.pas index 565cd4bfee..d9a13bfa1d 100644 --- a/converter/convcodetool.pas +++ b/converter/convcodetool.pas @@ -31,19 +31,19 @@ unit ConvCodeTool; interface uses - // RTL + FCL + LCL - Classes, SysUtils, contnrs, strutils, Forms, Controls, Dialogs, + // RTL + FCL + Classes, SysUtils, contnrs, strutils, + // LCL + Forms, Controls, // CodeTools - CodeToolManager, StdCodeTools, CodeTree, CodeAtom, FileProcs, - FindDeclarationTool, LFMTrees, - ExprEval, KeywordFuncLists, BasicCodeTools, LinkScanner, - CodeCache, SourceChanger, CustomCodeTool, CodeToolsStructs, + CodeToolManager, CodeTree, CodeAtom, FileProcs, KeywordFuncLists, BasicCodeTools, + LinkScanner, CodeCache, SourceChanger, CodeToolsStructs, // LazUtils - LazFileUtils, + LazFileUtils, AvgLvlTree, // IdeIntf - LazIDEIntf, IDEExternToolIntf, + IDEExternToolIntf, // IDE - FormEditor, LazarusIDEStrConsts, + LazarusIDEStrConsts, // Converter ConverterTypes, ConvertSettings, ReplaceNamesUnit, ReplaceFuncsUnit; diff --git a/converter/convertdelphi.pas b/converter/convertdelphi.pas index c7c10208cd..f1611b5f10 100644 --- a/converter/convertdelphi.pas +++ b/converter/convertdelphi.pas @@ -32,12 +32,14 @@ unit ConvertDelphi; interface uses - // RTL + FCL + LCL - Classes, SysUtils, contnrs, IniFiles, LCLProc, Forms, Controls, Dialogs, + // RTL + FCL + Classes, SysUtils, contnrs, IniFiles, + // LCL + LCLProc, Forms, Controls, Dialogs, // CodeTools - CodeToolManager, DefineTemplates, CodeCache, LinkScanner, FileProcs, CodeToolsStructs, + CodeToolManager, DefineTemplates, CodeCache, LinkScanner, FileProcs, // LazUtils - LConvEncoding, FileUtil, LazFileUtils, LazUTF8, LazUTF8Classes, + LConvEncoding, FileUtil, LazFileUtils, LazUTF8, LazUTF8Classes, AvgLvlTree, // IDEIntf ComponentReg, IDEDialogs, LazIDEIntf, PackageIntf, ProjectIntf, IDEExternToolIntf, IDEOptionsIntf, diff --git a/converter/convertsettings.pas b/converter/convertsettings.pas index 33b95b5a7b..efefebaf4e 100644 --- a/converter/convertsettings.pas +++ b/converter/convertsettings.pas @@ -30,13 +30,13 @@ unit ConvertSettings; interface uses - Classes, SysUtils, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, // LCL - Forms, Controls, Dialogs, StdCtrls, Buttons, ButtonPanel, ComCtrls, LCLProc, + Forms, Controls, Dialogs, StdCtrls, Buttons, ButtonPanel, ComCtrls, // LazUtils - FileUtil, LazFileUtils, DividerBevel, LazConfigStorage, + FileUtil, LazFileUtils, DividerBevel, LazConfigStorage, AvgLvlTree, // CodeTools - CodeToolsStructs, CodeToolManager, CodeCache, + CodeToolManager, CodeCache, // IdeIntf BaseIDEIntf, IDEMsgIntf, IDEExternToolIntf, // IDE @@ -335,7 +335,7 @@ end; procedure TConvertSettings.SaveStringToStringTree(Path: string; Tree: TStringToStringTree); var Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; SubPath: String; i: Integer; begin @@ -344,7 +344,7 @@ begin Node:=Tree.Tree.FindLowest; i:=0; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); SubPath:=Path+'Item'+IntToStr(i)+'/'; fConfigStorage.SetDeleteValue(SubPath+'Name',Item^.Name,''); fConfigStorage.SetDeleteValue(SubPath+'Value',Item^.Value,''); diff --git a/converter/missingpropertiesdlg.pas b/converter/missingpropertiesdlg.pas index 67cd8799e3..d1100aa56a 100644 --- a/converter/missingpropertiesdlg.pas +++ b/converter/missingpropertiesdlg.pas @@ -36,7 +36,7 @@ uses Classes, SysUtils, contnrs, LCLProc, Forms, Controls, Grids, LResources, Dialogs, Buttons, StdCtrls, ExtCtrls, // LazUtils - LazFileUtils, LazUTF8Classes, LazUTF8, + LazFileUtils, LazUTF8Classes, LazUTF8, AvgLvlTree, // components SynHighlighterLFM, SynEdit, SynEditMiscClasses, // codetools diff --git a/converter/replacenamesunit.pas b/converter/replacenamesunit.pas index ea0ac7c2a9..622e14f7ae 100644 --- a/converter/replacenamesunit.pas +++ b/converter/replacenamesunit.pas @@ -12,7 +12,7 @@ uses // Codetools CodeToolsStructs, // LazUtils - FileUtil, + FileUtil, AvgLvlTree, // IDE, converter LazarusIDEStrConsts, ConverterTypes; diff --git a/converter/usedunits.pas b/converter/usedunits.pas index b2e865d0ee..ad0682b9f7 100644 --- a/converter/usedunits.pas +++ b/converter/usedunits.pas @@ -31,13 +31,16 @@ unit UsedUnits; interface uses - Classes, SysUtils, AVL_Tree, Forms, Controls, Dialogs, - // IDE - LazarusIDEStrConsts, IDEExternToolIntf, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, Controls, + // LazUtils + AvgLvlTree, // codetools - CodeToolManager, StdCodeTools, CustomCodeTool, CodeTree, CodeAtom, CodeCache, - LinkScanner, KeywordFuncLists, SourceChanger, CodeToolsStrConsts, CodeToolsStructs, - FileProcs, + StdCodeTools, CodeTree, CodeAtom, CodeCache, + LinkScanner, KeywordFuncLists, SourceChanger, CodeToolsStrConsts, + // IDE + IdeIntf + LazarusIDEStrConsts, IDEExternToolIntf, // Converter ConverterTypes, ConvCodeTool, ConvertSettings, ReplaceNamesUnit; @@ -586,7 +589,7 @@ var UnitUpdater: TStringMapUpdater; MapToEdit: TStringToStringTree; Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; UnitN, s: string; i: Integer; begin @@ -620,7 +623,7 @@ begin // Iterate the map and rename / remove. Node:=MapToEdit.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); UnitN:=Item^.Name; s:=Item^.Value; if fMainUsedUnits.fExistingUnits.IndexOf(UnitN)<>-1 then diff --git a/designer/changeclassdialog.pas b/designer/changeclassdialog.pas index bba07460e2..e5cb84c5fd 100644 --- a/designer/changeclassdialog.pas +++ b/designer/changeclassdialog.pas @@ -35,12 +35,15 @@ unit ChangeClassDialog; interface uses - Classes, SysUtils, LCLProc, LResources, Forms, Controls, Graphics, Dialogs, - StdCtrls, Buttons, AVGLvlTree, LFMTrees, CodeCache, CodeToolManager, LCLType, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, LCLType, LResources, Forms, Controls, Dialogs, StdCtrls, ButtonPanel, + // Codetools + LFMTrees, CodeCache, CodeToolManager, + // IdeIntf + ComponentReg, PropEdits, ComponentEditors, FormEditingIntf, SrcEditorIntf, // IDE - SrcEditorIntf, PropEdits, LazarusIDEStrConsts, ComponentReg, ComponentEditors, - FormEditingIntf, IDEDialogs, CheckLFMDlg, Project, MainIntf, ExtCtrls, - ButtonPanel; + LazarusIDEStrConsts, IDEDialogs, CheckLFMDlg, Project, MainIntf; type @@ -59,7 +62,7 @@ type procedure NewClassComboBoxKeyUp(Sender: TObject; var Key: Word; {%H-}Shift: TShiftState); private - FClasses: TAvgLvlTree; + FClasses: TAvlTree; FNewClass: TClass; FThePersistent: TPersistent; procedure SetNewClass(const AValue: TClass); @@ -70,7 +73,7 @@ type procedure FillAncestorListBox(AClass: TClass; AListBox: TListBox); procedure AddClass(const AClass: TPersistentClass); procedure AddComponentClass(const AClass: TComponentClass); - function CompareClasses({%H-}Tree: TAvgLvlTree; Class1, Class2: TClass): integer; + function CompareClasses({%H-}Tree: TAvlTree; Class1, Class2: TClass): integer; public destructor Destroy; override; procedure FillNewClassComboBox; @@ -351,7 +354,7 @@ end; procedure TChangeClassDlg.UpdateNewInfo; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin FNewClass:=nil; if FClasses<>nil then begin @@ -405,7 +408,7 @@ begin AddClass(AClass); end; -function TChangeClassDlg.CompareClasses(Tree: TAvgLvlTree; Class1,Class2: TClass): integer; +function TChangeClassDlg.CompareClasses(Tree: TAvlTree; Class1,Class2: TClass): integer; // sort: // transforming ThePersistent to descending classes is easy // transforming ThePersistent to ascending classes is medium @@ -461,12 +464,12 @@ end; procedure TChangeClassDlg.FillNewClassComboBox; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; List: TStringList; begin // create/clear tree if FClasses=nil then - FClasses:=TAvgLvlTree.CreateObjectCompare(TObjectSortCompare(@CompareClasses)) + FClasses:=TAvlTree.CreateObjectCompare(TObjectSortCompare(@CompareClasses)) else FClasses.Clear; // add class of ThePersistent diff --git a/designer/customnonformdesigner.pas b/designer/customnonformdesigner.pas index c7122ee122..85dfa74e0c 100644 --- a/designer/customnonformdesigner.pas +++ b/designer/customnonformdesigner.pas @@ -30,8 +30,8 @@ unit CustomNonFormDesigner; interface uses - Classes, SysUtils, LCLProc, Graphics, GraphType, Forms, Controls, - IDEProcs, FormEditingIntf; + Classes, SysUtils, + FormEditingIntf; type diff --git a/designer/jitforms.pp b/designer/jitforms.pp index 86e40ef930..49db0e2c8c 100644 --- a/designer/jitforms.pp +++ b/designer/jitforms.pp @@ -46,9 +46,9 @@ uses {$IFDEF IDE_MEM_CHECK} MemCheck, {$ENDIF} - Classes, SysUtils, TypInfo, + Classes, SysUtils, TypInfo, Laz_AVL_Tree, // LCL - Forms, Controls, Dialogs, LResources, LCLMemManager, LCLIntf, LCLProc, + Forms, Controls, Dialogs, LResources, LCLMemManager, LCLProc, //LazUtils AvgLvlTree, // CodeTools @@ -56,7 +56,7 @@ uses // IdeIntf PackageDependencyIntf, PropEditUtils, PropEdits, UnitResources, IDEDialogs, // IDE - IDEProcs, PackageDefs, BasePkgManager, DesignerProcs; + IDEProcs, PackageDefs; type //---------------------------------------------------------------------------- @@ -274,7 +274,7 @@ type TJITMethods = class private fClearing: boolean; - fMethods: TAvgLvlTree;// sorted with CompareJITMethod + fMethods: TAvlTree; // sorted with CompareJITMethod procedure InternalAdd(const AMethod: TJITMethod); procedure InternalRemove(const AMethod: TJITMethod); public @@ -2014,7 +2014,7 @@ end; constructor TJITMethods.Create; begin - fMethods:=TAvgLvlTree.Create(@CompareJITMethod); + fMethods:=TAvlTree.Create(@CompareJITMethod); end; destructor TJITMethods.Destroy; @@ -2045,7 +2045,7 @@ function TJITMethods.Find(aClass: TClass; const aMethodName: shortstring): TJITMethod; var CurMethod: TJITMethod; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Comp: LongInt; begin //DebugLn(['TJITMethods.Find Class=',dbgsname(aClass),' aMethodName=',aMethodName]); @@ -2098,9 +2098,9 @@ end; procedure TJITMethods.DeleteAllOfClass(aClass: TClass); var CurMethod: TJITMethod; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Comp: LongInt; - NextNode: TAvgLvlTreeNode; + NextNode: TAvlTreeNode; begin Node:=fMethods.Root; while (Node<>nil) do begin diff --git a/designer/menutemplates.pas b/designer/menutemplates.pas index cf2503333f..c6e2797a97 100644 --- a/designer/menutemplates.pas +++ b/designer/menutemplates.pas @@ -9,7 +9,7 @@ uses Buttons, Controls, Dialogs, StdCtrls, ExtCtrls, Menus, ComCtrls, Forms, Graphics, Themes, LCLType, LCLIntf, LCLProc, // LazUtils - LazUTF8, LazFileUtils, Laz2_XMLCfg, + LazFileUtils, Laz2_XMLCfg, // IdeIntf IDEDialogs, // IDE diff --git a/designer/noncontroldesigner.pas b/designer/noncontroldesigner.pas index ef07767ce5..2980ee6741 100644 --- a/designer/noncontroldesigner.pas +++ b/designer/noncontroldesigner.pas @@ -31,8 +31,11 @@ unit NonControlDesigner; interface uses - Classes, SysUtils, Math, LCLProc, Graphics, GraphType, Forms, Controls, - IDEProcs, DesignerProcs, FormEditingIntf, CustomNonFormDesigner; + Classes, SysUtils, Math, + // LCL + LCLProc, Graphics, GraphType, Forms, Controls, + // IdeIntf + FormEditingIntf, CustomNonFormDesigner; type diff --git a/designer/taborderdlg.pas b/designer/taborderdlg.pas index c13c06e5ee..29df5cf69c 100644 --- a/designer/taborderdlg.pas +++ b/designer/taborderdlg.pas @@ -32,11 +32,9 @@ unit TabOrderDlg; interface uses - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, // LCL Forms, Controls, Dialogs, Buttons, ExtCtrls, StdCtrls, ComCtrls, LCLType, LCLProc, - // LazUtils - AvgLvlTree, // IdeIntf PropEdits, IDEDialogs, //IDE @@ -64,9 +62,9 @@ type FUpdating: Boolean; procedure SwapNodes(ANode1, ANode2, NewSelected: TTreeNode); procedure CheckButtonsEnabled; - procedure CreateCandidates(OwnerComponent: TComponent; Candidates: TAvgLvlTree); + procedure CreateCandidates(OwnerComponent: TComponent; Candidates: TAvlTree); procedure CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode; - Candidates: TAvgLvlTree); + Candidates: TAvlTree); procedure RefreshTree; procedure OnSomethingChanged; procedure OnPersistentAdded({%H-}APersistent: TPersistent; {%H-}Select: boolean); @@ -321,7 +319,7 @@ begin end; procedure TTabOrderDialog.CreateCandidates(OwnerComponent: TComponent; - Candidates: TAvgLvlTree); + Candidates: TAvlTree); var i: Integer; AComponent: TComponent; @@ -345,7 +343,7 @@ begin end; end; -procedure TTabOrderDialog.CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode; Candidates: TAvgLvlTree); +procedure TTabOrderDialog.CreateNodes(ParentControl: TWinControl; ParentNode: TTreeNode; Candidates: TAvlTree); // Add all controls in Designer to ItemTreeview. var AControl: TControl; @@ -390,7 +388,7 @@ end; procedure TTabOrderDialog.RefreshTree; var LookupRoot: TPersistent; - Candidates: TAvgLvlTree; + Candidates: TAvlTree; begin if not IsVisible then Exit; ItemTreeview.BeginUpdate; @@ -398,7 +396,7 @@ begin ItemTreeview.Items.Clear; LookupRoot := GlobalDesignHook.LookupRoot; if Assigned(LookupRoot) and (LookupRoot is TWinControl) then begin - Candidates := TAvgLvlTree.Create; + Candidates := TAvlTree.Create; try CreateCandidates(TComponent(LookupRoot), Candidates); CreateNodes(TWinControl(LookupRoot), nil, Candidates); diff --git a/ide/addtoprojectdlg.pas b/ide/addtoprojectdlg.pas index 7d4e8a8c14..b224d98147 100644 --- a/ide/addtoprojectdlg.pas +++ b/ide/addtoprojectdlg.pas @@ -34,7 +34,7 @@ unit AddToProjectDlg; interface uses - Classes, SysUtils, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, // LCL Forms, Controls, Buttons, ComCtrls, StdCtrls, Dialogs, ButtonPanel, // LazUtils diff --git a/ide/buildmanager.pas b/ide/buildmanager.pas index 8e1d96ff76..5d387fc1a4 100644 --- a/ide/buildmanager.pas +++ b/ide/buildmanager.pas @@ -35,7 +35,7 @@ interface uses // RTL + FCL - Classes, SysUtils, AVL_Tree, + Classes, SysUtils, Laz_AVL_Tree, // LCL InterfaceBase, LCLPlatformDef, LCLProc, Dialogs, Forms, Controls, // CodeTools diff --git a/ide/buildprojectdlg.pas b/ide/buildprojectdlg.pas index 9de5243e19..8df2f067ec 100644 --- a/ide/buildprojectdlg.pas +++ b/ide/buildprojectdlg.pas @@ -28,11 +28,13 @@ unit BuildProjectDlg; interface uses - Classes, SysUtils, Math, AVL_Tree, Forms, Controls, - Dialogs, ButtonPanel, StdCtrls, ComCtrls, Masks, LCLIntf, - FileProcs, LazFileUtils, LazFileCache, LazUtilities, + Classes, SysUtils, Math, Laz_AVL_Tree, + // LCL + Forms, Controls, Dialogs, ButtonPanel, StdCtrls, ComCtrls, Masks, LCLIntf, + // LazUtils + LazFileUtils, LazFileCache, LazUtilities, AvgLvlTree, // codetools - CodeToolManager, DirectoryCacher, CodeToolsStructs, + FileProcs, CodeToolManager, DirectoryCacher, // IDEIntf IDEDialogs, IDEImagesIntf, PackageIntf, // IDE @@ -518,7 +520,7 @@ function TCleanBuildProjectDialog.DeleteFiles: TModalResult; var Files: TFilenameToStringTree; Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; MaskList: TMaskList; Filename: String; SourceFiles: TStringList; @@ -531,7 +533,7 @@ begin // warn before deleting sources Node:=Files.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Filename:=Item^.Name; if MaskList.Matches(ExtractFilename(Filename)) then SourceFiles.Add(Filename); @@ -549,7 +551,7 @@ begin Node:=Files.Tree.FindLowest; Quiet:=false; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Node:=Files.Tree.FindSuccessor(Node); Filename:=Item^.Name; //debugln(['TBuildProjectDialog.DeleteFiles ',Filename,' ',FileExistsUTF8(Filename)]); diff --git a/ide/checkcompileropts.pas b/ide/checkcompileropts.pas index 86a6798c76..af2d61e6bb 100644 --- a/ide/checkcompileropts.pas +++ b/ide/checkcompileropts.pas @@ -32,17 +32,19 @@ unit CheckCompilerOpts; interface uses - Classes, SysUtils, Forms, Controls, Dialogs, FileUtil, - Clipbrd, StdCtrls, AVL_Tree, Menus, ExtCtrls, ButtonPanel, ComCtrls, - // codetools - CodeToolManager, FileProcs, LazFileCache, LazFileUtils, LazUTF8, - DefineTemplates, CodeToolsStructs, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, Controls, Dialogs, Clipbrd, StdCtrls, Menus, ExtCtrls, ButtonPanel, ComCtrls, + // LazUtils + LazFileCache, FileUtil, LazFileUtils, LazUTF8, AvgLvlTree, + // Codetools + CodeToolManager, FileProcs, DefineTemplates, // IDEIntf ProjectIntf, MacroIntf, IDEExternToolIntf, LazIDEIntf, IDEDialogs, PackageIntf, IDEMsgIntf, // IDE Project, PackageSystem, IDEProcs, - LazarusIDEStrConsts, PackageDefs, CompilerOptions, TransferMacros, LazConf; + LazarusIDEStrConsts, PackageDefs, CompilerOptions, TransferMacros; type TCompilerOptionsTest = ( @@ -528,7 +530,7 @@ var MinPPU: String; MaxPPU: String; Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; procedure CheckFileAge(const aFilename: string); var @@ -599,7 +601,7 @@ begin // b) not updated Node:=CfgCache.Units.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); if (Item^.Value<>'') and (CompareFileExt(Item^.Value,'.ppu',false)=0) then CheckFileAge(Item^.Value); Node:=CfgCache.Units.Tree.FindSuccessor(Node); diff --git a/ide/codebrowser.pas b/ide/codebrowser.pas index ee5619a76a..7153c74b2b 100644 --- a/ide/codebrowser.pas +++ b/ide/codebrowser.pas @@ -45,20 +45,19 @@ unit CodeBrowser; interface uses - // RTL + FCL + LCL - Classes, SysUtils, types, AVL_Tree, - LCLProc, LResources, Forms, Controls, Graphics, Dialogs, Clipbrd, StdCtrls, - ExtCtrls, ComCtrls, Buttons, Menus, HelpIntfs, LCLIntf, + // RTL + FCL + Classes, SysUtils, types, Laz_AVL_Tree, + // LCL + LCLProc, Forms, Controls, Graphics, Dialogs, Clipbrd, StdCtrls, + ExtCtrls, ComCtrls, Buttons, Menus, HelpIntfs, // CodeTools - BasicCodeTools, DefineTemplates, CodeTree, CodeCache, - CodeToolsStructs, CodeToolManager, PascalParserTool, LinkScanner, FileProcs, - CodeIndex, StdCodeTools, SourceLog, CustomCodeTool, + BasicCodeTools, DefineTemplates, CodeTree, CodeCache, CodeToolManager, + PascalParserTool, LinkScanner, FileProcs, CodeIndex, StdCodeTools, SourceLog, // LazUtils - LazFileUtils, LazUtilities, + LazFileUtils, LazUtilities, AvgLvlTree, // IDEIntf IDEWindowIntf, SrcEditorIntf, IDEMsgIntf, IDEDialogs, LazConfigStorage, - IDEHelpIntf, PackageIntf, IDECommands, LazIDEIntf, - IDEExternToolIntf, + IDEHelpIntf, PackageIntf, IDECommands, LazIDEIntf, IDEExternToolIntf, // IDE Project, DialogProcs, PackageSystem, PackageDefs, LazarusIDEStrConsts, IDEOptionDefs, etFPCMsgParser, BasePkgManager, EnvironmentOpts; @@ -1364,7 +1363,7 @@ var Filename: String; ConfigCache: TFPCTargetConfigCache; Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; begin // use unitset of the lazarus source directory LazDir:=AppendPathDelim(EnvironmentOptions.GetParsedLazarusDirectory); @@ -1379,7 +1378,7 @@ var if (ConfigCache=nil) or (ConfigCache.Units=nil) then exit; Node:=ConfigCache.Units.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Filename:=Item^.Value; if (CompareFileExt(Filename,'ppu',false)=0) then begin // search source in fpc sources diff --git a/ide/codeexplopts.pas b/ide/codeexplopts.pas index e9e651e086..c05fb10685 100644 --- a/ide/codeexplopts.pas +++ b/ide/codeexplopts.pas @@ -34,8 +34,9 @@ unit CodeExplOpts; interface uses - // RTL + FCL + LCL - Classes, SysUtils, + // RTL + FCL + Classes, SysUtils, Laz_AVL_Tree, + // LCL LCLProc, Forms, Controls, Graphics, Dialogs, Buttons, // CodeTools BasicCodeTools, FileProcs, @@ -154,7 +155,7 @@ type FObserverCategories: TCEObserverCategories; FFollowCursor: boolean; FMode : TCodeExplorerMode; - FObserverIgnoreConstants: TAvgLvlTree;// tree of AnsiString + FObserverIgnoreConstants: TAvlTree;// tree of AnsiString FOptionsFilename: string; FPage: TCodeExplorerPage; FRefresh: TCodeExplorerRefresh; @@ -218,7 +219,7 @@ type // Observer property ObserveCharConst: boolean read FObserveCharConst write SetObserveCharConst default DefaultCOureCharConst; property ObserverCategories: TCEObserverCategories read FObserverCategories write SetObserverCategories default DefaultCodeObserverCategories; - property ObserverIgnoreConstants: TAvgLvlTree read FObserverIgnoreConstants; + property ObserverIgnoreConstants: TAvlTree read FObserverIgnoreConstants; property COIgnoreConstInFuncs: TStringToStringTree read FCOIgnoreConstInFuncs; property LongParamListCount: integer read FLongParamListCount write SetLongParamListCount default DefaultCOLongParamListCount; property LongProcLineCount: integer read FLongProcLineCount write SetLongProcLineCount default DefaultCOLongProcLineCount; @@ -448,7 +449,7 @@ end; constructor TCodeExplorerOptions.Create; begin FOptionsFilename:=AppendPathDelim(GetPrimaryConfigPath)+'codeexploreroptions.xml'; - FObserverIgnoreConstants:=TAvgLvlTree.Create(TListSortCompare(@CompareAtom)); + FObserverIgnoreConstants:=TAvlTree.Create(TListSortCompare(@CompareAtom)); FCOIgnoreConstInFuncs:=TStringToStringTree.Create(false); Clear; LoadDefaults_COIgnoreConstants; @@ -730,7 +731,7 @@ end; function TCodeExplorerOptions.CreateListOfCOIgnoreConstants: TStrings; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; s: String; begin Result:=TStringList.Create; @@ -745,7 +746,7 @@ end; procedure TCodeExplorerOptions.Clear_COIgnoreConstants; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; s: String; begin if FObserverIgnoreConstants.Count=0 then exit; @@ -787,7 +788,7 @@ end; function TCodeExplorerOptions.CreateListOfCOIgnoreConstInFuncs: TStrings; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; s: String; begin Result:=TStringList.Create; diff --git a/ide/codeexplorer.pas b/ide/codeexplorer.pas index 110451c908..bfc431a4d6 100644 --- a/ide/codeexplorer.pas +++ b/ide/codeexplorer.pas @@ -38,18 +38,18 @@ interface {$I ide.inc} uses - // FCL+LCL - Classes, SysUtils, types, LCLProc, LCLType, Forms, Controls, Graphics, - Dialogs, Buttons, ComCtrls, Menus, AvgLvlTree, StdCtrls, ExtCtrls, + // RTL+FCL + Classes, SysUtils, types, Laz_AVL_Tree, + // LCL + LCLProc, LCLType, Forms, Controls, Dialogs, Buttons, ComCtrls, Menus, StdCtrls, ExtCtrls, // CodeTools FileProcs, BasicCodeTools, CustomCodeTool, CodeToolManager, CodeAtom, CodeCache, CodeTree, KeywordFuncLists, FindDeclarationTool, DirectivesTree, PascalParserTool, - // IDE Intf + // IDEIntf LazIDEIntf, IDECommands, MenuIntf, SrcEditorIntf, IDEDialogs, // IDE - KeyMapping, LazarusIDEStrConsts, EnvironmentOpts, IDEOptionDefs, InputHistory, - IDEProcs, CodeExplOpts; + LazarusIDEStrConsts, IDEOptionDefs, IDEProcs, CodeExplOpts; type TCodeExplorerView = class; @@ -238,8 +238,8 @@ type function OnExpandedStateGetNodeText(Node: TTreeNode): string; protected fLastCodeTool: TCodeTool; - fCodeSortedForStartPos: TAvgLvlTree;// tree of TTreeNode sorted for TViewNodeData(Node.Data).StartPos, secondary EndPos - fNodesWithPath: TAvgLvlTree; // tree of TViewNodeData sorted for Path and Params + fCodeSortedForStartPos: TAvlTree;// tree of TTreeNode sorted for TViewNodeData(Node.Data).StartPos, secondary EndPos + fNodesWithPath: TAvlTree; // tree of TViewNodeData sorted for Path and Params procedure ApplyCodeFilter; procedure ApplyDirectivesFilter; function CompareCodeNodes(Node1, Node2: TTreeNode): integer; @@ -522,7 +522,7 @@ begin CERefreshIDEMenuCommand.OnClick:=@RefreshMenuItemClick; CERenameIDEMenuCommand.OnClick:=@RenameMenuItemClick; - fNodesWithPath:=TAvgLvlTree.Create(@CompareViewNodePathsAndParams); + fNodesWithPath:=TAvlTree.Create(@CompareViewNodePathsAndParams); Application.AddOnUserInputHandler(@OnUserInput); LazarusIDE.AddHandlerOnIDEClose(@OnCloseIDE); @@ -2512,7 +2512,7 @@ var end; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; Node: TTreeNode; NodeData: TViewNodeData; begin @@ -2553,8 +2553,7 @@ begin if (NodeData<>nil) and (NodeData.StartPos>0) and (NodeData.EndPos>=NodeData.StartPos) then begin if fCodeSortedForStartPos=nil then - fCodeSortedForStartPos:= - TAvgLvlTree.Create(TListSortCompare(@CompareViewNodeDataStartPos)); + fCodeSortedForStartPos:=TAvlTree.Create(TListSortCompare(@CompareViewNodeDataStartPos)); fCodeSortedForStartPos.Add(TVNode); end; TVNode:=TVNode.GetNext; @@ -2705,7 +2704,7 @@ procedure TCodeExplorerView.CreateNodePath(ACodeTool: TCodeTool; aNodeData: TObject); var NodeData: TViewNodeData absolute aNodeData; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin if NodeData.CTNode.Desc=ctnProcedure then NodeData.Path:=GetCTNodePath(ACodeTool,NodeData.CTNode); @@ -2727,7 +2726,7 @@ procedure TCodeExplorerView.AddImplementationNode(ACodeTool: TCodeTool; CodeNode: TCodeTreeNode); var NodeData: TViewNodeData; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; DeclData: TViewNodeData; begin if (CodeNode.Desc=ctnProcedure) diff --git a/ide/codehelp.pas b/ide/codehelp.pas index 57d5433259..bc6ff7ad9e 100644 --- a/ide/codehelp.pas +++ b/ide/codehelp.pas @@ -39,21 +39,24 @@ unit CodeHelp; interface uses - // RTL + FCL + LCL - Classes, SysUtils, LCLType, LCLProc, Forms, Controls, FileUtil, Dialogs, + // RTL + FCL + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, Forms, Controls, Dialogs, // CodeTools CodeAtom, CodeTree, CodeToolManager, FindDeclarationTool, BasicCodeTools, KeywordFuncLists, PascalParserTool, CodeCache, CacheCodeTools, CustomCodeTool, FileProcs, DefineTemplates, CodeToolsStructs, // LazUtils - AvgLvlTree, LazFileUtils, LazUTF8, LazFileCache, Laz2_DOM, Laz2_XMLRead, Laz2_XMLWrite, + AvgLvlTree, FileUtil, LazFileUtils, LazUTF8, LazFileCache, + Laz2_DOM, Laz2_XMLRead, Laz2_XMLWrite, // SynEdit SynHighlighterPas, // IDEIntf IDECommands, IDEMsgIntf, MacroIntf, PackageIntf, LazHelpIntf, ProjectIntf, IDEDialogs, IDEHelpIntf, LazIDEIntf, IDEExternToolIntf, // IDE - EditorOptions, LazarusIDEStrConsts, CompilerOptions, IDEProcs, PackageDefs, + EditorOptions, LazarusIDEStrConsts, IDEProcs, PackageDefs, EnvironmentOpts, TransferMacros, PackageSystem, DialogProcs, KeyMapping; const @@ -231,10 +234,10 @@ type TCodeHelpManager = class(TComponent) private - FDocs: TAvgLvlTree;// tree of loaded TLazFPDocFile + FDocs: TAvlTree;// tree of loaded TLazFPDocFile FHandlers: array[TCodeHelpManagerHandler] of TMethodList; FPasHighlighter: TSynPasSyn; - FSrcToDocMap: TAvgLvlTree; // tree of TCHSourceToFPDocFile sorted for SourceFilename + FSrcToDocMap: TAvlTree; // tree of TCHSourceToFPDocFile sorted for SourceFilename FDeclarationCache: TDeclarationInheritanceCache; procedure AddHandler(HandlerType: TCodeHelpManagerHandler; const AMethod: TMethod; {%H-}AsLast: boolean = false); @@ -1182,7 +1185,7 @@ var CurUnitName: String; UnitSet: TFPCUnitSetCache; IsInFPCSrc: Boolean; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin Result:=''; NewOwner:=nil; @@ -1354,8 +1357,8 @@ end; constructor TCodeHelpManager.Create(TheOwner: TComponent); begin inherited Create(TheOwner); - FDocs:=TAvgLvlTree.Create(@CompareLazFPDocFilenames); - FSrcToDocMap:=TAvgLvlTree.Create(@CompareLDSrc2DocSrcFilenames); + FDocs:=TAvlTree.Create(@CompareLazFPDocFilenames); + FSrcToDocMap:=TAvlTree.Create(@CompareLDSrc2DocSrcFilenames); FDeclarationCache:=TDeclarationInheritanceCache.Create( @CodeToolBoss.FindDeclarationAndOverload, @CodeToolBoss.GetCodeTreeNodesDeletedStep); @@ -1375,7 +1378,7 @@ end; function TCodeHelpManager.FindFPDocFile(const Filename: string): TLazFPDocFile; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FDocs.FindKey(Pointer(Filename),@CompareAnsistringWithLazFPDocFile); if Node<>nil then @@ -1705,7 +1708,7 @@ var var CodeBuf: TCodeBuffer; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; MapEntry: TCHSourceToFPDocFile; begin Result:=''; @@ -1802,7 +1805,7 @@ var CacheWasUsed: boolean; AnOwner: TObject; FPDocFilename: String; - S2SItem: PStringToStringTreeItem; + S2SItem: PStringToStringItem; begin for S2SItem in SrcFilenames do begin SrcFilename:=S2SItem^.Name; @@ -3171,7 +3174,7 @@ end; procedure TCodeHelpManager.FreeDocs; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin AVLNode:=FDocs.FindLowest; while AVLNode<>nil do begin diff --git a/ide/codetoolsdefpreview.pas b/ide/codetoolsdefpreview.pas index c496b8692d..bce437c9ab 100644 --- a/ide/codetoolsdefpreview.pas +++ b/ide/codetoolsdefpreview.pas @@ -30,10 +30,19 @@ unit CodeToolsDefPreview; interface uses - Classes, SysUtils, Math, - LCLProc, Forms, Controls, Graphics, Dialogs, ButtonPanel, - StdCtrls, Buttons, ComCtrls, ExtCtrls, LazFileUtils, AVGLvlTree, - SynEdit, DefineTemplates, ExprEval, IDEWindowIntf, IDEHelpIntf, + Classes, SysUtils, Math, Laz_AVL_Tree, + // LCL + LCLProc, Forms, Controls, Graphics, Dialogs, ButtonPanel, Buttons, + StdCtrls, ComCtrls, ExtCtrls, + // LazUtils + LazFileUtils, + // Codetools + DefineTemplates, ExprEval, + // SynEdit + SynEdit, + // IdeIntf + IDEWindowIntf, IDEHelpIntf, + // IDE EditorOptions, LazarusIDEStrConsts, InputHistory, CodeToolsOptions, IDEProcs; type @@ -79,7 +88,7 @@ type {%H-}Selected: Boolean); private FDefineTree: TDefineTree; - FNodeValues: TAvgLvlTree; + FNodeValues: TAvlTree; fReport: TStringList; procedure SetDefineTree(const AValue: TDefineTree); procedure UpdateValues; @@ -232,7 +241,7 @@ procedure TCodeToolsDefinesDialog.UpdateValues; procedure AddNodeReport(Prefix: string; DefTempl: TDefineTemplate); var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; NodeValues: TCodeToolsDefinesNodeValues; s: String; begin @@ -356,7 +365,7 @@ var SelTreeNode: TTreeNode; SelDefNode: TDefineTemplate; s: string; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; NodeValues: TCodeToolsDefinesNodeValues; begin SelTreeNode:=ParsedTemplatesTreeView.Selected; @@ -427,7 +436,7 @@ begin NewNodeValues.ExpressionResult:=ExpressionResult; NewNodeValues.Execute:=Execute; if FNodeValues=nil then - FNodeValues:=TAvgLvlTree.Create(@CompareNodeValues); + FNodeValues:=TAvlTree.Create(@CompareNodeValues); FNodeValues.Add(NewNodeValues); end; diff --git a/ide/compileroptions.pp b/ide/compileroptions.pp index fc6b5df51e..9f78080190 100644 --- a/ide/compileroptions.pp +++ b/ide/compileroptions.pp @@ -42,11 +42,11 @@ unit CompilerOptions; interface uses - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, // LCL InterfaceBase, Forms, Controls, LCLProc, // LazUtils - FileUtil, LazFileUtils, LazUTF8, AvgLvlTree, Laz2_XMLCfg, Laz2_DOM, + FileUtil, LazFileUtils, LazUTF8, Laz2_XMLCfg, Laz2_DOM, // CodeTools FileProcs, DefineTemplates, CodeToolsCfgScript, CodeToolManager, KeywordFuncLists, BasicCodeTools, @@ -379,11 +379,11 @@ type TCompilerMsgIDFlagsEnumerator = class protected - FTree: TAvgLvlTree; - FCurrent: TAvgLvlTreeNode; + FTree: TAvlTree; + FCurrent: TAvlTreeNode; function GetCurrent: PCompilerMsgIdFlag; inline; public - constructor Create(Tree: TAvgLvlTree); + constructor Create(Tree: TAvlTree); function GetEnumerator: TCompilerMsgIDFlagsEnumerator; inline; function MoveNext: Boolean; property Current: PCompilerMsgIdFlag read GetCurrent; @@ -395,8 +395,8 @@ type private FChangeStamp: int64; fLastSavedStamp: int64; - fTree: TAvgLvlTree; // tree of TCompilerMsgIdFlag - function FindNode(MsgId: integer): TAvgLvlTreeNode; + fTree: TAvlTree; // tree of TCompilerMsgIdFlag + function FindNode(MsgId: integer): TAvlTreeNode; protected function GetValues(MsgId: integer): TCompilerFlagValue; override; function GetModified: boolean; override; @@ -1012,7 +1012,7 @@ begin Result:=PCompilerMsgIdFlag(FCurrent.Data); end; -constructor TCompilerMsgIDFlagsEnumerator.Create(Tree: TAvgLvlTree); +constructor TCompilerMsgIDFlagsEnumerator.Create(Tree: TAvlTree); begin FTree:=Tree; end; @@ -4611,7 +4611,7 @@ begin Result:=fTree.Count; end; -function TCompilerMsgIDFlags.FindNode(MsgId: integer): TAvgLvlTreeNode; +function TCompilerMsgIDFlags.FindNode(MsgId: integer): TAvlTreeNode; var Flag: TCompilerMsgIdFlag; begin @@ -4621,7 +4621,7 @@ end; function TCompilerMsgIDFlags.GetValues(MsgId: integer): TCompilerFlagValue; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(MsgId); if Node<>nil then @@ -4646,7 +4646,7 @@ end; procedure TCompilerMsgIDFlags.SetValues(MsgId: integer; AValue: TCompilerFlagValue); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Flag: PCompilerMsgIdFlag; begin Node:=FindNode(MsgId); @@ -4680,7 +4680,7 @@ end; constructor TCompilerMsgIDFlags.Create; begin - fTree:=TAvgLvlTree.Create(@CompareCompMsgIdFlag); + fTree:=TAvlTree.Create(@CompareCompMsgIdFlag); end; destructor TCompilerMsgIDFlags.Destroy; @@ -4692,7 +4692,7 @@ end; procedure TCompilerMsgIDFlags.Clear; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Flag: PCompilerMsgIdFlag; begin Node:=fTree.FindLowest; @@ -4707,7 +4707,7 @@ end; procedure TCompilerMsgIDFlags.Assign(Source: TPersistent); var Src: TCompilerMsgIDFlags; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; SrcFlag, Flag: PCompilerMsgIdFlag; begin if Source is TCompilerMsgIDFlags then begin @@ -4735,8 +4735,8 @@ end; function TCompilerMsgIDFlags.Equals(Obj: TObject): boolean; var Other: TCompilerMsgIDFlags; - MyNode: TAvgLvlTreeNode; - OtherNode: TAvgLvlTreeNode; + MyNode: TAvlTreeNode; + OtherNode: TAvlTreeNode; MyFlag: PCompilerMsgIdFlag; OtherFlag: PCompilerMsgIdFlag; begin @@ -4791,7 +4791,7 @@ end; function TCompilerMsgIDFlags.CreateDiff(Tool: TCompilerDiffTool; Other: TCompilerMsgIDFlags): boolean; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Flag: PCompilerMsgIdFlag; OtherFlag: TCompilerFlagValue; begin diff --git a/ide/componentpalette.pas b/ide/componentpalette.pas index 1e3583d8df..c910dfb9db 100644 --- a/ide/componentpalette.pas +++ b/ide/componentpalette.pas @@ -38,11 +38,15 @@ unit ComponentPalette; interface uses - Classes, SysUtils, AVL_Tree, fgl, LCLType, - Controls, Forms, Graphics, ComCtrls, Buttons, Menus, ExtCtrls, - LazFileUtils, LazFileCache, PropEdits, LCLProc, MainBase, LazarusIDEStrConsts, - FormEditingIntf, LazIDEIntf, IDEImagesIntf, - ComponentReg, DesignerProcs, PackageDefs, EnvironmentOpts; + Classes, SysUtils, fgl, Laz_AVL_Tree, + // LCL + LCLType, LCLProc, Controls, Forms, Graphics, ComCtrls, Buttons, Menus, ExtCtrls, + // LazUtils + LazFileUtils, LazFileCache, + // IdeIntf + FormEditingIntf, LazIDEIntf, IDEImagesIntf, PropEdits, ComponentReg, + // IDE + MainBase, LazarusIDEStrConsts, DesignerProcs, PackageDefs, EnvironmentOpts; const CompPalSelectionToolBtnPrefix = 'PaletteSelectBtn'; diff --git a/ide/customformeditor.pp b/ide/customformeditor.pp index 404055cab3..1c595740d7 100644 --- a/ide/customformeditor.pp +++ b/ide/customformeditor.pp @@ -38,12 +38,13 @@ uses {$IFDEF IDE_MEM_CHECK} MemCheck, {$ENDIF} - // LCL+FCL - Classes, SysUtils, TypInfo, Math, + // RTL+FCL + Classes, SysUtils, TypInfo, Math, Laz_AVL_Tree, + // LCL LCLIntf, LCLType, LCLProc, LResources, LCLMemManager, Controls, Graphics, Forms, Menus, Dialogs, // LazUtils - FileUtil, LazFileUtils, LazFileCache, AvgLvlTree, + FileUtil, LazFileUtils, LazFileCache, // Codetools CodeCache, CodeTree, CodeToolManager, FindDeclarationTool, // IDEIntf @@ -72,20 +73,20 @@ type FOnSelectFrame: TSelectFrameEvent; FSelection: TPersistentSelectionList; FObj_Inspector: TObjectInspectorDlg; - FDefineProperties: TAvgLvlTree;// tree of TDefinePropertiesCacheItem + FDefineProperties: TAvlTree;// tree of TDefinePropertiesCacheItem FStandardDefinePropertiesRegistered: Boolean; FDesignerBaseClasses: TFPList; // list of TComponentClass FDesignerMediatorClasses: TFPList;// list of TDesignerMediatorClass FOnNodeGetImageIndex: TOnOINodeGetImageEvent; function GetPropertyEditorHook: TPropertyEditorHook; function FindDefinePropertyNode(const APersistentClassName: string - ): TAvgLvlTreeNode; + ): TAvlTreeNode; procedure FrameCompGetCreationClass(Sender: TObject; var NewComponentClass: TComponentClass); function OnPropHookGetAncestorInstProp(const InstProp: TInstProp; out AncestorInstProp: TInstProp): boolean; protected - FNonFormForms: TAvgLvlTree; // tree of TNonControlDesignerForm sorted for LookupRoot + FNonFormForms: TAvlTree; // tree of TNonControlDesignerForm sorted for LookupRoot procedure SetSelection(const ASelection: TPersistentSelectionList); procedure OnObjectInspectorModified(Sender: TObject); procedure SetObj_Inspector(AnObjectInspector: TObjectInspectorDlg); virtual; @@ -109,7 +110,7 @@ type function GetStandardDesignerBaseClasses(Index: integer): TComponentClass; override; procedure SetStandardDesignerBaseClasses(Index: integer; AValue: TComponentClass); override; procedure OnDesignerMenuItemClick(Sender: TObject); virtual; - function FindNonFormFormNode(LookupRoot: TComponent): TAvgLvlTreeNode; + function FindNonFormFormNode(LookupRoot: TComponent): TAvlTreeNode; //because we only meet ObjInspectore here, not in abstract ancestor procedure DoOnNodeGetImageIndex(APersistent: TPersistent; var AImageIndex: integer); virtual; @@ -454,7 +455,7 @@ var l: Integer; begin inherited Create; - FNonFormForms := TAvgLvlTree.Create(@CompareNonFormDesignerForms); + FNonFormForms := TAvlTree.Create(@CompareNonFormDesignerForms); FSelection := TPersistentSelectionList.Create; FDesignerBaseClasses:=TFPList.Create; FDesignerMediatorClasses:=TFPList.Create; @@ -809,7 +810,7 @@ end; function TCustomFormEditor.FindNonFormForm(LookupRoot: TComponent): TNonFormProxyDesignerForm; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin AVLNode := FindNonFormFormNode(LookupRoot); if AVLNode <> nil then @@ -1739,7 +1740,7 @@ var APersistent: TPersistent; CacheItem: TDefinePropertiesCacheItem; DefinePropertiesReader: TDefinePropertiesReader; - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; OldClassName: String; DefinePropertiesPersistent: TDefinePropertiesPersistent; @@ -1897,7 +1898,7 @@ end; procedure TCustomFormEditor.RegisterDefineProperty(const APersistentClassName, Identifier: string); var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; CacheItem: TDefinePropertiesCacheItem; begin //DebugLn('TCustomFormEditor.RegisterDefineProperty ',APersistentClassName,' ',Identifier); @@ -2080,7 +2081,7 @@ begin end; end; -function TCustomFormEditor.FindNonFormFormNode(LookupRoot: TComponent): TAvgLvlTreeNode; +function TCustomFormEditor.FindNonFormFormNode(LookupRoot: TComponent): TAvlTreeNode; begin Result := FNonFormForms.FindKey(Pointer(LookupRoot), @CompareLookupRootAndNonFormDesignerForm); @@ -2245,11 +2246,10 @@ begin end; function TCustomFormEditor.FindDefinePropertyNode( - const APersistentClassName: string): TAvgLvlTreeNode; + const APersistentClassName: string): TAvlTreeNode; begin if FDefineProperties=nil then - FDefineProperties:= - TAvgLvlTree.Create(TListSortCompare(@CompareDefPropCacheItems)); + FDefineProperties:=TAvlTree.Create(TListSortCompare(@CompareDefPropCacheItems)); Result:=FDefineProperties.FindKey(PChar(APersistentClassName), TListSortCompare(@ComparePersClassNameAndDefPropCacheItem)); end; diff --git a/ide/etfpcmsgparser.pas b/ide/etfpcmsgparser.pas index 3d8c1c6b85..b34a98ad6f 100644 --- a/ide/etfpcmsgparser.pas +++ b/ide/etfpcmsgparser.pas @@ -35,10 +35,10 @@ uses // RTL Classes, SysUtils, strutils, math, // CodeTools - KeywordFuncLists, CodeToolsFPCMsgs, CodeToolsStructs, CodeCache, FileProcs, + KeywordFuncLists, CodeToolsFPCMsgs, {CodeToolsStructs,} CodeCache, FileProcs, CodeToolManager, DirectoryCacher, BasicCodeTools, DefineTemplates, SourceLog, // LazUtils - LConvEncoding, LazUTF8, FileUtil, LazFileUtils, + LConvEncoding, LazUTF8, FileUtil, LazFileUtils, AvgLvlTree, // IDEIntf IDEExternToolIntf, PackageIntf, LazIDEIntf, ProjectIntf, MacroIntf, IDEUtils, LazFileCache, diff --git a/ide/etmakemsgparser.pas b/ide/etmakemsgparser.pas index c2a550c6b3..11e8760210 100644 --- a/ide/etmakemsgparser.pas +++ b/ide/etmakemsgparser.pas @@ -35,7 +35,7 @@ uses // CodeTools CodeToolsStructs, KeywordFuncLists, // LazUtils - FileUtil, LazFileUtils, + FileUtil, LazFileUtils, AvgLvlTree, // IDEIntf IDEExternToolIntf; diff --git a/ide/etmessageframe.pas b/ide/etmessageframe.pas index 43bc666587..e37c5ff92c 100644 --- a/ide/etmessageframe.pas +++ b/ide/etmessageframe.pas @@ -32,13 +32,14 @@ unit etMessageFrame; interface uses - Math, strutils, Classes, SysUtils, - UTF8Process, FileProcs, LazFileCache, - LazUTF8Classes, LazFileUtils, LazUTF8, AvgLvlTree, SynEdit, - LResources, Forms, Buttons, ExtCtrls, Controls, LMessages, - LCLType, Graphics, LCLIntf, Themes, ImgList, GraphType, Menus, Clipbrd, - Dialogs, StdCtrls, - SynEditMarks, + Math, strutils, Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, Buttons, ExtCtrls, Controls, LMessages, LCLType, LCLIntf, + Graphics, Themes, ImgList, GraphType, Menus, Clipbrd, Dialogs, StdCtrls, + // LazUtils + UTF8Process, FileProcs, LazFileCache, LazUTF8Classes, LazFileUtils, LazUTF8, + // SynEdit + SynEdit, SynEditMarks, // IDEIntf IDEExternToolIntf, IDEImagesIntf, MenuIntf, PackageIntf, IDECommands, IDEDialogs, ProjectIntf, CompOptsIntf, LazIDEIntf, @@ -878,7 +879,7 @@ function TLMsgWndView.ApplySrcChanges(Changes: TETSingleSrcChanges): boolean; var Queue: TETSingleSrcChanges; Change: TETSrcChange; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; aFilename: String; begin Result:=false; @@ -3550,7 +3551,7 @@ end; procedure TMessagesFrame.ApplyMultiSrcChanges(Changes: TETMultiSrcChanges); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin for Node in Changes.PendingChanges do ApplySrcChanges(TETSingleSrcChanges(Node.Data)); diff --git a/ide/etquickfixes.pas b/ide/etquickfixes.pas index 655726d8ab..31edf7c7d5 100644 --- a/ide/etquickfixes.pas +++ b/ide/etquickfixes.pas @@ -53,7 +53,7 @@ unit etQuickFixes; interface uses - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, // LCL Menus, Dialogs, Controls, // LazUtils @@ -925,11 +925,11 @@ var end; var - Tree: TAvgLvlTree; - Node: TAvgLvlTreeNode; + Tree: TAvlTree; + Node: TAvlTreeNode; i: Integer; begin - Tree:=TAvgLvlTree.Create(@CompareMsgLinesSrcPos); + Tree:=TAvlTree.Create(@CompareMsgLinesSrcPos); try // get all messages to hide and sort them for position if Msg=nil then begin diff --git a/ide/etsrceditmarks.pas b/ide/etsrceditmarks.pas index 704f9c7e8d..c947533520 100644 --- a/ide/etsrceditmarks.pas +++ b/ide/etsrceditmarks.pas @@ -32,11 +32,11 @@ unit etSrcEditMarks; interface uses - Classes, SysUtils, math, + Classes, SysUtils, math, Laz_AVL_Tree, // LCL Graphics, Controls, Forms, ImgList, // LazUtils - LazLogger, LazFileUtils, AvgLvlTree, + LazLogger, LazFileUtils, // Codetools KeywordFuncLists, // SynEdit @@ -174,9 +174,9 @@ type TETMultiSrcChanges = class(TComponent) private - fAllChanges: TAvgLvlTree; // tree of TETSingleSrcChanges sorted for Filename + fAllChanges: TAvlTree; // tree of TETSingleSrcChanges sorted for Filename FAutoSync: boolean; - fPendingChanges: TAvgLvlTree; // tree of TETSingleSrcChanges sorted for Filename + fPendingChanges: TAvlTree; // tree of TETSingleSrcChanges sorted for Filename FOnSync: TNotifyEvent; FSyncQueued: boolean; procedure SetSyncQueued(AValue: boolean); @@ -191,8 +191,8 @@ type function AdaptCaret(const aFilename: string; var Line,Col: integer; LeftBound: boolean // true = position is bound to character on the left ): boolean; - property AllChanges: TAvgLvlTree read fAllChanges; // tree of TETSingleSrcChanges sorted for Filename - property PendingChanges: TAvgLvlTree read fPendingChanges; // tree of TETSingleSrcChanges sorted for Filename + property AllChanges: TAvlTree read fAllChanges; // tree of TETSingleSrcChanges sorted for Filename + property PendingChanges: TAvlTree read fPendingChanges; // tree of TETSingleSrcChanges sorted for Filename property SyncQueued: boolean read FSyncQueued write SetSyncQueued; property OnSync: TNotifyEvent read FOnSync write FOnSync; // called by Application.QueueAsyncCall property AutoSync: boolean read FAutoSync write FAutoSync; // true = call OnSync via Application.QueueAsyncCall @@ -589,8 +589,7 @@ end; procedure TETMultiSrcChanges.DoSync(Data: PtrInt); var - Node: TAvgLvlTreeNode; - NextNode: TAvgLvlTreeNode; + Node, NextNode: TAvlTreeNode; begin //debugln(['TETMultiSrcChanges.DoSync Files=',fPendingChanges.Count]); FSyncQueued:=false; @@ -611,8 +610,8 @@ end; constructor TETMultiSrcChanges.Create(AOwner: TComponent); begin inherited Create(AOwner); - fAllChanges:=TAvgLvlTree.Create(@CompareETSrcChangesFilenames); - fPendingChanges:=TAvgLvlTree.Create(@CompareETSrcChangesFilenames); + fAllChanges:=TAvlTree.Create(@CompareETSrcChangesFilenames); + fPendingChanges:=TAvlTree.Create(@CompareETSrcChangesFilenames); end; destructor TETMultiSrcChanges.Destroy; @@ -634,7 +633,7 @@ end; function TETMultiSrcChanges.GetChanges(const aFilename: string; CreateIfNotExists: boolean): TETSingleSrcChanges; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=fAllChanges.FindKey(Pointer(aFilename),@CompareFilenameAndETSrcChanges); if Node<>nil then diff --git a/ide/extractprocdlg.pas b/ide/extractprocdlg.pas index 86eb93f81f..2c7b5df7c7 100644 --- a/ide/extractprocdlg.pas +++ b/ide/extractprocdlg.pas @@ -32,11 +32,14 @@ unit ExtractProcDlg; interface uses - Classes, SysUtils, LCLProc, AVL_Tree, Forms, Controls, Graphics, - Dialogs, ExtCtrls, Buttons, StdCtrls, ButtonPanel, - BasicCodeTools, CodeTree, CodeCache, CodeToolManager, - ExtractProcTool, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, Controls, Dialogs, ExtCtrls, StdCtrls, ButtonPanel, LCLProc, + // Codetools + BasicCodeTools, CodeTree, CodeCache, CodeToolManager, ExtractProcTool, + // IdeIntf IDEHelpIntf, IDEDialogs, + // IDE LazarusIDEStrConsts, IDEProcs, MiscOptions; type diff --git a/ide/exttools.pas b/ide/exttools.pas index 58eab98ddb..926821048d 100644 --- a/ide/exttools.pas +++ b/ide/exttools.pas @@ -34,14 +34,15 @@ unit ExtTools; interface uses - // RTL + FCL + LCL - Classes, SysUtils, math, process, Pipes, + // RTL + FCL + Classes, SysUtils, math, process, Pipes, Laz_AVL_Tree, + // LCL LCLIntf, Forms, Dialogs, {$IFDEF VerboseExtToolThread} LCLProc, {$ENDIF} // CodeTools - FileProcs, CodeToolsStructs, + FileProcs, //CodeToolsStructs, // LazUtils FileUtil, AvgLvlTree, LazFileUtils, UTF8Process, LazUTF8, // IDEIntf @@ -982,7 +983,7 @@ var end; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PPointerToPointerItem; Info: PInfo; begin diff --git a/ide/filereferencelist.pas b/ide/filereferencelist.pas index a29a1a41b9..d321cc7de4 100644 --- a/ide/filereferencelist.pas +++ b/ide/filereferencelist.pas @@ -38,7 +38,15 @@ unit FileReferenceList; interface uses - Classes, SysUtils, LCLProc, FileProcs, LazFileUtils, AvgLvlTree, IDEProcs; + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, + // Codetools + FileProcs, + // LazUtils + LazFileUtils, + // IDE + IDEProcs; type { TFileReference } @@ -65,7 +73,7 @@ type private FOnChanged: TNotifyEvent; FTimeStamp: integer; - FTree: TAvgLvlTree; // tree of TFileReference sorted for filename + FTree: TAvlTree; // tree of TFileReference sorted for filename FFlags: TFileReferenceFlags; FSearchPath: string; FUpdateLock: integer; @@ -110,7 +118,7 @@ end; procedure TFileReferenceList.UpdateSearchPath; var SearchPathLen: Integer; - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; StartPos: Integer; CurFileLen: Integer; CurFileName: String; @@ -212,7 +220,7 @@ end; procedure TFileReferenceList.AddFilename(const Filename: string); var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; NewFileRef: TFileReference; begin if Filename='' then exit; @@ -226,14 +234,14 @@ begin NewFileRef:=TFileReference.Create; NewFileRef.fFilename:=Filename; inc(NewFileRef.fReferenceCount); - if FTree=nil then FTree:=TAvgLvlTree.Create(@CompareFileReferences); + if FTree=nil then FTree:=TAvlTree.Create(@CompareFileReferences); FTree.Add(NewFileRef); Invalidate; end; procedure TFileReferenceList.RemoveFilename(const Filename: string); var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; CurFileRef: TFileReference; begin if Filename='' then exit; @@ -251,7 +259,7 @@ end; function TFileReferenceList.GetFileReference(const Filename: string): TFileReference; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin Result:=nil; if FTree=nil then exit; @@ -268,7 +276,7 @@ end; function TFileReferenceList.CreateFileList: TStringList; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin Result:=TStringList.Create; if FTree=nil then exit; diff --git a/ide/findoverloadsdlg.pas b/ide/findoverloadsdlg.pas index e2ad85a443..da12dbd3f6 100644 --- a/ide/findoverloadsdlg.pas +++ b/ide/findoverloadsdlg.pas @@ -37,11 +37,12 @@ unit FindOverloadsDlg; interface uses - Classes, SysUtils, LCLProc, LazFileUtils, Forms, Controls, Graphics, - Dialogs, ExtCtrls, StdCtrls, Buttons, ButtonPanel, ComCtrls, AvgLvlTree, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, LazFileUtils, Forms, Controls, StdCtrls, ButtonPanel, ComCtrls, // codetools - FindDeclarationTool, PascalParserTool, CodeTree, CodeCache, - CodeToolManager, FindOverloads, + FindDeclarationTool, PascalParserTool, CodeTree, CodeCache, CodeToolManager, + FindOverloads, // IDE LazIDEIntf, ProjectIntf, SrcEditorIntf, IDEProcs; @@ -82,8 +83,8 @@ type TFindOverloadsWorker = class private - FFiles: TAvgLvlTree; - FScanFiles: TAvgLvlTree; + FFiles: TAvlTree; + FScanFiles: TAvlTree; FStagePosition: integer; FStagePosMax: integer; FStageTitle: string; @@ -107,8 +108,8 @@ type function AddFileToScan(const Filename: string; CheckExtension: boolean = true): TFOWFile; function FindFile(const Filename: string): TFOWFile; - property Files: TAvgLvlTree read FFiles; // tree of TFindOverloadsWorkerFile - property ScanFiles: TAvgLvlTree read FScanFiles;// tree of TFindOverloadsWorkerFile + property Files: TAvlTree read FFiles; // tree of TFindOverloadsWorkerFile + property ScanFiles: TAvlTree read FScanFiles;// tree of TFindOverloadsWorkerFile property StageTitle: string read FStageTitle write FStageTitle; property StagePosition: integer read FStagePosition write FStagePosition; property StagePosMax: integer read FStagePosMax write FStagePosMax; @@ -481,7 +482,7 @@ end; function TFindOverloadsWorker.FindFile(const Filename: string): TFOWFile; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin AVLNode:=FFiles.FindKey(Pointer(Filename),@CompareFilenameWithFOWFile); if AVLNode<>nil then @@ -493,8 +494,8 @@ end; constructor TFindOverloadsWorker.Create; begin Scopes:=[fosProject,fosPackages]; - FFiles:=TAvgLvlTree.Create(TListSortCompare(@CompareFOWFiles)); - FScanFiles:=TAvgLvlTree.Create(TListSortCompare(@CompareFOWFiles)); + FFiles:=TAvlTree.Create(TListSortCompare(@CompareFOWFiles)); + FScanFiles:=TAvlTree.Create(TListSortCompare(@CompareFOWFiles)); FStagePosMax:=100; end; diff --git a/ide/findrenameidentifier.pas b/ide/findrenameidentifier.pas index 9ab97f8319..5d337c1165 100644 --- a/ide/findrenameidentifier.pas +++ b/ide/findrenameidentifier.pas @@ -30,13 +30,15 @@ unit FindRenameIdentifier; interface uses - // RTL + FCL + LCL - Classes, SysUtils, AVL_Tree, LCLProc, Forms, Controls, Dialogs, - StdCtrls, ExtCtrls, ComCtrls, ButtonPanel, LclIntf, + // RTL + FCL + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, Forms, Controls, Dialogs, StdCtrls, ExtCtrls, ComCtrls, ButtonPanel, + LclIntf, // CodeTools - FileProcs, CTUnitGraph, CodeTree, CodeCache, CodeToolManager, CodeToolsStructs, + FileProcs, CTUnitGraph, CodeTree, CodeCache, CodeToolManager, // LazUtils - LazFileUtils, LazFileCache, laz2_DOM, + LazFileUtils, LazFileCache, laz2_DOM, AvgLvlTree, // IDE LazarusIDEStrConsts, IDEProcs, IDEWindowIntf, MiscOptions, DialogProcs, LazIDEIntf, IDEDialogs, InputHistory, SearchResultView, CodeHelp; @@ -372,7 +374,7 @@ var CHResult: TCodeHelpParseResult; CHElement: TCodeHelpElement; FPDocFilename: String; - S2SItem: PStringToStringTreeItem; + S2SItem: PStringToStringItem; begin Result:=mrCancel; PascalFilenames:=nil; diff --git a/ide/fpdocselectlink.pas b/ide/fpdocselectlink.pas index 73642ed3e3..6af813c286 100644 --- a/ide/fpdocselectlink.pas +++ b/ide/fpdocselectlink.pas @@ -30,9 +30,14 @@ unit FPDocSelectLink; interface uses - Classes, SysUtils, LCLProc, Forms, Controls, Graphics, - ExtCtrls, StdCtrls, ButtonPanel, FileUtil, LazFileUtils, LCLType, AvgLvlTree, - Laz2_DOM, PackageIntf, ProjectIntf, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, LCLType, Forms, Controls, Graphics, ExtCtrls, StdCtrls, ButtonPanel, + // LazUtils + FileUtil, LazFileUtils, Laz2_DOM, + // IdeIntf + PackageIntf, ProjectIntf, + // IDE CodeHelp, LazarusIDEStrConsts, PackageSystem, PackageDefs; type @@ -61,7 +66,7 @@ type FTextColor: TColor; FTop: integer; FVisibleItems: integer; - FTree: TAvgLvlTree; // tree of TFPDocLinkCompletionItem + FTree: TAvlTree; // tree of TFPDocLinkCompletionItem function GetCount: integer; function GetItems(Index: integer): TFPDocLinkCompletionItem; procedure SetSorted(const AValue: Boolean); @@ -585,7 +590,7 @@ end; constructor TFPDocLinkCompletionList.Create; begin FItems:=TFPList.Create; - FTree:=TAvgLvlTree.Create(@CompareFPDocLinkCompletionItem); + FTree:=TAvlTree.Create(@CompareFPDocLinkCompletionItem); end; destructor TFPDocLinkCompletionList.Destroy; @@ -610,7 +615,7 @@ end; procedure TFPDocLinkCompletionList.Sort; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; i: Integer; begin if FSorted then exit; diff --git a/ide/frames/compiler_other_options.pas b/ide/frames/compiler_other_options.pas index fdae546486..f834b1a587 100644 --- a/ide/frames/compiler_other_options.pas +++ b/ide/frames/compiler_other_options.pas @@ -28,7 +28,7 @@ unit Compiler_Other_Options; interface uses - Classes, SysUtils, math, AVL_Tree, + Classes, SysUtils, math, Laz_AVL_Tree, // LCL Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, LCLType, // LazUtils diff --git a/ide/idehelpmanager.pas b/ide/idehelpmanager.pas index 4a4e7e4784..74dda5b238 100644 --- a/ide/idehelpmanager.pas +++ b/ide/idehelpmanager.pas @@ -32,24 +32,25 @@ unit IDEHelpManager; interface uses - // FCL+LCL - Classes, SysUtils, AVL_Tree, LCLProc, LCLIntf, LCLType, Forms, Controls, - Buttons, StdCtrls, Dialogs, ExtCtrls, FileProcs, Graphics, ButtonPanel, - LConvEncoding, lazutf8classes, LazFileUtils, + // RTL + FCL + Classes, SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, LCLIntf, LCLType, FileProcs, Forms, Controls, ComCtrls, StdCtrls, + Dialogs, Graphics, Buttons, ButtonPanel, + // LazUtils + LConvEncoding, LazUTF8Classes, LazFileUtils, // CodeTools BasicCodeTools, CodeToolManager, CodeCache, CustomCodeTool, CodeTree, PascalParserTool, FindDeclarationTool, // IDEIntf - PropEdits, ObjectInspector, ProjectIntf, TextTools, + PropEdits, ObjectInspector, TextTools, IDEDialogs, LazHelpIntf, LazHelpHTML, HelpFPDoc, MacroIntf, IDEWindowIntf, - IDEMsgIntf, PackageIntf, LazIDEIntf, HelpIntfs, ComCtrls, IDEHelpIntf, + IDEMsgIntf, PackageIntf, LazIDEIntf, HelpIntfs, IDEHelpIntf, IDEExternToolIntf, IDEImagesIntf, // IDE - LazarusIDEStrConsts, TransferMacros, DialogProcs, IDEOptionDefs, - ObjInspExt, EnvironmentOpts, AboutFrm, Project, MainBar, - IDEFPDocFileSearch, PackageDefs, PackageSystem, - HelpOptions, MainIntf, LazConf, HelpFPCMessages, CodeHelp, - IDEWindowHelp, CodeBrowser; + LazarusIDEStrConsts, DialogProcs, ObjInspExt, EnvironmentOpts, AboutFrm, + Project, MainBar, IDEFPDocFileSearch, PackageDefs, PackageSystem, HelpOptions, + MainIntf, LazConf, HelpFPCMessages, CodeHelp, IDEWindowHelp, CodeBrowser; type diff --git a/ide/ideinfoneedbuild.pas b/ide/ideinfoneedbuild.pas index b833a9cf89..128c6aa612 100644 --- a/ide/ideinfoneedbuild.pas +++ b/ide/ideinfoneedbuild.pas @@ -30,9 +30,14 @@ unit IDEInfoNeedBuild; interface uses - Classes, SysUtils, Forms, Controls, StdCtrls, ButtonPanel, LCLType, - AvgLvlTree, LazUtilities, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, Controls, StdCtrls, ButtonPanel, LCLType, + // LazUtils + LazUtilities, + // IdeIntf IDEWindowIntf, LazIDEIntf, ProjectIntf, PackageIntf, + // IDE LazarusIDEStrConsts, PackageDefs, PackageSystem, Project, InputHistory, EnvironmentOpts, IDEProcs, BuildManager; @@ -70,7 +75,7 @@ type FIdleConnected: boolean; FMainTarget: TObject; FSkipDesignTimePackages: boolean; - FTargetToItem: TAvgLvlTree; // tree of TInfoNeedBuildItem sorted for Target + FTargetToItem: TAvlTree; // tree of TInfoNeedBuildItem sorted for Target FTargets: TFPList; // topologically sorted list of TInfoNeedBuildItem, last=main procedure FillTargets; function ProjectAsTarget(AProject: TProject): string; @@ -130,7 +135,7 @@ procedure TIDEInfoNeedBuildDlg.FormCreate(Sender: TObject); var Target: String; begin - FTargetToItem:=TAvgLvlTree.Create(@CompareInfoNeedBuildItemWithTargets); + FTargetToItem:=TAvlTree.Create(@CompareInfoNeedBuildItemWithTargets); FTargets:=TFPList.Create; Caption:=lisWhatNeedsBuilding; diff --git a/ide/ideprocs.pp b/ide/ideprocs.pp index 36710d4707..31dd0efb85 100644 --- a/ide/ideprocs.pp +++ b/ide/ideprocs.pp @@ -31,12 +31,11 @@ interface uses // RTL + LCL - Classes, SysUtils, LCLProc, StdCtrls, ExtCtrls, + Classes, SysUtils, LCLProc, StdCtrls, ExtCtrls, Laz_AVL_Tree, // CodeTools BasicCodeTools, SourceLog, FileProcs, CodeToolManager, CodeToolsConfig, CodeCache, // LazUtils - FileUtil, LazFileUtils, LazFileCache, LazUTF8, lazutf8classes, - AvgLvlTree, Laz2_XMLCfg, + FileUtil, LazFileUtils, LazFileCache, LazUTF8, lazutf8classes, Laz2_XMLCfg, AvgLvlTree, // IDE IDECmdLine, LazConf; @@ -1035,7 +1034,7 @@ end; procedure SaveStringToStringTree(XMLConfig: TXMLConfig; Tree: TStringToStringTree; const Path: string); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: PStringToStringItem; i: Integer; SubPath: String; diff --git a/ide/inputhistory.pas b/ide/inputhistory.pas index 6128627069..840b8e9cd0 100644 --- a/ide/inputhistory.pas +++ b/ide/inputhistory.pas @@ -37,7 +37,7 @@ interface uses // RTL + LCL - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, // LCL Dialogs, // LazUtils @@ -147,8 +147,8 @@ type TIHIgnoreIDEQuestionList = class(TIgnoreIDEQuestionList) private - FItems: TAvgLvlTree; // tree of TIgnoreIDEQuestionItem - function FindNode(const Identifier: string): TAvgLvlTreeNode; + FItems: TAvlTree; // tree of TIgnoreIDEQuestionItem + function FindNode(const Identifier: string): TAvlTreeNode; public constructor Create; destructor Destroy; override; @@ -828,14 +828,14 @@ end; { TIHIgnoreIDEQuestionList } -function TIHIgnoreIDEQuestionList.FindNode(const Identifier: string): TAvgLvlTreeNode; +function TIHIgnoreIDEQuestionList.FindNode(const Identifier: string): TAvlTreeNode; begin Result:=FItems.FindKey(Pointer(Identifier),@CompareAnsiStringWithIHIgnoreItem); end; constructor TIHIgnoreIDEQuestionList.Create; begin - FItems:=TAvgLvlTree.Create(@CompareIHIgnoreItems); + FItems:=TAvlTree.Create(@CompareIHIgnoreItems); end; destructor TIHIgnoreIDEQuestionList.Destroy; @@ -853,7 +853,7 @@ end; function TIHIgnoreIDEQuestionList.Add(const Identifier: string; const Duration: TIgnoreQuestionDuration; const Flag: string): TIgnoreIDEQuestionItem; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Identifier); if Node<>nil then begin @@ -869,7 +869,7 @@ end; procedure TIHIgnoreIDEQuestionList.Delete(const Identifier: string); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Identifier); if Node<>nil then @@ -878,7 +878,7 @@ end; function TIHIgnoreIDEQuestionList.Find(const Identifier: string): TIgnoreIDEQuestionItem; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FindNode(Identifier); if Node<>nil then @@ -925,7 +925,7 @@ procedure TIHIgnoreIDEQuestionList.SaveToXMLConfig(XMLConfig: TXMLConfig; const Path: string); var i: Integer; - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: TIgnoreIDEQuestionItem; SubPath: String; begin diff --git a/ide/keymapping.pp b/ide/keymapping.pp index 9f717cdaf7..a9a40a0fd3 100644 --- a/ide/keymapping.pp +++ b/ide/keymapping.pp @@ -32,11 +32,11 @@ unit KeyMapping; interface uses - Classes, SysUtils, contnrs, + Classes, SysUtils, contnrs, Laz_AVL_Tree, // LCL Forms, LCLType, LCLProc, // LazUtils - AvgLvlTree, Laz2_XMLCfg, + Laz2_XMLCfg, // SynEdit SynEditKeyCmds, SynPluginTemplateEdit, SynPluginSyncroEdit, SynPluginMultiCaret, // IdeIntf @@ -163,8 +163,8 @@ type fRelations: TFPList; // list of TKeyCommandRelation fCategories: TFPList; // list of TKeyCommandCategory fExtToolCount: integer; - fLoadedKeyCommands: TAvgLvlTree; // tree of TLoadedKeyCommand sorted for name - fCmdRelCache: TAvgLvlTree; // cache for TKeyCommandRelation sorted for command + fLoadedKeyCommands: TAvlTree; // tree of TLoadedKeyCommand sorted for name + fCmdRelCache: TAvlTree; // cache for TKeyCommandRelation sorted for command function AddRelation(CmdRel: TKeyCommandRelation): Integer; function GetRelation(Index: integer): TKeyCommandRelation; function GetRelationCount: integer; @@ -2571,8 +2571,8 @@ begin FRelations:=TFPList.Create; fCategories:=TFPList.Create; fExtToolCount:=0; - fLoadedKeyCommands:=TAvgLvlTree.Create(@CompareLoadedKeyCommands); - fCmdRelCache:=TAvgLvlTree.Create(@CompareCmdRels); + fLoadedKeyCommands:=TAvlTree.Create(@CompareLoadedKeyCommands); + fCmdRelCache:=TAvlTree.Create(@CompareCmdRels); end; destructor TKeyCommandRelationList.Destroy; @@ -3200,7 +3200,7 @@ end; function TKeyCommandRelationList.SetKeyCommandToLoadedValues(Cmd: TKeyCommandRelation ): TLoadedKeyCommand; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin AVLNode:=fLoadedKeyCommands.FindKey(Pointer(Cmd.Name),@CompareNameWithLoadedKeyCommand); if AVLNode=nil then begin @@ -3349,7 +3349,7 @@ var Shift1, Shift2: TShiftState; Cnt: LongInt; SubPath: String; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; LoadedKey: TLoadedKeyCommand; begin //debugln('TKeyCommandRelationList.LoadFromXMLConfig A '); @@ -3480,7 +3480,7 @@ function TKeyCommandRelationList.SaveToXMLConfig( var a: integer; Name: String; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; LoadedKey: TLoadedKeyCommand; Cnt: Integer; SubPath: String; @@ -3570,7 +3570,7 @@ end; function TKeyCommandRelationList.FindByCommand(ACommand: word): TKeyCommandRelation; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin AVLNode:=fCmdRelCache.FindKey({%H-}Pointer(PtrUInt(ACommand)), @CompareCmdWithCmdRel); if Assigned(AVLNode) then @@ -3609,7 +3609,7 @@ end; procedure TKeyCommandRelationList.AssignTo(ASynEditKeyStrokes: TSynEditKeyStrokes; IDEWindowClass: TCustomFormClass; ACommandOffsetOffset: Integer = 0); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; ccid: Word; CategoryMatches: Boolean; ToBeFreedKeys: TObjectList; @@ -3691,7 +3691,7 @@ var var i, j: integer; Key: TSynEditKeyStroke; - KeyStrokesByCmds: TAvgLvlTree; + KeyStrokesByCmds: TAvlTree; KeyList: TKeyStrokeList; CurRelation: TKeyCommandRelation; POUsed: Boolean; @@ -3705,7 +3705,7 @@ begin But the IDE requires unique values. The unique values in the plugin (+ KeyOffset) can not be used, as they are not at fixed numbers *) - KeyStrokesByCmds:=TAvgLvlTree.Create(@CompareCmd); + KeyStrokesByCmds:=TAvlTree.Create(@CompareCmd); ToBeFreedKeys:=TObjectList.Create; POUsed:=ASynEditKeyStrokes.UsePluginOffset; SequentialWithCtrl:=TFPList.Create; diff --git a/ide/lfmunitresource.pas b/ide/lfmunitresource.pas index d949b0a459..1e50f7ea1f 100644 --- a/ide/lfmunitresource.pas +++ b/ide/lfmunitresource.pas @@ -30,11 +30,15 @@ unit lfmUnitResource; interface uses - Classes, SysUtils, - // packages - LResources, Forms, CodeCache, CodeToolManager, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, + // LazUtils + LazFileCache, LazFileUtils, + // Codetools + CodeCache, CodeToolManager, // IDEIntf - UnitResources, SrcEditorIntf, LazFileCache, LazFileUtils, AvgLvlTree, + UnitResources, SrcEditorIntf, // IDE CheckLFMDlg; @@ -62,7 +66,7 @@ type end; var - LFMUnitResCache: TAvgLvlTree; + LFMUnitResCache: TAvlTree; function CompareLFMUnitResCacheItems(Cache1, Cache2: Pointer): integer; var @@ -85,7 +89,7 @@ end; function GetLFMUnitResCache(UnitFilename: string; AutoCreate: boolean ): TLFMUnitResCacheItem; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=LFMUnitResCache.FindKey(Pointer(UnitFilename),@CompareFilenameWithLFMUnitResCacheItem); if Node<>nil then begin @@ -152,7 +156,7 @@ end; initialization RegisterUnitResourcefileFormat(TLFMUnitResourcefileFormat); LFMUnitResourceFileFormat:=TLFMUnitResourcefileFormat; - LFMUnitResCache:=TAvgLvlTree.Create(@CompareLFMUnitResCacheItems); + LFMUnitResCache:=TAvlTree.Create(@CompareLFMUnitResCacheItems); finalization LFMUnitResCache.FreeAndClear; FreeAndNil(LFMUnitResCache); diff --git a/ide/main.pp b/ide/main.pp index 290bc8498c..6e3f114f7c 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -59,7 +59,7 @@ uses MemCheck, {$ENDIF} // fpc packages - Math, Classes, SysUtils, TypInfo, types, strutils, AVL_Tree, + Math, Classes, SysUtils, TypInfo, types, strutils, Laz_AVL_Tree, // LCL LCLProc, LCLType, LCLIntf, LResources, HelpIntfs, InterfaceBase, LCLPlatformDef, ComCtrls, Forms, Buttons, Menus, Controls, GraphType, Graphics, ExtCtrls, @@ -71,7 +71,7 @@ uses // LazUtils // use lazutf8, lazfileutils and lazfilecache after FileProcs and FileUtil FileUtil, LazFileUtils, LazFileCache, LazUTF8, LazUTF8Classes, UTF8Process, - LConvEncoding, Laz2_XMLCfg, LazLogger, + LConvEncoding, Laz2_XMLCfg, LazLogger, AvgLvlTree, // SynEdit SynEdit, AllSynEdit, SynEditKeyCmds, SynEditMarks, SynEditHighlighter, // IDE interface @@ -11910,7 +11910,7 @@ var AnUnitInfo: TUnitInfo; AnIDesigner: TIDesigner; HasResources: Boolean; - FileItem: PStringToStringTreeItem; + FileItem: PStringToStringItem; begin if FNeedUpdateHighlighters then begin {$IFDEF VerboseIdle} diff --git a/ide/projectresources.pas b/ide/projectresources.pas index 4f9cb548c8..2c70ef5686 100644 --- a/ide/projectresources.pas +++ b/ide/projectresources.pas @@ -38,17 +38,17 @@ interface uses // RTL + LCL - Classes, SysUtils, resource, reswriter, fgl, + Classes, SysUtils, resource, reswriter, fgl, Laz_AVL_Tree, // LCL - Controls, Dialogs, LCLProc, LResources, + Controls, LCLProc, LResources, // LazUtils - LazFileUtils, AvgLvlTree, Laz2_XMLCfg, + LazFileUtils, Laz2_XMLCfg, // Codetools KeywordFuncLists, BasicCodeTools, CodeToolManager, CodeCache, // IdeIntf ProjectIntf, ProjectResourcesIntf, CompOptsIntf, // IDE - LazarusIDEStrConsts, IDEProcs, DialogProcs, + LazarusIDEStrConsts, DialogProcs, W32Manifest, W32VersionInfo, ProjectIcon, ProjectUserResources; type @@ -238,7 +238,7 @@ type TResourceTypesCache = class public - Tree: TAvgLvlTree; // + Tree: TAvlTree; // constructor Create; destructor Destroy; override; procedure Parse(Code: TCodeBuffer; @@ -249,7 +249,7 @@ type constructor TResourceTypesCache.Create; begin - Tree:=TAvgLvlTree.Create(@CompareResTypCacheItems); + Tree:=TAvlTree.Create(@CompareResTypCacheItems); end; destructor TResourceTypesCache.Destroy; @@ -262,7 +262,7 @@ end; procedure TResourceTypesCache.Parse(Code: TCodeBuffer; out HasLRSIncludeDirective, HasRDirective: boolean); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Item: TResourceTypesCacheItem; begin Node := Tree.FindKey(Code, @CompareCodeWithResTypCacheItem); diff --git a/ide/searchresultview.pp b/ide/searchresultview.pp index f4f20aceda..b21374b4ab 100644 --- a/ide/searchresultview.pp +++ b/ide/searchresultview.pp @@ -37,10 +37,17 @@ unit SearchResultView; interface uses - Classes, SysUtils, LCLProc, Forms, Controls, Graphics, ComCtrls, LCLType, - LCLIntf, LazUTF8, AvgLvlTree, LazFileUtils, Menus, strutils, IDEOptionDefs, - LazarusIDEStrConsts, EnvironmentOpts, InputHistory, IDEProcs, Project, - MainIntf, Clipbrd, ActnList, IDECommands, TreeFilterEdit; + Classes, SysUtils, strutils, Laz_AVL_Tree, + // LCL + LCLProc, LCLType, LCLIntf, Forms, Controls, Graphics, ComCtrls, Menus, Clipbrd, + ActnList, + // LazControls + TreeFilterEdit, + // LazUtils + LazUTF8, LazFileUtils, + // IDE + IDEOptionDefs, LazarusIDEStrConsts, EnvironmentOpts, InputHistory, IDEProcs, + Project, MainIntf, IDECommands; type @@ -100,7 +107,7 @@ type fUpdateCount: integer; FSearchInListPhrases: string; fFiltered: Boolean; - fFilenameToNode: TAvgLvlTree; // TTreeNode sorted for Text + fFilenameToNode: TAvlTree; // TTreeNode sorted for Text procedure SetSkipped(const AValue: integer); procedure AddNode(Line: string; MatchPos: TLazSearchMatchPos); public @@ -1051,7 +1058,7 @@ procedure TLazSearchResultTV.AddNode(Line: string; MatchPos: TLazSearchMatchPos) var Node: TTreeNode; ChildNode: TTreeNode; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin if MatchPos=nil then exit; AVLNode:=fFilenameToNode.FindKey(PChar(MatchPos.FileName),@CompareFilenameWithTVNode); @@ -1085,7 +1092,7 @@ begin fUpdateStrings:= TStringList.Create; FSearchInListPhrases := ''; fFiltered := False; - fFilenameToNode:=TAvgLvlTree.Create(@CompareTVNodeTextAsFilename); + fFilenameToNode:=TAvlTree.Create(@CompareTVNodeTextAsFilename); end;//Create Destructor TLazSearchResultTV.Destroy; diff --git a/ide/sortselectiondlg.pas b/ide/sortselectiondlg.pas index a5f45769d2..dcdb6da32f 100644 --- a/ide/sortselectiondlg.pas +++ b/ide/sortselectiondlg.pas @@ -39,10 +39,17 @@ unit SortSelectionDlg; interface uses - Classes, SysUtils, LCLProc, Forms, Controls, SynEdit, Buttons, StdCtrls, - ExtCtrls, IDEOptionDefs, Dialogs, BasicCodeTools, Graphics, ButtonPanel, - AVL_Tree, TextTools, IDEWindowIntf, LazarusIDEStrConsts, EditorOptions, - MiscOptions, SourceMarks, SynEditHighlighter; + SysUtils, Laz_AVL_Tree, + // LCL + LCLProc, Forms, Controls, StdCtrls, ExtCtrls, ButtonPanel, + // Codetools + BasicCodeTools, + // SynEdit + SynEdit, SynEditHighlighter, + // IdeIntf + TextTools, IDEWindowIntf, + // IDE + LazarusIDEStrConsts, EditorOptions, MiscOptions, SourceMarks; type TSortSelDlgState = ( diff --git a/ide/sourceeditor.pp b/ide/sourceeditor.pp index ed1d8e0fcd..a250f58023 100644 --- a/ide/sourceeditor.pp +++ b/ide/sourceeditor.pp @@ -44,15 +44,15 @@ uses {$ENDIF} SynEditMouseCmds, // RTL + FCL - Classes, SysUtils, StrUtils, types, Math, RegExpr, + Classes, SysUtils, StrUtils, types, Math, RegExpr, Laz_AVL_Tree, // LCL Controls, Forms, ComCtrls, StdCtrls, Graphics, Dialogs, Extctrls, Menus, - LCLProc, LCLType, LResources, LCLIntf, FileUtil, LazFileUtils, + LCLProc, LCLType, LCLIntf, FileUtil, LazFileUtils, ClipBrd, HelpIntfs, Messages, LMessages, // LazControls ExtendedNotebook, // LazUtils - LConvEncoding, LazUTF8Classes, LazFileCache, LazUTF8, AvgLvlTree, + LConvEncoding, LazUTF8Classes, LazFileCache, LazUTF8, LazLoggerBase, LazLogger, Translations, // codetools BasicCodeTools, CodeBeautifier, CodeToolManager, CodeCache, SourceLog, @@ -635,7 +635,7 @@ type FNotebook: TExtendedNotebook; FBaseCaption: String; FIsClosing: Boolean; - FSrcEditsSortedForFilenames: TAvgLvlTree; // TSourceEditorInterface sorted for Filename + FSrcEditsSortedForFilenames: TAvlTree; // TSourceEditorInterface sorted for Filename TabPopUpMenu, SrcPopUpMenu, DbgPopUpMenu: TPopupMenu; procedure ApplyPageIndex; procedure ExecuteEditorItemClick(Sender: TObject); @@ -1856,13 +1856,13 @@ procedure TBrowseEditorTabHistoryDialog.Show(aForward: Boolean); var I: Integer; xPage: TCustomPage; - xIndex: TAvgLvlTree; + xIndex: TAvlTree; begin if FNotebook.PageCount <= 1 then Exit; FEditorList.Items.BeginUpdate; - xIndex := TAvgLvlTree.Create; + xIndex := TAvlTree.Create; try FEditorList.Items.Clear; for I := 0 to FNotebook.FHistoryList.Count-1 do @@ -6163,7 +6163,7 @@ begin FSourceEditorList := TFPList.Create; FHistoryList := TFPList.Create; - FSrcEditsSortedForFilenames := TAvgLvlTree.Create(@CompareSrcEditIntfWithFilename); + FSrcEditsSortedForFilenames := TAvlTree.Create(@CompareSrcEditIntfWithFilename); FHistoryDlg := TBrowseEditorTabHistoryDialog.CreateNew(Self); FOnEditorPageCaptionUpdate := TMethodList.Create; @@ -8059,7 +8059,7 @@ end; function TSourceNotebook.SourceEditorIntfWithFilename(const Filename: string ): TSourceEditorInterface; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FSrcEditsSortedForFilenames.FindKey(Pointer(Filename),@CompareFilenameWithSrcEditIntf); if Node<>nil then diff --git a/ide/sourcefilemanager.pas b/ide/sourcefilemanager.pas index baa0c15e62..810fe3ab60 100644 --- a/ide/sourcefilemanager.pas +++ b/ide/sourcefilemanager.pas @@ -32,12 +32,12 @@ unit SourceFileManager; interface uses - Classes, SysUtils, typinfo, math, AVL_Tree, fpjson, + Classes, SysUtils, typinfo, math, fpjson, Laz_AVL_Tree, // LCL Controls, Forms, Dialogs, LCLIntf, LCLType, LCLProc, LclStrConsts, LResources, LCLMemManager, // LazUtils - LConvEncoding, LazFileCache, FileUtil, LazFileUtils, LazUTF8, + LConvEncoding, LazFileCache, FileUtil, LazFileUtils, LazUTF8, AvgLvlTree, // Codetools BasicCodeTools, CodeToolsStructs, CodeToolManager, FileProcs, DefineTemplates, CodeCache, CodeTree, FindDeclarationTool, KeywordFuncLists, @@ -3710,7 +3710,7 @@ var FirstDependency: TPkgDependency; PkgList: TFPList; i: Integer; - S2SItem: PStringToStringTreeItem; + S2SItem: PStringToStringItem; AnUnitName: String; AFilename: String; UnitList: TViewUnitEntries; diff --git a/ide/sourcemarks.pas b/ide/sourcemarks.pas index 3e65285402..99098c5197 100644 --- a/ide/sourcemarks.pas +++ b/ide/sourcemarks.pas @@ -38,10 +38,14 @@ unit SourceMarks; interface uses - Classes, SysUtils, AVL_Tree, Graphics, Controls, LCLProc, - MenuIntf, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Graphics, Controls, LCLProc, + // SynEdit SynEdit, SynEditMarks, SynEditMarkupGutterMark, - SrcEditorIntf, IDEExternToolIntf, + // IdeIntf + MenuIntf, SrcEditorIntf, IDEExternToolIntf, + // IDE etSrcEditMarks; type diff --git a/ide/unitdependencies.pas b/ide/unitdependencies.pas index 3e2fda570f..8448b8cb1b 100644 --- a/ide/unitdependencies.pas +++ b/ide/unitdependencies.pas @@ -35,12 +35,13 @@ unit UnitDependencies; interface uses - // RTL + FCL + LCL - Classes, SysUtils, types, math, AVL_Tree, + // RTL + FCL + Classes, SysUtils, types, math, Laz_AVL_Tree, + // LCL Forms, Controls, ExtCtrls, ComCtrls, StdCtrls, Buttons, Dialogs, Menus, Clipbrd, // CodeTools - CodeToolManager, DefineTemplates, CodeToolsStructs, CTUnitGraph, CTUnitGroupGraph, - FileProcs, CodeCache, + CodeToolManager, DefineTemplates, CTUnitGraph, CTUnitGroupGraph, + FileProcs, CodeCache, AvgLvlTree, // LazUtils LazLogger, LazFileUtils, LazFileCache, LazUtilities, LazUTF8, LvlGraphCtrl, // IDE interface diff --git a/ide/viewunit_dlg.pp b/ide/viewunit_dlg.pp index a75c2439df..99019ade07 100644 --- a/ide/viewunit_dlg.pp +++ b/ide/viewunit_dlg.pp @@ -40,12 +40,20 @@ unit ViewUnit_Dlg; interface uses - SysUtils, Classes, Controls, Forms, Buttons, StdCtrls, - LazarusIdeStrConsts, IDEProcs, CustomFormEditor, LCLType, LCLIntf, - ExtCtrls, ButtonPanel, Menus, AVL_Tree, ComCtrls, - PackageDefs, IDEWindowIntf, IDEHelpIntf, IDEImagesIntf, ListFilterEdit, - CodeToolsStructs, CodeToolManager, FileProcs, - lazutf8sysutils, LazFileUtils, LazFileCache; + SysUtils, Classes, Laz_AVL_Tree, + // LCL + LCLType, LCLIntf, + Controls, Forms, Buttons, StdCtrls, ExtCtrls, ButtonPanel, Menus, ComCtrls, + // LazUtils + LazUTF8SysUtils, LazFileUtils, LazFileCache, AvgLvlTree, + // Codetools + CodeToolManager, FileProcs, + // LazControls + ListFilterEdit, + // IdeIntf + IDEWindowIntf, IDEHelpIntf, IDEImagesIntf, + // IDE + LazarusIdeStrConsts, IDEProcs, CustomFormEditor, PackageDefs; type TIDEProjectItem = ( @@ -526,7 +534,7 @@ end; procedure TViewUnitDialog.UpdateEntries; var - F2SItem: PStringToStringTreeItem; + F2SItem: PStringToStringItem; begin fEntries.Clear; for F2SItem in fFoundFiles do diff --git a/lcl/comctrls.pp b/lcl/comctrls.pp index 16198ce535..dfc0fb4987 100644 --- a/lcl/comctrls.pp +++ b/lcl/comctrls.pp @@ -29,12 +29,13 @@ unit ComCtrls; interface uses - SysUtils, Types, Classes, Math, - AvgLvlTree, LazUTF8, LazUTF8Classes, - LCLStrConsts, LResources, LCLIntf, LCLType, - FileUtil, LMessages, ImgList, ActnList, GraphType, - Themes, WSLCLClasses, LCLClasses, LCLProc, - Graphics, Menus, Controls, Forms, StdCtrls, ExtCtrls, ToolWin, Buttons; + SysUtils, Types, Classes, Math, Laz_AVL_Tree, + // LazUtils + LazUTF8, LazUTF8Classes, + // LCL + LCLStrConsts, LResources, LCLIntf, LCLType, LMessages, WSLCLClasses, LCLProc, + GraphType, Graphics, ImgList, ActnList, Themes, Menus, Controls, Forms, + StdCtrls, ExtCtrls, ToolWin, Buttons; type THitTest = (htAbove, htBelow, htNowhere, htOnItem, htOnButton, htOnIcon, @@ -3720,7 +3721,7 @@ type function DefaultGetNodeText(Node: TTreeNode): string; public NodeText: string; - Children: TAvgLvlTree; + Children: TAvlTree; constructor Create(FirstTreeNode: TTreeNode; const GetNodeTextEvent: TTVGetNodeText = nil); constructor Create(TreeView: TCustomTreeView; const GetNodeTextEvent: TTVGetNodeText = nil); destructor Destroy; override; diff --git a/lcl/controls.pp b/lcl/controls.pp index b2d1da74d7..465da73a87 100644 --- a/lcl/controls.pp +++ b/lcl/controls.pp @@ -35,9 +35,7 @@ interface {$ENDIF} uses - Classes, SysUtils, TypInfo, Types, - // LazUtils - AvgLvlTree, + Classes, SysUtils, TypInfo, Types, Laz_AVL_Tree, // LCL LCLStrConsts, LCLType, LCLProc, GraphType, Graphics, LMessages, LCLIntf, InterfaceBase, ImgList, PropertyStorage, Menus, ActnList, LCLClasses, @@ -976,11 +974,11 @@ type { TLazAccessibleObjectEnumerator } - TLazAccessibleObjectEnumerator = class(TAvgLvlTreeNodeEnumerator) + TLazAccessibleObjectEnumerator = class(TAvlTreeNodeEnumerator) private function GetCurrent: TLazAccessibleObject; public - property Current: TLazAccessibleObject read GetCurrent; + property CurrentObj: TLazAccessibleObject read GetCurrent; end; { TLazAccessibleObject } @@ -991,7 +989,7 @@ type FPosition: TPoint; FSize: TSize; // only for GetChildAccessibleObject(Index) - FLastSearchNode: TAvgLvlTreeNode; + FLastSearchNode: TAvlTreeNode; FLastSearchIndex: Integer; FLastSearchInSubcontrols: Boolean; function GetHandle: PtrInt; @@ -1001,7 +999,7 @@ type procedure SetPosition(AValue: TPoint); procedure SetSize(AValue: TSize); protected - FChildrenSortedForDataObject: TAvgLvlTree; // of TLazAccessibleObject + FChildrenSortedForDataObject: TAvlTree; // of TLazAccessibleObject FAccessibleDescription: TCaption; FAccessibleValue: TCaption; FAccessibleRole: TLazAccessibilityRole; diff --git a/lcl/graphics.pp b/lcl/graphics.pp index 7d5ee15bbe..4403198177 100644 --- a/lcl/graphics.pp +++ b/lcl/graphics.pp @@ -40,7 +40,7 @@ interface uses // RTL + FCL - SysUtils, Math, Types, Classes, Contnrs, + SysUtils, Math, Types, Classes, Contnrs, Laz_AVL_Tree, FPImage, FPCanvas, FPWriteBMP, // bmp support FPWritePNG, PNGComn, // png support @@ -49,7 +49,7 @@ uses FPReadTiff, FPTiffCmn, // tiff support FPReadGif, // LazUtils - FPCAdds, LazUTF8Classes, FileUtil, AvgLvlTree, + FPCAdds, LazUTF8Classes, // LCL LCLVersion, LCLStrConsts, LCLType, LCLProc, LMessages, LResources, LCLResCache, IntfGraphics, GraphType, IcnsTypes, GraphMath, WSReferences; @@ -489,7 +489,7 @@ type procedure RemoveItem(Item: TResourceCacheItem); override; public constructor Create; - function CompareDescriptors(Tree: TAvgLvlTree; Desc1, Desc2: Pointer): integer; override; + function CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; override; function FindFont(TheFont: TLCLHandle): TResourceCacheItem; function FindFontDesc(const LogFont: TLogFont; const LongFontName: string): TFontHandleCacheDescriptor; @@ -627,7 +627,7 @@ type procedure RemoveItem(Item: TResourceCacheItem); override; public constructor Create; - function CompareDescriptors(Tree: TAvgLvlTree; Desc1, Desc2: Pointer): integer; override; + function CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; override; function FindPen(APen: TLCLHandle): TResourceCacheItem; function FindPenDesc(const AExtPen: TExtLogPen; const APattern: TPenPattern): TPenHandleCacheDescriptor; diff --git a/lcl/include/control.inc b/lcl/include/control.inc index 3fa6f08ce5..e01b1ef196 100644 --- a/lcl/include/control.inc +++ b/lcl/include/control.inc @@ -104,7 +104,7 @@ constructor TLazAccessibleObject.Create(AOwner: TControl); begin inherited Create;//(AOwner); OwnerControl := AOwner; - FChildrenSortedForDataObject := TAvgLvlTree.Create(@CompareDataObjectWithLazAccessibleObject); + FChildrenSortedForDataObject := TAvlTree.Create(@CompareDataObjectWithLazAccessibleObject); WSRegisterClass(); end; @@ -193,7 +193,7 @@ end; procedure TLazAccessibleObject.ClearChildAccessibleObjects; var lXObject: TLazAccessibleObject; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin if FChildrenSortedForDataObject = nil then Exit; //DebugLn(Format('[TControl.ClearChildAccessibleObjects] Name=%s Count=%d', [Name, FAccessibleChildren.Count])); @@ -211,7 +211,7 @@ end; procedure TLazAccessibleObject.RemoveChildAccessibleObject( AObject: TLazAccessibleObject; AFreeObject: Boolean = True); var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin if FChildrenSortedForDataObject = nil then Exit; Node:=FChildrenSortedForDataObject.Find(AObject); @@ -224,7 +224,7 @@ end; function TLazAccessibleObject.GetChildAccessibleObjectWithDataObject( ADataObject: TObject): TLazAccessibleObject; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Result := nil; if FChildrenSortedForDataObject = nil then Exit; @@ -242,7 +242,7 @@ end; function TLazAccessibleObject.GetChildAccessibleObject(AIndex: Integer): TLazAccessibleObject; var - lNode: TAvgLvlTreeNode = nil; + lNode: TAvlTreeNode = nil; begin Result := nil; if AIndex = 0 then lNode := FChildrenSortedForDataObject.FindLowest() diff --git a/lcl/include/font.inc b/lcl/include/font.inc index 59ddfb2559..72477d6f72 100644 --- a/lcl/include/font.inc +++ b/lcl/include/font.inc @@ -42,7 +42,7 @@ begin FResourceCacheDescriptorClass := TFontHandleCacheDescriptor; end; -function TFontHandleCache.CompareDescriptors(Tree: TAvgLvlTree; Desc1, +function TFontHandleCache.CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; var Descriptor1: TFontHandleCacheDescriptor absolute Desc1; @@ -57,7 +57,7 @@ end; function TFontHandleCache.FindFont(TheFont: TLCLHandle): TResourceCacheItem; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ANode := FItems.FindKey(@TheFont, TListSortCompare(@ComparePHandleWithResourceCacheItem)); @@ -71,7 +71,7 @@ function TFontHandleCache.FindFontDesc(const LogFont: TLogFont; const LongFontName: string): TFontHandleCacheDescriptor; var LogFontAndName: TLogFontAndName; - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin LogFontAndName.LogFont := LogFont; LogFontAndName.LongFontName := LongFontName; diff --git a/lcl/include/patternbitmap.inc b/lcl/include/patternbitmap.inc index fbb31b1e30..eb44660abb 100644 --- a/lcl/include/patternbitmap.inc +++ b/lcl/include/patternbitmap.inc @@ -38,8 +38,8 @@ type TPatternBitmapCache = class private FLock: TCriticalSection; - FList: TAvgLvlTree; - function InternalCompare(Tree: TAvgLvlTree; Data1, Data2: Pointer): integer; + FList: TAvlTree; + function InternalCompare(Tree: TAvlTree; Data1, Data2: Pointer): integer; protected procedure Lock; procedure UnLock; @@ -130,8 +130,7 @@ end; { TPatternBitmapCache } -function TPatternBitmapCache.InternalCompare(Tree: TAvgLvlTree; Data1, - Data2: Pointer): integer; +function TPatternBitmapCache.InternalCompare(Tree: TAvlTree; Data1, Data2: Pointer): integer; var Bmp1: TPatternBitmap absolute Data1; Bmp2: TPatternBitmap absolute Data2; @@ -160,7 +159,7 @@ begin debugln(['TPatternBitmapCache.Create']); {$endif} FLock := TCriticalSection.Create; - FList := TAvgLvlTree.CreateObjectCompare(@InternalCompare); + FList := TAvlTree.CreateObjectCompare(@InternalCompare); end; destructor TPatternBitmapCache.Destroy; @@ -216,7 +215,7 @@ end; function TPatternBitmapCache.FindBitmap(AColorBG, AColorFG: TColor): TPatternBitmap; var PatternRec: TPatternRec; - Res: TAvgLvlTreeNode; + Res: TAvlTreeNode; begin Lock; Result := nil; diff --git a/lcl/include/pen.inc b/lcl/include/pen.inc index 4499f2f8c3..1e8e333609 100644 --- a/lcl/include/pen.inc +++ b/lcl/include/pen.inc @@ -50,7 +50,7 @@ begin FResourceCacheDescriptorClass := TPenHandleCacheDescriptor; end; -function TPenHandleCache.CompareDescriptors(Tree: TAvgLvlTree; Desc1, +function TPenHandleCache.CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; var Descriptor1: TPenHandleCacheDescriptor absolute Desc1; @@ -74,7 +74,7 @@ end; function TPenHandleCache.FindPen(APen: TLCLHandle): TResourceCacheItem; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ANode := FItems.FindKey(@APen, TListSortCompare(@ComparePHandleWithResourceCacheItem)); @@ -88,7 +88,7 @@ function TPenHandleCache.FindPenDesc(const AExtPen: TExtLogPen; const APattern: TPenPattern): TPenHandleCacheDescriptor; var ExtPenAndPattern: TExtPenAndPattern; - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ExtPenAndPattern.ExtPen := AExtPen; ExtPenAndPattern.Pattern := APattern; diff --git a/lcl/include/treeview.inc b/lcl/include/treeview.inc index 782b478b1c..97f6c02fea 100644 --- a/lcl/include/treeview.inc +++ b/lcl/include/treeview.inc @@ -245,7 +245,7 @@ begin ChildNode:=FirstTreeNode; while ChildNode<>nil do begin if ChildNode.Expanded then begin - if Children=nil then Children:=TAvgLvlTree.Create(@CompareExpandedNodes); + if Children=nil then Children:=TAvlTree.Create(@CompareExpandedNodes); NewExpandedNode:=TTreeNodeExpandedState.Create(ChildNode.GetFirstChild,OnGetNodeText); if ChildNode.GetFirstChild=nil then NewExpandedNode.NodeText:=OnGetNodeText(ChildNode); @@ -258,7 +258,7 @@ end; procedure TTreeNodeExpandedState.Apply(FirstTreeNode: TTreeNode; CollapseToo: boolean); var ChildNode: TTreeNode; - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; ChildNodeText: String; begin if Children=nil then exit; diff --git a/lcl/include/wincontrol.inc b/lcl/include/wincontrol.inc index 50a04f9cac..f3245e769f 100644 --- a/lcl/include/wincontrol.inc +++ b/lcl/include/wincontrol.inc @@ -171,7 +171,7 @@ type TAutoSizeCtrlData = class private - FChilds: TAvgLvlTree;// tree of TAutoSizeCtrlData + FChilds: TAvlTree;// tree of TAutoSizeCtrlData function GetChildren(AControl: TControl): TAutoSizeCtrlData; procedure DoMoveNonAlignedChildren(Side: TAnchorKind; var MoveDiff: integer; FindMinimum: boolean); @@ -257,12 +257,12 @@ end; function TAutoSizeCtrlData.GetChildren(AControl: TControl): TAutoSizeCtrlData; var - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; begin if AControl=nil then exit(nil); if AControl=Control then RaiseGDBException('TAutoSizeCtrlData.GetChilds'); if FChilds=nil then - FChilds:=TAvgLvlTree.Create(@CompareAutoSizeCtrlDatas); + FChilds:=TAvlTree.Create(@CompareAutoSizeCtrlDatas); AVLNode:=FChilds.FindKey(AControl,@CompareControlWithAutoSizeCtrlData); if AVLNode<>nil then Result:=TAutoSizeCtrlData(AVLNode.Data) diff --git a/lcl/interfaces/gtk/gtkfontcache.pas b/lcl/interfaces/gtk/gtkfontcache.pas index 8cfdba0a88..fbdb4889da 100644 --- a/lcl/interfaces/gtk/gtkfontcache.pas +++ b/lcl/interfaces/gtk/gtkfontcache.pas @@ -13,7 +13,7 @@ unit GtkFontCache; interface uses - Classes, SysUtils, FPCAdds, LCLProc, LCLType, AvgLvlTree, gtkdef, + Classes, SysUtils, FPCAdds, LCLProc, LCLType, Laz_AVL_Tree, gtkdef, {$IFDEF Gtk1} gdk, {$ELSE} @@ -68,8 +68,8 @@ type procedure RemoveItem(Item: TResourceCacheItem); override; public constructor Create; - function CompareItems(Tree: TAvgLvlTree; Item1, Item2: Pointer): integer; override; - function CompareDescriptors(Tree: TAvgLvlTree; Desc1, Desc2: Pointer): integer; override; + function CompareItems(Tree: TAvlTree; Item1, Item2: Pointer): integer; override; + function CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; override; function FindGtkFont(TheGtkFont: TGtkIntfFont): TGtkFontCacheItem; function FindGtkFontDesc(const LogFont: TLogFont; const LongFontName: string): TGtkFontCacheDescriptor; @@ -175,15 +175,13 @@ begin FResourceCacheDescriptorClass:=TGtkFontCacheDescriptor; end; -function TGtkFontCache.CompareItems(Tree: TAvgLvlTree; Item1, Item2: Pointer - ): integer; +function TGtkFontCache.CompareItems(Tree: TAvlTree; Item1, Item2: Pointer): integer; begin Result:=ComparePointers(TGtkFontCacheItem(Item1).GtkFont, TGtkFontCacheItem(Item2).GtkFont); end; -function TGtkFontCache.CompareDescriptors(Tree: TAvgLvlTree; Desc1, - Desc2: Pointer): integer; +function TGtkFontCache.CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; var Descriptor1: TGtkFontCacheDescriptor; Descriptor2: TGtkFontCacheDescriptor; @@ -198,7 +196,7 @@ end; function TGtkFontCache.FindGtkFont(TheGtkFont: TGtkIntfFont): TGtkFontCacheItem; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ANode:=FItems.Findkey(TheGtkFont,TListSortCompare(@CompareGtkFontWithResItem)); if ANode<>nil then @@ -211,7 +209,7 @@ function TGtkFontCache.FindGtkFontDesc(const LogFont: TLogFont; const LongFontName: string): TGtkFontCacheDescriptor; var LogFontAndName: TLogFontAndName; - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin LogFontAndName.LogFont:=LogFont; LogFontAndName.LongFontName:=LongFontName; @@ -302,7 +300,7 @@ end; procedure TGtkFontCache.DumpDescriptors; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; Desc: TGtkFontCacheDescriptor; i: Integer; begin diff --git a/lcl/interfaces/gtk2/gtk2fontcache.pas b/lcl/interfaces/gtk2/gtk2fontcache.pas index 93d4ae0105..6b2577de0b 100644 --- a/lcl/interfaces/gtk2/gtk2fontcache.pas +++ b/lcl/interfaces/gtk2/gtk2fontcache.pas @@ -14,10 +14,9 @@ interface uses // RTL - Classes, SysUtils, glib2, pango, + Classes, SysUtils, glib2, pango, Laz_AVL_Tree, // LCL - LCLProc, LCLType, AvgLvlTree, Gtk2Def, - LCLResCache; + LCLProc, LCLType, Gtk2Def, LCLResCache; type TGtkFontCacheDescriptor = class; @@ -62,8 +61,8 @@ type procedure RemoveItem(Item: TResourceCacheItem); override; public constructor Create; - function CompareItems({%H-}Tree: TAvgLvlTree; Item1, Item2: Pointer): integer; override; - function CompareDescriptors({%H-}Tree: TAvgLvlTree; Desc1, Desc2: Pointer): integer; override; + function CompareItems({%H-}Tree: TAvlTree; Item1, Item2: Pointer): integer; override; + function CompareDescriptors({%H-}Tree: TAvlTree; Desc1, Desc2: Pointer): integer; override; function FindGtkFont(TheGtkFont: TGtkIntfFont): TGtkFontCacheItem; function FindGtkFontDesc(const LogFont: TLogFont; const LongFontName: string): TGtkFontCacheDescriptor; @@ -161,15 +160,13 @@ begin FResourceCacheDescriptorClass:=TGtkFontCacheDescriptor; end; -function TGtkFontCache.CompareItems(Tree: TAvgLvlTree; Item1, Item2: Pointer - ): integer; +function TGtkFontCache.CompareItems(Tree: TAvlTree; Item1, Item2: Pointer): integer; begin Result:=ComparePointers(TGtkFontCacheItem(Item1).GtkFont, TGtkFontCacheItem(Item2).GtkFont); end; -function TGtkFontCache.CompareDescriptors(Tree: TAvgLvlTree; Desc1, - Desc2: Pointer): integer; +function TGtkFontCache.CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; var Descriptor1: TGtkFontCacheDescriptor; Descriptor2: TGtkFontCacheDescriptor; @@ -184,7 +181,7 @@ end; function TGtkFontCache.FindGtkFont(TheGtkFont: TGtkIntfFont): TGtkFontCacheItem; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ANode:=FItems.Findkey(TheGtkFont,TListSortCompare(@CompareGtkFontWithResItem)); if ANode<>nil then @@ -197,7 +194,7 @@ function TGtkFontCache.FindGtkFontDesc(const LogFont: TLogFont; const LongFontName: string): TGtkFontCacheDescriptor; var LogFontAndName: TLogFontAndName; - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin LogFontAndName.LogFont:=LogFont; LogFontAndName.LongFontName:=LongFontName; @@ -209,8 +206,7 @@ begin Result:=nil; end; -function TGtkFontCache.FindADescriptor(TheGtkFont: TGtkIntfFont - ): TGtkFontCacheDescriptor; +function TGtkFontCache.FindADescriptor(TheGtkFont: TGtkIntfFont): TGtkFontCacheDescriptor; var Item: TGtkFontCacheItem; begin @@ -253,8 +249,7 @@ begin end; end; -function TGtkFontCache.AddWithoutName(TheGtkFont: TGtkIntfFont - ): TGtkFontCacheDescriptor; +function TGtkFontCache.AddWithoutName(TheGtkFont: TGtkIntfFont): TGtkFontCacheDescriptor; var LogFont: TLogFont; LongFontName: string; @@ -288,7 +283,7 @@ end; procedure TGtkFontCache.DumpDescriptors; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; Desc: TGtkFontCacheDescriptor; i: Integer; begin diff --git a/lcl/intfgraphics.pas b/lcl/intfgraphics.pas index 687882202e..f2f7e68d9e 100644 --- a/lcl/intfgraphics.pas +++ b/lcl/intfgraphics.pas @@ -27,9 +27,9 @@ interface uses // RTL + FCL Classes, SysUtils, Math, fpImage, FPReadBMP, FPWriteBMP, BMPComn, - FPReadPNG, FPWritePNG, FPReadTiff, FPWriteTiff, FPTiffCmn, + FPReadPNG, FPWritePNG, FPReadTiff, FPWriteTiff, FPTiffCmn, Laz_AVL_Tree, // LazUtils - FPCAdds, AvgLvlTree, + FPCAdds, // LCL LCLType, LCLversion, LCLProc, GraphType, IcnsTypes; @@ -290,8 +290,8 @@ type TLazAVLPalette = class(TFPPalette) protected - FAVLPalette: TAvgLvlTree; // tree of PLazAVLPaletteEntry 'color to index' - FAVLNodes: PAvgLvlTreeNode;// 'index to node' array + FAVLPalette: TAvlTree; // tree of PLazAVLPaletteEntry 'color to index' + FAVLNodes: PAvlTreeNode;// 'index to node' array procedure SetCount(NewCount: integer); override; procedure SetColor(Index: integer; const NewColor: TFPColor); override; function CompareEntries(Index1, Index2: integer): integer; @@ -4350,7 +4350,7 @@ end; procedure TLazAVLPalette.SetCount(NewCount: integer); var NewAVLPalEntry: PLazAVLPaletteEntry; - AVLNode: TAvgLvlTreeNode; + AVLNode: TAvlTreeNode; CurAVLPalEntry: PLazAVLPaletteEntry; Index: Integer; begin @@ -4368,7 +4368,7 @@ begin inherited SetCount(NewCount); // create tree if not already done if (FAVLPalette=nil) and (FCount>0) then - FAVLPalette:=TAvgLvlTree.Create(TListSortCompare(@CompareLazAVLPaletteEntries)); + FAVLPalette:=TAvlTree.Create(TListSortCompare(@CompareLazAVLPaletteEntries)); if FAVLPalette=nil then exit; // add new colors to 'color to index' tree and 'index to node' array while FAVLPalette.Countnil then Node:=FAVLPalette.FindKey(@AColor,TListSortCompare(@ComparePFPColorAndLazAVLPalEntry)) @@ -4461,7 +4461,7 @@ end; procedure TLazAVLPalette.CheckConsistency; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Entry: PLazAVLPaletteEntry; i: Integer; begin diff --git a/lcl/lclproc.pas b/lcl/lclproc.pas index 085dd05899..5799938794 100644 --- a/lcl/lclproc.pas +++ b/lcl/lclproc.pas @@ -26,9 +26,9 @@ interface uses {$IFDEF Darwin}MacOSAll, {$ENDIF} - Classes, SysUtils, Math, TypInfo, Types, + Classes, SysUtils, Math, TypInfo, Types, Laz_AVL_Tree, // LazUtils - FPCAdds, AvgLvlTree, LazFileUtils, LazMethodList, LazUTF8, LazUTF8Classes, + FPCAdds, LazFileUtils, LazMethodList, LazUTF8, LazUTF8Classes, {$IFnDEF WithOldDebugln} LazLogger, {$ENDIF} // LCL LCLStrConsts, LCLType; @@ -55,7 +55,7 @@ type TDebugLCLItems = class private - FItems: TAvgLvlTree;// tree of TDebugLCLItemInfo + FItems: TAvlTree;// tree of TDebugLCLItemInfo FName: string; public constructor Create(const TheName: string); @@ -428,7 +428,7 @@ var DebugNestPrefix: PChar = nil; DebugNestAtBOL: Boolean; {$ENDIF} - LineInfoCache: TAvgLvlTree = nil; + LineInfoCache: TAvlTree = nil; function DeleteAmpersands(var Str : String) : Longint; // Replace all &x with x @@ -1002,12 +1002,12 @@ end; function GetLineInfo(Addr: Pointer; UseCache: boolean): string; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; Item: PLineInfoCacheItem; begin if UseCache then begin if LineInfoCache=nil then - LineInfoCache:=TAvgLvlTree.Create(@CompareLineInfoCacheItems); + LineInfoCache:=TAvlTree.Create(@CompareLineInfoCacheItems); ANode:=LineInfoCache.FindKey(Addr,@CompareAddrWithLineInfoCacheItem); if ANode=nil then begin Result:=BackTraceStrFunc(Addr); @@ -3013,7 +3013,7 @@ end; procedure FreeLineInfoCache; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; Item: PLineInfoCacheItem; begin if LineInfoCache=nil then exit; @@ -3032,7 +3032,7 @@ end; constructor TDebugLCLItems.Create(const TheName: string); begin FName:=TheName; - FItems:=TAvgLvlTree.Create(@CompareDebugLCLItemInfos); + FItems:=TAvlTree.Create(@CompareDebugLCLItemInfos); end; destructor TDebugLCLItems.Destroy; @@ -3042,10 +3042,9 @@ begin inherited Destroy; end; -function TDebugLCLItems.FindInfo(p: Pointer; CreateIfNotExists: boolean - ): TDebugLCLItemInfo; +function TDebugLCLItems.FindInfo(p: Pointer; CreateIfNotExists: boolean): TDebugLCLItemInfo; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ANode:=FItems.FindKey(p,@CompareItemWithDebugLCLItemInfo); if ANode<>nil then diff --git a/lcl/lclrescache.pas b/lcl/lclrescache.pas index d4317fe183..e3daeefbfe 100644 --- a/lcl/lclrescache.pas +++ b/lcl/lclrescache.pas @@ -19,9 +19,9 @@ unit LCLResCache; interface uses - Classes, SysUtils, Types, + Classes, SysUtils, Types, Laz_AVL_Tree, // LazUtils - FPCAdds, AvgLvlTree, + FPCAdds, // LCL LCLType, LCLProc, WSReferences, syncobjs; // This FCL unit must be in the end. @@ -77,8 +77,8 @@ type TResourceCache = class protected - FItems: TAvgLvlTree; - FDescriptors: TAvgLvlTree; + FItems: TAvlTree; + FDescriptors: TAvlTree; FDestroying: boolean; FResourceCacheDescriptorClass: TResourceCacheDescriptorClass; FResourceCacheItemClass: TResourceCacheItemClass; @@ -95,8 +95,8 @@ type constructor Create; procedure Clear; destructor Destroy; override; - function CompareItems(Tree: TAvgLvlTree; Item1, Item2: Pointer): integer; virtual; - function CompareDescriptors(Tree: TAvgLvlTree; Desc1, Desc2: Pointer): integer; virtual; abstract; + function CompareItems(Tree: TAvlTree; Item1, Item2: Pointer): integer; virtual; + function CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; virtual; abstract; procedure ConsistencyCheck; procedure Lock; procedure Unlock; @@ -138,8 +138,7 @@ type constructor Create(TheDataSize: integer); function FindDescriptor(DescPtr: Pointer): TBlockResourceCacheDescriptor; function AddResource(Handle: TLCLHandle; DescPtr: Pointer): TBlockResourceCacheDescriptor; - function CompareDescriptors(Tree: TAvgLvlTree; - Desc1, Desc2: Pointer): integer; override; + function CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; override; public property DataSize: integer read FDataSize; property OnCompareDescPtrWithDescriptor: TListSortCompare @@ -373,8 +372,8 @@ end; constructor TResourceCache.Create; begin FMaxUnusedItem := 100; - FItems := TAvgLvlTree.CreateObjectCompare(@CompareItems); - FDescriptors := TAvgLvlTree.CreateObjectCompare(@CompareDescriptors); + FItems := TAvlTree.CreateObjectCompare(@CompareItems); + FDescriptors := TAvlTree.CreateObjectCompare(@CompareDescriptors); FResourceCacheItemClass := TResourceCacheItem; FResourceCacheDescriptorClass := TResourceCacheDescriptor; FLock := TCriticalSection.Create; @@ -400,7 +399,7 @@ begin inherited Destroy; end; -function TResourceCache.CompareItems(Tree: TAvgLvlTree; Item1, Item2: Pointer): integer; +function TResourceCache.CompareItems(Tree: TAvlTree; Item1, Item2: Pointer): integer; begin Result := CompareLCLHandles(TResourceCacheItem(Item1).Handle, TResourceCacheItem(Item2).Handle); @@ -408,7 +407,7 @@ end; procedure TResourceCache.ConsistencyCheck; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; Item: TResourceCacheItem; Desc: TResourceCacheDescriptor; Desc2: TResourceCacheDescriptor; @@ -478,7 +477,7 @@ end; function THandleResourceCache.FindItem(Handle: TLCLHandle): TResourceCacheItem; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ANode := FItems.FindKey(@Handle, TListSortCompare(@ComparePHandleWithResourceCacheItem)); @@ -500,7 +499,7 @@ end; function TBlockResourceCache.FindDescriptor(DescPtr: Pointer): TBlockResourceCacheDescriptor; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ANode := FDescriptors.FindKey(DescPtr,FOnCompareDescPtrWithDescriptor); if ANode <> nil then @@ -544,8 +543,7 @@ begin FDescriptors.Add(Result); end; -function TBlockResourceCache.CompareDescriptors(Tree: TAvgLvlTree; Desc1, - Desc2: Pointer): integer; +function TBlockResourceCache.CompareDescriptors(Tree: TAvlTree; Desc1, Desc2: Pointer): integer; begin Result := CompareMemRange(TBlockResourceCacheDescriptor(Desc1).Data, TBlockResourceCacheDescriptor(Desc2).Data, diff --git a/lcl/shellctrls.pas b/lcl/shellctrls.pas index 05f7802e6a..c648024e8a 100644 --- a/lcl/shellctrls.pas +++ b/lcl/shellctrls.pas @@ -22,8 +22,11 @@ unit ShellCtrls; interface uses - Classes, SysUtils, Forms, Graphics, LCLType, AvgLvlTree, - ComCtrls, LCLProc, FileUtil, LazFileUtils, LazUtf8, LCLStrConsts; + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, Graphics, ComCtrls, LCLProc, LCLStrConsts, + // LazUtils + FileUtil, LazFileUtils; {$if defined(Windows) or defined(darwin)} {$define CaseInsensitiveFilenames} @@ -637,7 +640,7 @@ var FileItem: TFileItem; i: Integer; MaskStrings: TStringList; - FileTree: TAvgLvlTree; + FileTree: TAvlTree; ShortFilename: AnsiString; j: Integer; {$if defined(windows) and not defined(wince)} @@ -658,7 +661,7 @@ begin // The string list implements support for multiple masks separated // by semi-colon ";" MaskStrings := TStringList.Create; - FileTree:=TAvgLvlTree.Create(@STVCompareFiles); + FileTree:=TAvlTree.Create(@STVCompareFiles); try {$ifdef NotLiteralFilenames} MaskStrings.CaseSensitive := False; diff --git a/packager/addfiletoapackagedlg.pas b/packager/addfiletoapackagedlg.pas index 49640ccd9d..79905efb1f 100644 --- a/packager/addfiletoapackagedlg.pas +++ b/packager/addfiletoapackagedlg.pas @@ -39,11 +39,15 @@ unit AddFileToAPackageDlg; interface uses - Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, - Dialogs, AVL_Tree, FileUtil, LazFileUtils, ButtonPanel, + Classes, SysUtils, Laz_AVL_Tree, + // LCL + Forms, Controls, StdCtrls, Dialogs, ButtonPanel, + // LazUtils + FileUtil, LazFileUtils, + // IdeIntf IDEWindowIntf, PackageIntf, IDEHelpIntf, - LazarusIDEStrConsts, IDEProcs, - PackageDefs, PackageSystem; + // IDE + LazarusIDEStrConsts, PackageDefs, PackageSystem; type diff --git a/packager/addpkgdependencydlg.pas b/packager/addpkgdependencydlg.pas index 14356f57c9..81b6913e7e 100644 --- a/packager/addpkgdependencydlg.pas +++ b/packager/addpkgdependencydlg.pas @@ -5,7 +5,7 @@ unit AddPkgDependencyDlg; interface uses - Classes, SysUtils, AVL_Tree, fgl, + Classes, SysUtils, Laz_AVL_Tree, fgl, // LCL Forms, Controls, Dialogs, StdCtrls, ButtonPanel, LCLProc, // LazControls diff --git a/packager/addtopackagedlg.pas b/packager/addtopackagedlg.pas index 81baca27d0..9e7a8995e1 100644 --- a/packager/addtopackagedlg.pas +++ b/packager/addtopackagedlg.pas @@ -30,7 +30,7 @@ unit AddToPackageDlg; interface uses - Math, Classes, SysUtils, AVL_Tree, + Math, Classes, SysUtils, Laz_AVL_Tree, // LCL LCLProc, LCLType, Forms, Controls, Buttons, ExtDlgs, StdCtrls, ExtCtrls, Dialogs, ComCtrls, ButtonPanel, diff --git a/packager/cleanpkgdeps.pas b/packager/cleanpkgdeps.pas index cc5dc4489e..ec7701f7ee 100644 --- a/packager/cleanpkgdeps.pas +++ b/packager/cleanpkgdeps.pas @@ -32,9 +32,13 @@ unit CleanPkgDeps; interface uses - Classes, SysUtils, contnrs, FileUtil, AvgLvlTree, LazLogger, - Forms, Controls, Graphics, Dialogs, ComCtrls, ExtCtrls, StdCtrls, - Buttons, LazarusIDEStrConsts, Project, PackageDefs, IDEImagesIntf; + Classes, SysUtils, contnrs, Laz_AVL_Tree, + // LCL + Forms, Controls, ComCtrls, ExtCtrls, StdCtrls, Buttons, + // IdeIntf + IDEImagesIntf, + // IDE + LazarusIDEStrConsts, Project, PackageDefs; const CPDProjectName = '-Project-'; @@ -310,7 +314,7 @@ end; function TCleanPkgDepsDlg.FindAlternativeRoute(Dependency, StartDependency: TPkgDependency): TFPList; var - Visited: TAvgLvlTree; + Visited: TAvlTree; function Search(Pkg: TLazPackage; Level: integer; var AltRoute: TFPList): boolean; var @@ -344,7 +348,7 @@ begin Result:=nil; if Dependency=nil then exit; if Dependency.RequiredPackage=nil then exit; - Visited:=TAvgLvlTree.Create; + Visited:=TAvlTree.Create; try CurDependency:=StartDependency; while CurDependency<>nil do begin diff --git a/packager/installpkgsetdlg.pas b/packager/installpkgsetdlg.pas index 7954fafa62..4251ebeb6d 100644 --- a/packager/installpkgsetdlg.pas +++ b/packager/installpkgsetdlg.pas @@ -37,18 +37,20 @@ unit InstallPkgSetDlg; interface uses - Classes, SysUtils, contnrs, + Classes, SysUtils, contnrs, Laz_AVL_Tree, + // LCL LCLType, LCLProc, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, - ExtCtrls, ComCtrls, ImgList, TreeFilterEdit, + ExtCtrls, ComCtrls, ImgList, + // LazControls + TreeFilterEdit, // Codetools BasicCodeTools, // LazUtils - LazFileUtils, AvgLvlTree, Laz2_XMLCfg, + LazFileUtils, Laz2_XMLCfg, // IdeIntf PackageDependencyIntf, PackageIntf, IDEImagesIntf, IDEHelpIntf, IDEDialogs, IDEWindowIntf, // IDE - LazarusIDEStrConsts, InputHistory, - LazConf, PackageDefs, PackageSystem, LPKCache; + LazarusIDEStrConsts, InputHistory, LazConf, PackageDefs, PackageSystem, LPKCache; type TOnCheckInstallPackageList = @@ -536,7 +538,7 @@ end; procedure TInstallPkgSetDialog.UpdateAvailablePackages(Immediately: boolean); var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; FilteredBranch: TTreeFilterBranch; Info: TLPKInfo; List: TStringList; diff --git a/packager/interpkgconflictfiles.pas b/packager/interpkgconflictfiles.pas index 3e248a1557..88b38e8977 100644 --- a/packager/interpkgconflictfiles.pas +++ b/packager/interpkgconflictfiles.pas @@ -53,18 +53,20 @@ unit InterPkgConflictFiles; interface uses - // RTL + FCL + LCL - Classes, SysUtils, types, math, contnrs, InterfaceBase, + // RTL + FCL + Classes, SysUtils, types, math, contnrs, Laz_AVL_Tree, + // LCL Forms, ComCtrls, Controls, ButtonPanel, Themes, Graphics, StdCtrls, Buttons, + InterfaceBase, // CodeTools BasicCodeTools, DefineTemplates, CodeToolManager, FileProcs, // LazUtils - LazFileUtils, LazFileCache, AvgLvlTree, + LazFileUtils, LazFileCache, // IDEIntf ProjectIntf, CompOptsIntf, IDEWindowIntf, LazIDEIntf, IDEMsgIntf, IDEExternToolIntf, // IDE CompilerOptions, EnvironmentOpts, IDEProcs, DialogProcs, LazarusIDEStrConsts, - TransferMacros, LazConf, PackageDefs, PackageSystem; + TransferMacros, PackageDefs, PackageSystem; type TPGInterPkgOwnerInfo = class @@ -553,9 +555,9 @@ var TargetOS: String; TargetCPU: String; LCLWidgetType: String; - FullFiles: TAvgLvlTree; // tree of TPGInterPkgFile sorted for FullFilename - Units: TAvgLvlTree; // tree of TPGInterPkgFile sorted for AnUnitName - ShortFiles: TAvgLvlTree; // tree of TPGInterPkgFile sorted for ShortFilename + FullFiles: TAvlTree; // tree of TPGInterPkgFile sorted for FullFilename + Units: TAvlTree; // tree of TPGInterPkgFile sorted for AnUnitName + ShortFiles: TAvlTree; // tree of TPGInterPkgFile sorted for ShortFilename AmbiguousFileGroups: TObjectList; // list of TPGIPAmbiguousFileGroup procedure AddOwnerInfo(TheOwner: TObject); @@ -694,12 +696,12 @@ var // remove each .o file if there is an .ppu file, so that there is only one // warning per ppu file var - Node: TAvgLvlTreeNode; - ONode: TAvgLvlTreeNode; + Node: TAvlTreeNode; + ONode: TAvlTreeNode; OFile: TPGInterPkgFile; PPUFileName: String; SearchFile: TPGInterPkgFile; - PPUNode: TAvgLvlTreeNode; + PPUNode: TAvlTreeNode; begin Node:=Units.FindLowest; while Node<>nil do begin @@ -804,7 +806,7 @@ var SearchPPU: Boolean; AnUnitName: string; - function FindOther(Node: TAvgLvlTreeNode; Left: boolean): TPGInterPkgFile; + function FindOther(Node: TAvlTreeNode; Left: boolean): TPGInterPkgFile; var IsPPU: Boolean; begin @@ -826,7 +828,7 @@ var end; var - StartNode: TAvgLvlTreeNode; + StartNode: TAvlTreeNode; h: TPGInterPkgFile; begin UnitPPU:=nil; @@ -847,10 +849,10 @@ var { Check two or more packages have the same unit (ppu/o/pas/pp/p) Unless A uses B and B has -Ur or A has -Ur and B uses A } var - CurNode: TAvgLvlTreeNode; + CurNode: TAvlTreeNode; CurUnit: TPGInterPkgFile; - FirstNodeSameUnitname: TAvgLvlTreeNode; - OtherNode: TAvgLvlTreeNode; + FirstNodeSameUnitname: TAvlTreeNode; + OtherNode: TAvlTreeNode; OtherFile: TPGInterPkgFile; PPUFile: TPGInterPkgFile; FileGroup: TPGIPAmbiguousFileGroup; @@ -956,10 +958,10 @@ var => IDE: ignore or cancel => lazbuild: warn } var - CurNode: TAvgLvlTreeNode; + CurNode: TAvlTreeNode; CurFile: TPGInterPkgFile; - FirstNodeSameShortName: TAvgLvlTreeNode; - OtherNode: TAvgLvlTreeNode; + FirstNodeSameShortName: TAvlTreeNode; + OtherNode: TAvlTreeNode; OtherFile: TPGInterPkgFile; FileGroup: TPGIPAmbiguousFileGroup; i: Integer; @@ -1029,9 +1031,9 @@ begin FilesChanged:=false; if (PkgList=nil) or (PkgList.Count=0) then exit; OwnerInfos:=TObjectList.create(true); - FullFiles:=TAvgLvlTree.Create(@ComparePGInterPkgFullFilenames); - Units:=TAvgLvlTree.Create(@ComparePGInterPkgUnitnames); - ShortFiles:=TAvgLvlTree.Create(@ComparePGInterPkgShortFilename); + FullFiles:=TAvlTree.Create(@ComparePGInterPkgFullFilenames); + Units:=TAvlTree.Create(@ComparePGInterPkgUnitnames); + ShortFiles:=TAvlTree.Create(@ComparePGInterPkgShortFilename); AmbiguousFileGroups:=TObjectList.create(true); {$IFDEF EnableCheckInterPkgFiles} Dlg:=nil; diff --git a/packager/lpkcache.pas b/packager/lpkcache.pas index 812e7916bd..2840ca5fae 100644 --- a/packager/lpkcache.pas +++ b/packager/lpkcache.pas @@ -51,10 +51,11 @@ unit LPKCache; interface uses - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, + // LCL LCLProc, // LazUtils - LazFileUtils, AvgLvlTree, Laz2_XMLCfg, LazLoggerBase, LazMethodList, + LazFileUtils, Laz2_XMLCfg, LazLoggerBase, LazMethodList, // IdeIntf PackageDependencyIntf, PackageIntf, // IDE @@ -125,8 +126,8 @@ type private FCritSec: TRTLCriticalSection; FLPKReader: TIPSLPKReader; - fLPKByFilename: TAvgLvlTree; // tree of TLPKInfo sorted for LPKFilename - fLPKByID: TAvgLvlTree; // tree of TLPKInfo sorted for ID + fLPKByFilename: TAvlTree; // tree of TLPKInfo sorted for LPKFilename + fLPKByID: TAvlTree; // tree of TLPKInfo sorted for ID fEvents: array[TLPKInfoCacheEvent] of TMethodList; fAvailableFiles: TStrings; // used by OnIterateAvailablePackages procedure QueueEmpty; @@ -156,8 +157,8 @@ type function FindPkgInfoWithFilename(aFilename: string): TLPKInfo; // requires crit sec function FindPkgInfoWithID(PkgID: TLazPackageID): TLPKInfo; // requires crit sec function FindPkgInfoWithIDAsString(PkgID: string): TLPKInfo; // requires crit sec - property LPKByFilename: TAvgLvlTree read fLPKByFilename; // tree of TLPKInfo sorted for LPKFilename - property LPKByID: TAvgLvlTree read fLPKByID; // tree of TLPKInfo sorted for ID + property LPKByFilename: TAvlTree read fLPKByFilename; // tree of TLPKInfo sorted for LPKFilename + property LPKByID: TAvlTree read fLPKByID; // tree of TLPKInfo sorted for ID // thread safe function IsValidLPKFilename(LPKFilename: string): boolean; @@ -389,7 +390,7 @@ end; function TLPKInfoCache.FindPkgInfoWithFilename(aFilename: string): TLPKInfo; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=fLPKByFilename.FindKey(Pointer(aFilename),@CompareFilenameWithIPSPkgInfo); if Node<>nil then @@ -400,7 +401,7 @@ end; function TLPKInfoCache.FindPkgInfoWithID(PkgID: TLazPackageID): TLPKInfo; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=fLPKByID.FindKey(Pointer(PkgID),@ComparePkgIDWithIPSPkgInfo); if Node<>nil then @@ -518,8 +519,8 @@ var e: TLPKInfoCacheEvent; begin InitCriticalSection(FCritSec); - fLPKByFilename:=TAvgLvlTree.Create(@CompareIPSPkgInfosWithFilename); - fLPKByID:=TAvgLvlTree.Create(@CompareIPSPkgInfos); + fLPKByFilename:=TAvlTree.Create(@CompareIPSPkgInfosWithFilename); + fLPKByID:=TAvlTree.Create(@CompareIPSPkgInfos); for e:=Low(TLPKInfoCacheEvent) to high(TLPKInfoCacheEvent) do fEvents[e]:=TMethodList.Create; end; diff --git a/packager/packagedefs.pas b/packager/packagedefs.pas index 7ff8f46f05..bad523372d 100644 --- a/packager/packagedefs.pas +++ b/packager/packagedefs.pas @@ -38,13 +38,13 @@ interface uses // FCL, LCL - Classes, SysUtils, contnrs, typinfo, AVL_Tree, + Classes, SysUtils, contnrs, typinfo, Laz_AVL_Tree, LCLProc, LCLType, LResources, Graphics, Controls, Forms, Dialogs, // Codetools FileProcs, FileUtil, LazConfigStorage, Laz2_XMLCfg, BasicCodeTools, DefineTemplates, CodeToolManager, CodeCache, CodeToolsCfgScript, CodeToolsStructs, // LazUtils - LazFileUtils, LazFileCache, LazUTF8, + LazFileUtils, LazFileCache, LazUTF8, AvgLvlTree, // IDEIntf PropEdits, LazIDEIntf, MacroIntf, MacroDefIntf, IDEOptionsIntf, PackageDependencyIntf, PackageIntf, IDEDialogs, ComponentReg, diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index 45db7d8cf5..60d315bcf6 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -39,9 +39,9 @@ uses ExtCtrls, LCLType, LCLProc, TreeFilterEdit, // LazUtils - FileUtil, LazFileUtils, LazFileCache, + FileUtil, LazFileUtils, LazFileCache, AvgLvlTree, // IDEIntf - IDEImagesIntf, MenuIntf, LazIDEIntf, ProjectIntf, CodeToolsStructs, + IDEImagesIntf, MenuIntf, LazIDEIntf, ProjectIntf, FormEditingIntf, PackageDependencyIntf, PackageIntf, IDEHelpIntf, IDEOptionsIntf, NewItemIntf, IDEWindowIntf, IDEDialogs, ComponentReg, // IDE diff --git a/packager/packagelinks.pas b/packager/packagelinks.pas index 47f835556c..fbdf80c5aa 100644 --- a/packager/packagelinks.pas +++ b/packager/packagelinks.pas @@ -39,13 +39,13 @@ unit PackageLinks; interface uses - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, // LCL Forms, LCLProc, // LazUtils Laz2_XMLCfg, LazFileCache, AvgLvlTree, LazUTF8Classes, LazFileUtils, FileUtil, // Codetools - FileProcs, CodeToolManager, CodeToolsStructs, + FileProcs, CodeToolManager, // IdeIntf MacroIntf, PackageDependencyIntf, PackageLinkIntf, PackageIntf, // IDE @@ -84,13 +84,13 @@ type TLazPackageLinks = class(TPackageLinks) private // tree of global TPackageLink sorted for ID - FGlobalLinks: TAvgLvlTree; + FGlobalLinks: TAvlTree; // tree of online TPackageLink sorted for ID - FOnlineLinks: TAvgLvlTree; + FOnlineLinks: TAvlTree; // tree of user TPackageLink sorted for ID - FUserLinksSortID: TAvgLvlTree; + FUserLinksSortID: TAvlTree; // tree of user TPackageLink sorted for Filename and FileDate - FUserLinksSortFile: TAvgLvlTree; + FUserLinksSortFile: TAvlTree; // FQueueSaveUserLinks: boolean; FChangeStamp: integer; @@ -99,17 +99,17 @@ type FStates: TPkgLinksStates; function AddUserLinkSub(APackage: TIDEPackage; const PkgFilename, PkgName: string): TPackageLink; - function FindLeftMostNode(LinkTree: TAvgLvlTree; const PkgName: string): TAvgLvlTreeNode; - function FindLinkWithPkgNameInTree(LinkTree: TAvgLvlTree; + function FindLeftMostNode(LinkTree: TAvlTree; const PkgName: string): TAvlTreeNode; + function FindLinkWithPkgNameInTree(LinkTree: TAvlTree; const PkgName: string; IgnoreFiles: TFilenameToStringTree): TLazPackageLink; - function FindLinkWithDependencyInTree(LinkTree: TAvgLvlTree; + function FindLinkWithDependencyInTree(LinkTree: TAvlTree; Dependency: TPkgDependencyID; IgnoreFiles: TFilenameToStringTree): TLazPackageLink; - function FindLinkWithPackageIDInTree(LinkTree: TAvgLvlTree; + function FindLinkWithPackageIDInTree(LinkTree: TAvlTree; APackageID: TLazPackageID): TLazPackageLink; - function FindLinkWithLPKFilenameInTree(LinkTree: TAvgLvlTree; + function FindLinkWithLPKFilenameInTree(LinkTree: TAvlTree; const PkgName, LPKFilename: string): TLazPackageLink; function GetModified: boolean; - procedure IteratePackagesInTree(MustExist: boolean; LinkTree: TAvgLvlTree; + procedure IteratePackagesInTree(MustExist: boolean; LinkTree: TAvlTree; Event: TIteratePackagesEvent); procedure SetModified(const AValue: boolean); procedure SetQueueSaveUserLinks(AValue: boolean); @@ -133,7 +133,7 @@ type function IsUpdating: boolean; procedure SaveUserLinks(Immediately: boolean = false); function NeedSaveUserLinks(const ConfigFilename: string): boolean; - procedure WriteLinkTree(LinkTree: TAvgLvlTree); + procedure WriteLinkTree(LinkTree: TAvlTree); procedure IncreaseChangeStamp; // Methods defined as interface in TLazPackageLinks. function FindLinkWithPkgName(const PkgName: string): TPackageLink; override; @@ -323,8 +323,8 @@ begin Result := GetNewerLink(GetNewerLink(Link1, Link2), Link3); end; -function TLazPackageLinks.FindLeftMostNode(LinkTree: TAvgLvlTree; - const PkgName: string): TAvgLvlTreeNode; +function TLazPackageLinks.FindLeftMostNode(LinkTree: TAvlTree; + const PkgName: string): TAvlTreeNode; // find left most link with PkgName begin Assert(PkgName<>'', 'TLazPackageLinks.FindLeftMostNode: PkgName is empty.'); @@ -337,10 +337,10 @@ constructor TLazPackageLinks.Create; begin PkgLinks:=Self; UserLinkLoadTimeValid:=false; - FGlobalLinks:=TAvgLvlTree.Create(@ComparePackageLinks); - FOnlineLinks:=TAvgLvlTree.Create(@ComparePackageLinks); - FUserLinksSortID:=TAvgLvlTree.Create(@ComparePackageLinks); - FUserLinksSortFile:=TAvgLvlTree.Create(@CompareLinksForFilenameAndFileAge); + FGlobalLinks:=TAvlTree.Create(@ComparePackageLinks); + FOnlineLinks:=TAvlTree.Create(@ComparePackageLinks); + FUserLinksSortID:=TAvlTree.Create(@ComparePackageLinks); + FUserLinksSortFile:=TAvlTree.Create(@CompareLinksForFilenameAndFileAge); FSavedChangeStamp:=CTInvalidChangeStamp; FChangeStamp:=CTInvalidChangeStamp; end; @@ -439,8 +439,8 @@ var LPKFilename, LazDir: string; Files: TStrings; i: Integer; - OldNode, OtherNode: TAvgLvlTreeNode; - UnmappedGlobalLinks, MappedGlobalLinks: TAvgLvlTree; + OldNode, OtherNode: TAvlTreeNode; + UnmappedGlobalLinks, MappedGlobalLinks: TAvlTree; begin if fUpdateLock>0 then begin Include(FStates,plsGlobalLinksNeedUpdate); @@ -452,8 +452,8 @@ begin debugln(['TPackageLinks.UpdateGlobalLinks START']); {$ENDIF} UnmappedGlobalLinks:=FGlobalLinks; - FGlobalLinks:=TAvgLvlTree.Create(@ComparePackageLinks); - MappedGlobalLinks:=TAvgLvlTree.Create(@ComparePackageLinks); + FGlobalLinks:=TAvlTree.Create(@ComparePackageLinks); + MappedGlobalLinks:=TAvlTree.Create(@ComparePackageLinks); Files:=TStringListUTF8.Create; PkgVersion:=TPkgVersion.Create; try @@ -579,9 +579,9 @@ var ItemPath: String; FileVersion: LongInt; LastUsedFormat: String; - OtherNode, ANode: TAvgLvlTreeNode; + OtherNode, ANode: TAvlTreeNode; OtherLink: TLazPackageLink; - UnmappedGlobalLinks, MappedGlobalLinks: TAvgLvlTree; + UnmappedGlobalLinks, MappedGlobalLinks: TAvlTree; begin if fUpdateLock>0 then begin Include(FStates,plsUserLinksNeedUpdate); @@ -673,8 +673,8 @@ begin // load LastUsed dates of global links Path:='GlobalPkgLinks/'; LinkCount:=XMLConfig.GetValue(Path+'Count',0); - UnmappedGlobalLinks:=TAvgLvlTree.Create(@ComparePackageLinks); - MappedGlobalLinks:=TAvgLvlTree.Create(@ComparePackageLinks); + UnmappedGlobalLinks:=TAvlTree.Create(@ComparePackageLinks); + MappedGlobalLinks:=TAvlTree.Create(@ComparePackageLinks); try for i:=1 to LinkCount do begin ItemPath:=Path+'Item'+IntToStr(i)+'/'; @@ -779,8 +779,8 @@ end; procedure TLazPackageLinks.RemoveOldUserLinks; // search for links pointing to the same file but older version var - ANode: TAvgLvlTreeNode; - NextNode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; + NextNode: TAvlTreeNode; OldPkgLink: TLazPackageLink; NewPkgLink: TLazPackageLink; begin @@ -830,7 +830,7 @@ var Path: String; CurPkgLink: TLazPackageLink; XMLConfig: TXMLConfig; - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; ItemPath: String; i: Integer; LazSrcDir: String; @@ -928,9 +928,9 @@ begin or (FileAgeCached(ConfigFilename)<>UserLinkLoadTime); end; -procedure TLazPackageLinks.WriteLinkTree(LinkTree: TAvgLvlTree); +procedure TLazPackageLinks.WriteLinkTree(LinkTree: TAvlTree); var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; Link: TLazPackageLink; begin if LinkTree=nil then exit; @@ -942,11 +942,11 @@ begin end; end; -function TLazPackageLinks.FindLinkWithPkgNameInTree(LinkTree: TAvgLvlTree; +function TLazPackageLinks.FindLinkWithPkgNameInTree(LinkTree: TAvlTree; const PkgName: string; IgnoreFiles: TFilenameToStringTree): TLazPackageLink; // find left most link with PkgName var - CurNode: TAvgLvlTreeNode; + CurNode: TAvlTreeNode; Link: TLazPackageLink; begin Result:=nil; @@ -976,13 +976,13 @@ begin end; end; -function TLazPackageLinks.FindLinkWithDependencyInTree(LinkTree: TAvgLvlTree; +function TLazPackageLinks.FindLinkWithDependencyInTree(LinkTree: TAvlTree; Dependency: TPkgDependencyID; IgnoreFiles: TFilenameToStringTree): TLazPackageLink; var Link: TLazPackageLink; - CurNode: TAvgLvlTreeNode; + CurNode: TAvlTreeNode; {$IFDEF VerbosePkgLinkSameName} - Node1: TAvgLvlTreeNode; + Node1: TAvlTreeNode; {$ENDIF} begin Result:=nil; @@ -1040,10 +1040,10 @@ begin end; end; -function TLazPackageLinks.FindLinkWithPackageIDInTree(LinkTree: TAvgLvlTree; +function TLazPackageLinks.FindLinkWithPackageIDInTree(LinkTree: TAvlTree; APackageID: TLazPackageID): TLazPackageLink; var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin ANode:=LinkTree.FindKey(APackageID,@ComparePackageIDAndLink); if ANode<>nil then @@ -1052,10 +1052,10 @@ begin Result:=nil; end; -function TLazPackageLinks.FindLinkWithLPKFilenameInTree(LinkTree: TAvgLvlTree; +function TLazPackageLinks.FindLinkWithLPKFilenameInTree(LinkTree: TAvlTree; const PkgName, LPKFilename: string): TLazPackageLink; var - CurNode: TAvgLvlTreeNode; + CurNode: TAvlTreeNode; begin CurNode:=FindLeftMostNode(LinkTree,PkgName); while CurNode<>nil do begin @@ -1079,9 +1079,9 @@ begin end; procedure TLazPackageLinks.IteratePackagesInTree(MustExist: boolean; - LinkTree: TAvgLvlTree; Event: TIteratePackagesEvent); + LinkTree: TAvlTree; Event: TIteratePackagesEvent); var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; PkgLink: TLazPackageLink; AFilename: String; begin @@ -1296,7 +1296,7 @@ end; procedure TLazPackageLinks.RemoveUserLink(Link: TPackageLink); var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; begin BeginUpdate; try @@ -1315,7 +1315,7 @@ end; procedure TLazPackageLinks.RemoveUserLinks(APackageID: TLazPackageID); var - ANode: TAvgLvlTreeNode; + ANode: TAvlTreeNode; OldLink: TLazPackageLink; begin BeginUpdate; diff --git a/packager/packagesystem.pas b/packager/packagesystem.pas index 73053506ee..b5fb4fe743 100644 --- a/packager/packagesystem.pas +++ b/packager/packagesystem.pas @@ -45,15 +45,15 @@ uses MemCheck, {$ENDIF} // FPC - Classes, SysUtils, contnrs, strutils, AVL_Tree, + Classes, SysUtils, contnrs, strutils, Laz_AVL_Tree, // LCL Forms, Controls, Dialogs, LCLProc, // LazUtils FileUtil, LazFileCache, LazLogger, LazFileUtils, LazUTF8, - Laz2_XMLCfg, laz2_XMLRead, + Laz2_XMLCfg, laz2_XMLRead, AvgLvlTree, // codetools FileProcs, DefineTemplates, CodeCache, - BasicCodeTools, NonPascalCodeTools, SourceChanger, CodeToolsStructs, + BasicCodeTools, NonPascalCodeTools, SourceChanger, CodeToolManager, DirectoryCacher, // IDEIntf, IDEExternToolIntf, IDEDialogs, IDEMsgIntf, CompOptsIntf, LazIDEIntf, MacroDefIntf, @@ -3258,7 +3258,7 @@ var Cache: TFPCUnitSetCache; CfgCache: TFPCTargetConfigCache; Node: TAVLTreeNode; - Item: PStringToStringTreeItem; + Item: PStringToStringItem; Filename: String; UnitToSrcTree: TStringToStringTree; CurUnitName: String; @@ -3295,7 +3295,7 @@ begin Node:=CfgCache.Units.Tree.FindLowest; while Node<>nil do begin - Item:=PStringToStringTreeItem(Node.Data); + Item:=PStringToStringItem(Node.Data); Node:=CfgCache.Units.Tree.FindSuccessor(Node); Filename:=Item^.Value; if PkgOutDirs.Contains(ExtractFilePath(Filename)) then begin diff --git a/packager/pkggraphexplorer.pas b/packager/pkggraphexplorer.pas index 7e05574f00..060994858b 100644 --- a/packager/pkggraphexplorer.pas +++ b/packager/pkggraphexplorer.pas @@ -37,12 +37,16 @@ unit PkgGraphExplorer; interface uses - Classes, SysUtils, LCLProc, Forms, Controls, Buttons, ComCtrls, - StdCtrls, Menus, Dialogs, Graphics, LCLType, ExtCtrls, ButtonPanel, - AVL_Tree, contnrs, LCLIntf, - IDECommands, PackageIntf, IDEImagesIntf, LazIDEIntf, + Classes, SysUtils, contnrs, Laz_AVL_Tree, + // LCL + LCLProc, Forms, Controls, ComCtrls, StdCtrls, Menus, + LCLType, ExtCtrls, ButtonPanel, LCLIntf, + // IdeIntf + IDECommands, PackageIntf, IDEImagesIntf, + // LazControls LvlGraphCtrl, - LazConf, LazarusIDEStrConsts, IDEProcs, IDEOptionDefs, EnvironmentOpts, + // IDE + LazarusIDEStrConsts, IDEProcs, IDEOptionDefs, Project, PackageDefs, PackageSystem, PackageEditor, CleanPkgDeps; const diff --git a/packager/pkglinksdlg.pas b/packager/pkglinksdlg.pas index cf9318ce39..dfaab182e3 100644 --- a/packager/pkglinksdlg.pas +++ b/packager/pkglinksdlg.pas @@ -37,13 +37,13 @@ unit PkgLinksDlg; interface uses - Classes, SysUtils, + Classes, SysUtils, Laz_AVL_Tree, // LCL Forms, Controls, StdCtrls, Buttons, Grids, ExtCtrls, ComCtrls, Menus, // Codetools FileProcs, // LazUtils - AvgLvlTree, LazUTF8, LazFileUtils, LazFileCache, + LazUTF8, LazFileUtils, LazFileCache, // IdeIntf PackageLinkIntf, PackageIntf, // IDE @@ -106,7 +106,7 @@ type FCountLPKInvalid: integer; FCountOnlineLinks: Integer; FCountUserLinks: Integer; - FLinks: TAvglVLTree;// tree of TPkgLinkInfo sorted for name and version + FLinks: TAVLTree;// tree of TPkgLinkInfo sorted for name and version FCollectingOrigin: TPkgLinkOrigin; procedure RescanGlobalLinks; procedure UpdateFacets; @@ -267,19 +267,19 @@ var end; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; Link: TPkgLinkInfo; i: Integer; OriginStr: String; Info: TLPKInfo; - NextNode: TAvgLvlTreeNode; + NextNode: TAvlTreeNode; s: String; begin // collect links ClearLinks; if FLinks=nil then - FLinks:=TAvgLvlTree.Create(@ComparePackageLinks); + FLinks:=TAVLTree.Create(@ComparePackageLinks); if ShowGlobalLinksCheckBox.Checked then begin FCollectingOrigin:=ploGlobal; LazPackageLinks.IteratePackages(false,@IteratePackages,[ploGlobal]); @@ -459,7 +459,7 @@ end; function TPackageLinksDialog.GetLinkWithEffectiveFilename(Filename: string; Origins: TPkgLinkOrigins): TPkgLinkInfo; var - Node: TAvgLvlTreeNode; + Node: TAvlTreeNode; begin Node:=FLinks.FindLowest; while Node<>nil do begin diff --git a/packager/pkgmanager.pas b/packager/pkgmanager.pas index 89fd3b1fd4..4706687592 100644 --- a/packager/pkgmanager.pas +++ b/packager/pkgmanager.pas @@ -51,9 +51,9 @@ uses LCLProc, Forms, Controls, Dialogs, Menus, ComCtrls, LResources, // LazUtils LazUTF8, Laz2_XMLCfg, lazutf8classes, LazFileUtils, LazFileCache, StringHashList, - Translations, + Translations, AvgLvlTree, // Codetools - CodeToolsConfig, CodeToolManager, CodeCache, CodeToolsStructs, BasicCodeTools, + CodeToolsConfig, CodeToolManager, CodeCache, BasicCodeTools, FileProcs, CodeTree, // IDE Interface NewItemIntf, ProjPackIntf, ProjectIntf, PackageIntf, PackageDependencyIntf, PackageLinkIntf, @@ -2123,7 +2123,7 @@ var function CheckNewFilesDoNotExist: boolean; var - S2SItem: PStringToStringTreeItem; + S2SItem: PStringToStringItem; OldFilename: String; NewFilename: String; ConflictFile: TIDEOwnedFile; @@ -2256,7 +2256,7 @@ var OutFilename: String; CurUnitName: String; Ext: String; - S2SItem: PStringToStringTreeItem; + S2SItem: PStringToStringItem; OldFilename: String; SeparateOutDir: Boolean; r: TModalResult;